From 3c55a9c2101ea9b708d424959b32e6ebc4c68a9f Mon Sep 17 00:00:00 2001 From: Marcel Admiraal Date: Fri, 21 May 2021 17:17:42 +0100 Subject: [PATCH] Fix game controllers ignoring the last listed button (cherry picked from commit 18825ad4ff5f650412ff9a0031e3b3cbd1fe566e) --- core/global_constants.cpp | 2 ++ core/os/input_event.h | 16 +++++++++------- doc/classes/@GlobalScope.xml | 20 +++++++++++++------- editor/project_settings_editor.cpp | 1 + main/input_default.cpp | 1 + main/input_default.h | 6 ++---- 6 files changed, 28 insertions(+), 18 deletions(-) diff --git a/core/global_constants.cpp b/core/global_constants.cpp index b460c2960e3..9c66d919d89 100644 --- a/core/global_constants.cpp +++ b/core/global_constants.cpp @@ -415,6 +415,7 @@ void register_global_constants() { BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_19); BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_20); BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_21); + BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_22); BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_MAX); BIND_GLOBAL_ENUM_CONSTANT(JOY_SONY_CIRCLE); @@ -448,6 +449,7 @@ void register_global_constants() { BIND_GLOBAL_ENUM_CONSTANT(JOY_DPAD_DOWN); BIND_GLOBAL_ENUM_CONSTANT(JOY_DPAD_LEFT); BIND_GLOBAL_ENUM_CONSTANT(JOY_DPAD_RIGHT); + BIND_GLOBAL_ENUM_CONSTANT(JOY_GUIDE); BIND_GLOBAL_ENUM_CONSTANT(JOY_MISC1); BIND_GLOBAL_ENUM_CONSTANT(JOY_PADDLE1); BIND_GLOBAL_ENUM_CONSTANT(JOY_PADDLE2); diff --git a/core/os/input_event.h b/core/os/input_event.h index 6248f99f781..6bb9ad58f88 100644 --- a/core/os/input_event.h +++ b/core/os/input_event.h @@ -85,7 +85,8 @@ enum JoystickList { JOY_BUTTON_19 = 19, JOY_BUTTON_20 = 20, JOY_BUTTON_21 = 21, - JOY_BUTTON_MAX = 22, + JOY_BUTTON_22 = 22, + JOY_BUTTON_MAX = 23, JOY_L = JOY_BUTTON_4, JOY_R = JOY_BUTTON_5, @@ -99,12 +100,13 @@ enum JoystickList { JOY_DPAD_DOWN = JOY_BUTTON_13, JOY_DPAD_LEFT = JOY_BUTTON_14, JOY_DPAD_RIGHT = JOY_BUTTON_15, - JOY_MISC1 = JOY_BUTTON_16, - JOY_PADDLE1 = JOY_BUTTON_17, - JOY_PADDLE2 = JOY_BUTTON_18, - JOY_PADDLE3 = JOY_BUTTON_19, - JOY_PADDLE4 = JOY_BUTTON_20, - JOY_TOUCHPAD = JOY_BUTTON_21, + JOY_GUIDE = JOY_BUTTON_16, + JOY_MISC1 = JOY_BUTTON_17, + JOY_PADDLE1 = JOY_BUTTON_18, + JOY_PADDLE2 = JOY_BUTTON_19, + JOY_PADDLE3 = JOY_BUTTON_20, + JOY_PADDLE4 = JOY_BUTTON_21, + JOY_TOUCHPAD = JOY_BUTTON_22, JOY_SONY_CIRCLE = JOY_BUTTON_1, JOY_SONY_X = JOY_BUTTON_0, diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 789147a7837..f0fcf5bf44a 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -1003,7 +1003,10 @@ Gamepad button 21. - + + Gamepad button 22. + + Represents the maximum number of joystick buttons supported. @@ -1081,22 +1084,25 @@ Gamepad DPad right. - + + Gamepad SDL guide button. + + Gamepad SDL miscellaneous button. - + Gamepad SDL paddle 1 button. - + Gamepad SDL paddle 2 button. - + Gamepad SDL paddle 3 button. - + Gamepad SDL paddle 4 button. - + Gamepad SDL touchpad button. diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 14cfbdef9d9..aebefdf4957 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -60,6 +60,7 @@ static const char *_button_names[JOY_BUTTON_MAX] = { "D-Pad Down", "D-Pad Left", "D-Pad Right", + "Home, DualShock PS, Guide", "Xbox Share, PS5 Microphone, Nintendo Capture", "Xbox Paddle 1", "Xbox Paddle 2", diff --git a/main/input_default.cpp b/main/input_default.cpp index f885722c682..c274c6c7530 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -1304,6 +1304,7 @@ static const char *_buttons[JOY_BUTTON_MAX] = { "DPAD Down", "DPAD Left", "DPAD Right", + "Guide", "Misc 1", "Paddle 1", "Paddle 2", diff --git a/main/input_default.h b/main/input_default.h index 4d167372c10..c8c6c2c97b8 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -83,7 +83,7 @@ class InputDefault : public Input { StringName name; StringName uid; bool connected; - bool last_buttons[JOY_BUTTON_MAX + 13]; //apparently SDL specifies 35 possible buttons on android + bool last_buttons[JOY_BUTTON_MAX + 12]; //apparently SDL specifies 35 possible buttons on android float last_axis[JOY_AXIS_MAX]; int last_hat; int mapping; @@ -91,11 +91,9 @@ class InputDefault : public Input { Joypad() { for (int i = 0; i < JOY_AXIS_MAX; i++) { - last_axis[i] = 0.0f; } - for (int i = 0; i < JOY_BUTTON_MAX + 13; i++) { - + for (int i = 0; i < JOY_BUTTON_MAX + 12; i++) { last_buttons[i] = false; } connected = false;