diff --git a/core/os/input_event.h b/core/os/input_event.h index 4b202407978..f0af4ee4be6 100644 --- a/core/os/input_event.h +++ b/core/os/input_event.h @@ -85,7 +85,7 @@ enum JoystickList { JOY_BUTTON_20 = 20, JOY_BUTTON_21 = 21, JOY_BUTTON_22 = 22, - JOY_BUTTON_MAX = 23, + JOY_BUTTON_MAX = 128, // Android supports up to 36 buttons. DirectInput supports up to 128 buttons. JOY_L = JOY_BUTTON_4, JOY_R = JOY_BUTTON_5, diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index d1b3e3882ca..1ba70d06d3a 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -1015,8 +1015,11 @@ Gamepad button 22. - - Represents the maximum number of joystick buttons supported. + + The maximum number of game controller buttons supported by the engine. The actual limit may be lower on specific platforms: + - Android: Up to 36 buttons. + - Linux: Up to 80 buttons. + - Windows and macOS: Up to 128 buttons. DualShock circle button. diff --git a/main/input_default.cpp b/main/input_default.cpp index 7ca580f8ede..c2c874076fb 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -775,7 +775,8 @@ InputDefault::InputDefault() { void InputDefault::joy_button(int p_device, int p_button, bool p_pressed) { _THREAD_SAFE_METHOD_; Joypad &joy = joy_names[p_device]; - //printf("got button %i, mapping is %i\n", p_button, joy.mapping); + ERR_FAIL_INDEX(p_button, JOY_BUTTON_MAX); + if (joy.last_buttons[p_button] == p_pressed) { return; }