diff options
author | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2022-01-10 13:43:44 +0200 |
---|---|---|
committer | bruvzg <7645683+bruvzg@users.noreply.github.com> | 2022-01-10 14:39:05 +0200 |
commit | 61ea8f83377952a8ca8e1cb5cf8ec1099ca8369f (patch) | |
tree | d64d786ecf9f88172ea61cf94f6e3498b27b5240 | |
parent | 5f7bbf4d333ec4a7473a8e720de57bc8cbadd469 (diff) |
Add joystick button index boundary check. Increase max. button number to 128 (max. buttons supported by DirectInput).
-rw-r--r-- | core/input/input.cpp | 3 | ||||
-rw-r--r-- | core/input/input_enums.h | 2 | ||||
-rw-r--r-- | doc/classes/@GlobalScope.xml | 7 |
3 files changed, 8 insertions, 4 deletions
diff --git a/core/input/input.cpp b/core/input/input.cpp index c5540f926d..507a686cab 100644 --- a/core/input/input.cpp +++ b/core/input/input.cpp @@ -892,7 +892,8 @@ void Input::set_event_dispatch_function(EventDispatchFunc p_function) { void Input::joy_button(int p_device, JoyButton 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((int)p_button, (int)JoyButton::MAX); + if (joy.last_buttons[(size_t)p_button] == p_pressed) { return; } diff --git a/core/input/input_enums.h b/core/input/input_enums.h index aa55316ec8..0282de2176 100644 --- a/core/input/input_enums.h +++ b/core/input/input_enums.h @@ -83,7 +83,7 @@ enum class JoyButton { PADDLE4 = 19, TOUCHPAD = 20, SDL_MAX = 21, - MAX = 36, // Android supports up to 36 buttons. + MAX = 128, // Android supports up to 36 buttons. DirectInput supports up to 128 buttons. }; enum class MIDIMessage { diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 20a371c3d0..be7ac1164e 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -2134,8 +2134,11 @@ <constant name="JOY_BUTTON_SDL_MAX" value="21" enum="JoyButton"> The number of SDL game controller buttons. </constant> - <constant name="JOY_BUTTON_MAX" value="36" enum="JoyButton"> - The maximum number of game controller buttons: Android supports up to 36 buttons. + <constant name="JOY_BUTTON_MAX" value="128" enum="JoyButton"> + 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. </constant> <constant name="JOY_AXIS_INVALID" value="-1" enum="JoyAxis"> An invalid game controller axis. |