diff --git a/src/g_input.c b/src/g_input.c index af4b9cd34..ce9ff1eb7 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -84,9 +84,9 @@ INT32 G_GetDevicePlayer(INT32 deviceID) // converts ev_joystick axis to its corresponding key INT32 G_AxisToKey(event_t *ev) { - return KEY_AXIS1 + (ev->data1 >= JOYANALOGS*2 - ? ev->data1 + JOYANALOGS*2 - : ev->data1*2 + (ev->data2 >= 0)); + return KEY_AXIS1 + (ev->data1 >= JOYANALOGS + ? ev->data1 + JOYANALOGS // triggers + : ev->data1*2 + (ev->data2 >= 0)); // analog sticks } // @@ -189,7 +189,7 @@ void G_MapEventsToControls(event_t *ev) break; } - if (ev->data1 >= JOYAXISSETS*2) + if (ev->data1 >= JOYAXISES) { #ifdef PARANOIA CONS_Debug(DBG_GAMELOGIC, "Bad joystick axis event %d\n", ev->data1); @@ -197,36 +197,20 @@ void G_MapEventsToControls(event_t *ev) break; } - i = ev->data1; - if (G_GetDevicePlayer(ev->device) == 0) { if (CON_Ready() || chat_on) break; } - if (i >= 2 * JOYANALOGS) + i = G_AxisToKey(ev); + if (ev->data1 < JOYANALOGS) { - // The trigger axes are handled specially. - i -= 2 * JOYANALOGS; - gamekeydown[ev->device][KEY_AXIS1 + (JOYANALOGS * 4) + i] = max(0, ev->data2); - } - else - { - i *= 2; - if (ev->data2 < 0) - { - // Left - gamekeydown[ev->device][KEY_AXIS1 + i] = abs(ev->data2); - gamekeydown[ev->device][KEY_AXIS1 + i + 1] = 0; - } - else - { - // Right - gamekeydown[ev->device][KEY_AXIS1 + i] = 0; - gamekeydown[ev->device][KEY_AXIS1 + i + 1] = abs(ev->data2); - } + // analog stick axes have a negative and positive keydown + i -= ev->data2 >= 0; + gamekeydown[ev->device][i++] = max(0, -ev->data2); } + gamekeydown[ev->device][i] = max(0, ev->data2); break; diff --git a/src/g_input.h b/src/g_input.h index b8c496047..70ad21cdd 100644 --- a/src/g_input.h +++ b/src/g_input.h @@ -29,10 +29,10 @@ extern "C" { #define MOUSEBUTTONS 8 #define JOYBUTTONS 21 // 21 buttons, to match SDL_GameControllerButton -#define JOYANALOGS 2 // 2 sets of analog stick axes, with positive and negative each -#define JOYTRIGGERS 1 // 1 set of trigger axes, positive only -#define JOYAXISSETS (JOYANALOGS + JOYTRIGGERS) -#define JOYAXES ((4 * JOYANALOGS) + (2 * JOYTRIGGERS)) +#define JOYANALOGS 4 // 4 analog stick axes (2 sticks * 2 axes) +#define JOYTRIGGERS 2 // 2 trigger axes, positive only +#define JOYAXISES (JOYANALOGS + JOYTRIGGERS) +#define JOYAXISKEYS ((2 * JOYANALOGS) + JOYTRIGGERS) #define MAXINPUTMAPPING 4 @@ -44,7 +44,7 @@ typedef enum KEY_JOY1 = NUMKEYS, KEY_HAT1 = KEY_JOY1 + 11, // macro for SDL_CONTROLLER_BUTTON_DPAD_UP KEY_AXIS1 = KEY_JOY1 + JOYBUTTONS, - JOYINPUTEND = KEY_AXIS1 + JOYAXES, + JOYINPUTEND = KEY_AXIS1 + JOYAXISKEYS, KEY_MOUSE1 = JOYINPUTEND, KEY_MOUSEMOVE = KEY_MOUSE1 + MOUSEBUTTONS, diff --git a/src/m_menu.c b/src/m_menu.c index d477207db..40f04de36 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -2609,7 +2609,7 @@ boolean M_Responder(event_t *ev) { if (ev->type == ev_joystick && deviceplayer == 0) { - static INT32 lastjoy[JOYAXISSETS*2] = {0}; + static INT32 lastjoy[JOYAXISES] = {0}; if (G_AxisInDeadzone(deviceplayer, ev)) { diff --git a/src/sdl/i_system.cpp b/src/sdl/i_system.cpp index 8b2297dd5..fce0ee9d9 100644 --- a/src/sdl/i_system.cpp +++ b/src/sdl/i_system.cpp @@ -1186,7 +1186,7 @@ void I_ShutdownJoystick(UINT8 index) // reset joystick position event.type = ev_joystick; - for (i = 0; i < JOYAXISSETS*2; i++) + for (i = 0; i < JOYAXISES; i++) { event.data1 = i; D_PostEvent(&event);