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.
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
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
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
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
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
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