foxygit / doom Log in
commit 4199287755da4468bb466230b305369439efece0
Author:     Michael Day <contact@michaelcday.com>
AuthorDate: Wed Aug 9 23:31:55 2023 -0400
Commit:     Turo Lamminen <turol@users.noreply.github.com>
CommitDate: Wed Aug 23 11:42:50 2023 +0300

    Allow swapping of left and right sticks
---
 src/setup/joystick.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/src/setup/joystick.c b/src/setup/joystick.c
index dd24448c..8d787443 100644
--- a/src/setup/joystick.c
+++ b/src/setup/joystick.c
@@ -1106,6 +1106,28 @@ static void AddJoystickControl(TXT_UNCAST_ARG(table), const char *label, int *va
                    NULL);
 }

+static void SwapLRSticks(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused))
+{
+    // Single pad/stick controllers don't get a joystick_strafe_axis value
+    if (joystick_strafe_axis >= 0)
+    {
+        if (joystick_x_axis == SDL_CONTROLLER_AXIS_LEFTX)
+        {
+            joystick_x_axis = SDL_CONTROLLER_AXIS_RIGHTX;
+            joystick_y_axis = SDL_CONTROLLER_AXIS_LEFTY;
+            joystick_strafe_axis = SDL_CONTROLLER_AXIS_LEFTX;
+            joystick_look_axis = SDL_CONTROLLER_AXIS_RIGHTY;
+        }
+        else
+        {
+            joystick_x_axis = SDL_CONTROLLER_AXIS_LEFTX;
+            joystick_y_axis = SDL_CONTROLLER_AXIS_RIGHTY;
+            joystick_strafe_axis = SDL_CONTROLLER_AXIS_RIGHTX;
+            joystick_look_axis = SDL_CONTROLLER_AXIS_LEFTY;
+        }
+    }
+}
+
 void ConfigJoystick(TXT_UNCAST_ARG(widget), void *user_data)
 {
     txt_window_t *window;
@@ -1164,6 +1186,17 @@ void ConfigJoystick(TXT_UNCAST_ARG(widget), void *user_data)
                    NULL);
     }

+    TXT_AddWidget(window,
+        TXT_NewConditional(&use_gamepad, 1,
+            TXT_MakeTable(6,
+                   TXT_NewButton2("Swap L and R sticks", SwapLRSticks, NULL),
+                   TXT_TABLE_OVERFLOW_RIGHT,
+                   TXT_TABLE_OVERFLOW_RIGHT,
+                   TXT_TABLE_EMPTY,
+                   TXT_TABLE_EMPTY,
+                   TXT_TABLE_EMPTY,
+                   NULL)));
+
     TXT_AddWidget(window, TXT_NewSeparator("Buttons"));

     AddJoystickControl(window, "Fire/Attack", &joybfire);