Merge branch 'controller-fixes' into 'next'

Various controller fixes

Closes #936 and #937

See merge request STJr/SRB2!1914
This commit is contained in:
Eidolon 2023-01-04 01:39:40 +00:00
commit 71736f358f
2 changed files with 13 additions and 5 deletions

View file

@ -543,9 +543,9 @@ INT32 G_RemapGamepadEvent(event_t *event, INT32 *type)
const INT16 value = G_GetGamepadAxisValue(event->which, event->key); const INT16 value = G_GetGamepadAxisValue(event->which, event->key);
if (value < -jdeadzone || value > jdeadzone) if (value < -jdeadzone || value > jdeadzone)
*type = ev_keyup;
else
*type = ev_keydown; *type = ev_keydown;
else
*type = ev_keyup;
if (value < -jdeadzone) if (value < -jdeadzone)
return KEY_INV_AXES + event->key; return KEY_INV_AXES + event->key;

View file

@ -3224,6 +3224,7 @@ boolean M_Responder(event_t *ev)
static INT32 pjoyx = 0, pjoyy = 0; static INT32 pjoyx = 0, pjoyy = 0;
static INT32 pmousex = 0, pmousey = 0; static INT32 pmousex = 0, pmousey = 0;
static INT32 lastx = 0, lasty = 0; static INT32 lastx = 0, lasty = 0;
boolean shouldswallowevent = false;
void (*routine)(INT32 choice); // for some casting problem void (*routine)(INT32 choice); // for some casting problem
if (dedicated || (demoplayback && titledemo) if (dedicated || (demoplayback && titledemo)
@ -3239,11 +3240,18 @@ boolean M_Responder(event_t *ev)
boolean useEventHandler = false; boolean useEventHandler = false;
if (menuactive && ev->type == ev_gamepad_axis && ev->which == 0)
{
// ALWAYS swallow gamepad axis events, to prevent trickling down to game input
// this applies even if the axis event does not get remapped
shouldswallowevent = true;
}
if (noFurtherInput) if (noFurtherInput)
{ {
// Ignore input after enter/escape/other buttons // Ignore input after enter/escape/other buttons
// (but still allow shift keyup so caps doesn't get stuck) // (but still allow shift keyup so caps doesn't get stuck)
return false; return shouldswallowevent;
} }
else if (menuactive) else if (menuactive)
{ {
@ -3368,7 +3376,7 @@ boolean M_Responder(event_t *ev)
} }
if (!useEventHandler && ch == -1) if (!useEventHandler && ch == -1)
return false; return shouldswallowevent;
else if (ch == gamecontrol[GC_SYSTEMMENU][0] || ch == gamecontrol[GC_SYSTEMMENU][1]) // allow remappable ESC key else if (ch == gamecontrol[GC_SYSTEMMENU][0] || ch == gamecontrol[GC_SYSTEMMENU][1]) // allow remappable ESC key
ch = KEY_ESCAPE; ch = KEY_ESCAPE;
@ -3601,7 +3609,7 @@ boolean M_Responder(event_t *ev)
//currentMenu->lastOn = itemOn; //currentMenu->lastOn = itemOn;
//if (currentMenu->prevMenu) //if (currentMenu->prevMenu)
// M_SetupNextMenu(currentMenu->prevMenu); // M_SetupNextMenu(currentMenu->prevMenu);
return false; return shouldswallowevent;
default: default:
CON_Responder(ev); CON_Responder(ev);