From 18825ad4ff5f650412ff9a0031e3b3cbd1fe566e 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 --- 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 | 4 ++-- 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/core/global_constants.cpp b/core/global_constants.cpp index b1b804eacf9..73410b4ea39 100644 --- a/core/global_constants.cpp +++ b/core/global_constants.cpp @@ -413,6 +413,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); @@ -446,6 +447,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 9880a0a9fd5..4ae4933d616 100644 --- a/core/os/input_event.h +++ b/core/os/input_event.h @@ -84,7 +84,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, @@ -98,12 +99,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 f73d6afc58b..58256a3a723 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 63d3eaf748c..4d03a2a0035 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 79056221808..ba5c02bce0e 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -1254,6 +1254,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 ace0a164c79..281e30efeff 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -81,7 +81,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,7 +91,7 @@ class InputDefault : public Input { 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;