Fix game controllers ignoring the last listed button

This commit is contained in:
Marcel Admiraal 2021-05-21 17:17:42 +01:00
parent 87dfd6e6cb
commit 18825ad4ff
6 changed files with 28 additions and 16 deletions

View file

@ -413,6 +413,7 @@ void register_global_constants() {
BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_19); BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_19);
BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_20); BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_20);
BIND_GLOBAL_ENUM_CONSTANT(JOY_BUTTON_21); 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_BUTTON_MAX);
BIND_GLOBAL_ENUM_CONSTANT(JOY_SONY_CIRCLE); 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_DOWN);
BIND_GLOBAL_ENUM_CONSTANT(JOY_DPAD_LEFT); BIND_GLOBAL_ENUM_CONSTANT(JOY_DPAD_LEFT);
BIND_GLOBAL_ENUM_CONSTANT(JOY_DPAD_RIGHT); BIND_GLOBAL_ENUM_CONSTANT(JOY_DPAD_RIGHT);
BIND_GLOBAL_ENUM_CONSTANT(JOY_GUIDE);
BIND_GLOBAL_ENUM_CONSTANT(JOY_MISC1); BIND_GLOBAL_ENUM_CONSTANT(JOY_MISC1);
BIND_GLOBAL_ENUM_CONSTANT(JOY_PADDLE1); BIND_GLOBAL_ENUM_CONSTANT(JOY_PADDLE1);
BIND_GLOBAL_ENUM_CONSTANT(JOY_PADDLE2); BIND_GLOBAL_ENUM_CONSTANT(JOY_PADDLE2);

View file

