Input

Implemented in src/lua/luainputapi.cpp.

All input functions poll current state once per call — there's no event/callback model for input (unlike collisions, which do have a callback — see collision.md). Call these from your own per-frame update function.

Every constant below (see the bottom of this page) is registered as a plain Lua global (an integer) — no require, no table lookup, just reference the name directly. They match raylib's own KeyboardKey/GamepadButton/GamepadAxis/ControllerType enums 1:1.

Keyboard

input_is_key_down(key) -> down       -- true every frame the key is held
input_is_key_up(key) -> up           -- true every frame the key is NOT held
input_is_key_released(key) -> released -- true only on the frame the key transitions from down to up

function Player.update(dt)
  if input_is_key_down(KEY_LEFT) then
    -- move left
  end
end

Gamepad

A gamepad must be registered with input_add_gamepad once (typically at startup) before any input_is_gamepad_button_*/input_get_gamepad_axis call for that id will report real state.

input_is_gamepad_button_down(gamepadId, button) -> down
input_is_gamepad_button_up(gamepadId, button) -> up
input_get_gamepad_axis(gamepadId, axis) -> value   -- -1.0 .. 1.0
input_add_gamepad(gamepadId)                        -- register a gamepad id so it's actually polled

input_add_gamepad(0)

function Player.update(dt)
  if input_is_gamepad_button_down(0, GAMEPAD_BUTTON_LEFT_FACE_LEFT) then
    -- move left
  end

  -- analog stick, with a deadzone - raw axis values jitter near 0 even
  -- when the stick is physically centered
  local axisX = input_get_gamepad_axis(0, GAMEPAD_AXIS_LEFT_X)
  if axisX < -0.1 then
    -- move left
  end
end

Keyboard keys

The key argument input_is_key_down/input_is_key_up/ input_is_key_released take - every one raylib itself supports.

KEY_NULL, KEY_APOSTROPHE, KEY_COMMA, KEY_MINUS, KEY_PERIOD, KEY_SLASH, KEY_ZERO, KEY_ONE, KEY_TWO, KEY_THREE, KEY_FOUR, KEY_FIVE, KEY_SIX, KEY_SEVEN, KEY_EIGHT, KEY_NINE, KEY_SEMICOLON, KEY_EQUAL, KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_LEFT_BRACKET, KEY_BACKSLASH, KEY_RIGHT_BRACKET, KEY_GRAVE, KEY_SPACE, KEY_ESCAPE, KEY_ENTER, KEY_TAB, KEY_BACKSPACE, KEY_INSERT, KEY_DELETE, KEY_RIGHT, KEY_LEFT, KEY_DOWN, KEY_UP, KEY_PAGE_UP, KEY_PAGE_DOWN, KEY_HOME, KEY_END, KEY_CAPS_LOCK, KEY_SCROLL_LOCK, KEY_NUM_LOCK, KEY_PRINT_SCREEN, KEY_PAUSE, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_F9, KEY_F10, KEY_F11, KEY_F12, KEY_LEFT_SHIFT, KEY_LEFT_CONTROL, KEY_LEFT_ALT, KEY_LEFT_SUPER, KEY_RIGHT_SHIFT, KEY_RIGHT_CONTROL, KEY_RIGHT_ALT, KEY_RIGHT_SUPER, KEY_KB_MENU, KEY_KP_0, KEY_KP_1, KEY_KP_2, KEY_KP_3, KEY_KP_4, KEY_KP_5, KEY_KP_6, KEY_KP_7, KEY_KP_8, KEY_KP_9, KEY_KP_DECIMAL, KEY_KP_DIVIDE, KEY_KP_MULTIPLY, KEY_KP_SUBTRACT, KEY_KP_ADD, KEY_KP_ENTER, KEY_KP_EQUAL, KEY_BACK, KEY_MENU, KEY_VOLUME_UP, KEY_VOLUME_DOWN

Gamepad buttons

The button argument input_is_gamepad_button_down/ input_is_gamepad_button_up take. Naming gotcha: raylib's own gamepad button naming (mirrored here exactly) calls the D-pad LEFT_FACE_UP/DOWN/LEFT/RIGHT - the face buttons (A/B/X/Y or equivalent) are RIGHT_FACE_*. Easy to mix up the two at a glance.

GAMEPAD_BUTTON_UNKNOWN, GAMEPAD_BUTTON_LEFT_FACE_UP, GAMEPAD_BUTTON_LEFT_FACE_RIGHT, GAMEPAD_BUTTON_LEFT_FACE_DOWN, GAMEPAD_BUTTON_LEFT_FACE_LEFT, GAMEPAD_BUTTON_RIGHT_FACE_UP, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, GAMEPAD_BUTTON_RIGHT_FACE_DOWN, GAMEPAD_BUTTON_RIGHT_FACE_LEFT, GAMEPAD_BUTTON_LEFT_TRIGGER_1, GAMEPAD_BUTTON_LEFT_TRIGGER_2, GAMEPAD_BUTTON_RIGHT_TRIGGER_1, GAMEPAD_BUTTON_RIGHT_TRIGGER_2, GAMEPAD_BUTTON_MIDDLE_LEFT, GAMEPAD_BUTTON_MIDDLE, GAMEPAD_BUTTON_MIDDLE_RIGHT, GAMEPAD_BUTTON_LEFT_THUMB, GAMEPAD_BUTTON_RIGHT_THUMB

Gamepad axes

The axis argument input_get_gamepad_axis takes.

GAMEPAD_AXIS_LEFT_X, GAMEPAD_AXIS_LEFT_Y, GAMEPAD_AXIS_RIGHT_X, GAMEPAD_AXIS_RIGHT_Y, GAMEPAD_AXIS_LEFT_TRIGGER, GAMEPAD_AXIS_RIGHT_TRIGGER

Controller types

Mirrors raylib's own ControllerType for completeness — no primitive in this file actually takes one as an argument today.

CONTROLLER_NULL, CONTROLLER_KEYBOARD, CONTROLLER_GAMEPAD, CONTROLLER_MOUSE, CONTROLLER_TOUCH