> For the complete documentation index, see [llms.txt](https://cmonkeys.gitbook.io/cinput-reference-manual/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cmonkeys.gitbook.io/cinput-reference-manual/using-cinput/a-brief-explanation-of-cinput.md).

# A Brief Explanation of cInput

Before we get to the nuts and bolts of defining the default inputs, it may be useful to clarify the mindset behind cInput and how it's intended to function behind-the-scenes.

## Action

cInput primarily works with `actions` which are generally named after what you intend to use an input *to do*. Some examples of action names could be `"Jump"`, `"Shoot"`, `"Move Left"`, or `"Move Right"`. That said, `actions` can be named anything you want.

For each action, you can assign up to two inputs which cInput will use to get the values of the action. For example, the `"Move Left"` action could have the `A` and `Left Arrow` keys assigned to it.

The word `key` (or `keys`) in this manual will most often refer to a key on the keyboard. However, because cInput attempts to mimic Unity's Input class as closely as possible, sometimes the word `key` is used when referring to `actions` (e.g., the [`GetKey()`](/cinput-reference-manual/script-reference/methods/getkey.md) or [`ChangeKey()`](/cinput-reference-manual/script-reference/methods/changekey.md) methods).

Additionally, the word `button` (or `buttons`) usually refers to a button on a gamepad. However, sometimes it is easier to use the word `button` to refer to any inputs assigned to the `action` itself, regardless of what types of inputs they may be. In this situation, the word `button` is usually preceded with the name of the action, which will be in quotes. For example, the "Jump" button.

## Axis

An `axis` in cInput can be made up from one or two `actions`. If only one `action` is assigned to an `axis`, the `axis` will return a positive value between `0...1`. If two `actions` are assigned to an `axis` then the first `action` will give the negative values (`-1...0`) for the `axis`, while the second `action` will give the positive values (`0...1`) for the `axis`.

Because `axes` are made up from `actions`, you must first define the `actions` for each `axis` before you can define the `axis` itself.

If the inputs used for an axis are digital inputs--meaning they have only two states: on or off (`0` or `1`)--such as keyboard keys or most gamepad buttons, cInput will create a virtual (i.e. simulated) analog axis. In other words, instead of returning only integer values (`-1`, `0`, or `1`), [`GetAxis()`](/cinput-reference-manual/script-reference/methods/getaxis.md) will return a float value in the range of `-1...1` inclusive. If this is undesirable and you want the values exactly as they actually are, use [`GetAxisRaw()`](/cinput-reference-manual/script-reference/methods/getaxisraw.md) instead.