@ -84,7 +84,8 @@ enum JoystickList {
JOY_BUTTON_19 = 19, JOY_BUTTON_19 = 19,
JOY_BUTTON_20 = 20, JOY_BUTTON_20 = 20,
JOY_BUTTON_21 = 21, JOY_BUTTON_21 = 21,
JOY_BUTTON_MAX = 22, JOY_BUTTON_22 = 22,
JOY_BUTTON_MAX = 23,
JOY_L = JOY_BUTTON_4, JOY_L = JOY_BUTTON_4,
JOY_R = JOY_BUTTON_5, JOY_R = JOY_BUTTON_5,
@ -98,12 +99,13 @@ enum JoystickList {
JOY_DPAD_DOWN = JOY_BUTTON_13, JOY_DPAD_DOWN = JOY_BUTTON_13,
JOY_DPAD_LEFT = JOY_BUTTON_14, JOY_DPAD_LEFT = JOY_BUTTON_14,
JOY_DPAD_RIGHT = JOY_BUTTON_15, JOY_DPAD_RIGHT = JOY_BUTTON_15,
JOY_MISC1 = JOY_BUTTON_16, JOY_GUIDE = JOY_BUTTON_16,
JOY_PADDLE1 = JOY_BUTTON_17, JOY_MISC1 = JOY_BUTTON_17,
JOY_PADDLE2 = JOY_BUTTON_18, JOY_PADDLE1 = JOY_BUTTON_18,
JOY_PADDLE3 = JOY_BUTTON_19, JOY_PADDLE2 = JOY_BUTTON_19,
JOY_PADDLE4 = JOY_BUTTON_20, JOY_PADDLE3 = JOY_BUTTON_20,
JOY_TOUCHPAD = JOY_BUTTON_21, JOY_PADDLE4 = JOY_BUTTON_21,
JOY_TOUCHPAD = JOY_BUTTON_22,
JOY_SONY_CIRCLE = JOY_BUTTON_1, JOY_SONY_CIRCLE = JOY_BUTTON_1,
JOY_SONY_X = JOY_BUTTON_0, JOY_SONY_X = JOY_BUTTON_0,

View file

@ -1003,7 +1003,10 @@
<constant name="JOY_BUTTON_21" value="21" enum="JoystickList"> <constant name="JOY_BUTTON_21" value="21" enum="JoystickList">
Gamepad button 21. Gamepad button 21.
</constant> </constant>
<constant name="JOY_BUTTON_MAX" value="22" enum="JoystickList"> <constant name="JOY_BUTTON_22" value="22" enum="JoystickList">
Gamepad button 22.
</constant>
<constant name="JOY_BUTTON_MAX" value="23" enum="JoystickList">
Represents the maximum number of joystick buttons supported. Represents the maximum number of joystick buttons supported.
</constant> </constant>
<constant name="JOY_SONY_CIRCLE" value="1" enum="JoystickList"> <constant name="JOY_SONY_CIRCLE" value="1" enum="JoystickList">
@ -1081,22 +1084,25 @@
<constant name="JOY_DPAD_RIGHT" value="15" enum="JoystickList"> <constant name="JOY_DPAD_RIGHT" value="15" enum="JoystickList">
Gamepad DPad right. Gamepad DPad right.
</constant> </constant>
<constant name="JOY_MISC1" value="16" enum="JoystickList"> <constant name="JOY_GUIDE" value="16" enum="JoystickList">
Gamepad SDL guide button.
</constant>
<constant name="JOY_MISC1" value="17" enum="JoystickList">
Gamepad SDL miscellaneous button. Gamepad SDL miscellaneous button.
</constant> </constant>
<constant name="JOY_PADDLE1" value="17" enum="JoystickList"> <constant name="JOY_PADDLE1" value="18" enum="JoystickList">
Gamepad SDL paddle 1 button. Gamepad SDL paddle 1 button.
</constant> </constant>
<constant name="JOY_PADDLE2" value="18" enum="JoystickList"> <constant name="JOY_PADDLE2" value="19" enum="JoystickList">
Gamepad SDL paddle 2 button. Gamepad SDL paddle 2 button.
</constant> </constant>
<constant name="JOY_PADDLE3" value="19" enum="JoystickList"> <constant name="JOY_PADDLE3" value="20" enum="JoystickList">
Gamepad SDL paddle 3 button. Gamepad SDL paddle 3 button.
</constant> </constant>
<constant name="JOY_PADDLE4" value="20" enum="JoystickList"> <constant name="JOY_PADDLE4" value="21" enum="JoystickList">
Gamepad SDL paddle 4 button. Gamepad SDL paddle 4 button.
</constant> </constant>
<constant name="JOY_TOUCHPAD" value="21" enum="JoystickList"> <constant name="JOY_TOUCHPAD" value="22" enum="JoystickList">
Gamepad SDL touchpad button. Gamepad SDL touchpad button.
</constant> </constant>
<constant name="JOY_L" value="4" enum="JoystickList"> <constant name="JOY_L" value="4" enum="JoystickList">

View file

@ -60,6 +60,7 @@ static const char *_button_names[JOY_BUTTON_MAX] = {
"D-Pad Down", "D-Pad Down",
"D-Pad Left", "D-Pad Left",
"D-Pad Right", "D-Pad Right",
"Home, DualShock PS, Guide",
"Xbox Share, PS5 Microphone, Nintendo Capture", "Xbox Share, PS5 Microphone, Nintendo Capture",
"Xbox Paddle 1", "Xbox Paddle 1",
"Xbox Paddle 2", "Xbox Paddle 2",

View file

@ -1254,6 +1254,7 @@ static const char *_buttons[JOY_BUTTON_MAX] = {
"DPAD Down", "DPAD Down",
"DPAD Left", "DPAD Left",
"DPAD Right", "DPAD Right",
"Guide",
"Misc 1", "Misc 1",
"Paddle 1", "Paddle 1",
"Paddle 2", "Paddle 2",

View file

@ -81,7 +81,7 @@ class InputDefault : public Input {
StringName name; StringName name;
StringName uid; StringName uid;
bool connected; 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]; float last_axis[JOY_AXIS_MAX];
int last_hat; int last_hat;
int mapping; int mapping;
@ -91,7 +91,7 @@ class InputDefault : public Input {
for (int i = 0; i < JOY_AXIS_MAX; i++) { for (int i = 0; i < JOY_AXIS_MAX; i++) {
last_axis[i] = 0.0f; 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; last_buttons[i] = false;
} }
connected = false; connected = false;