From 132b23118eaadb6e5687e08bd8ecce2c49613041 Mon Sep 17 00:00:00 2001 From: twojstaryzdomu Date: Wed, 22 Jun 2022 14:18:23 +0200 Subject: [PATCH] Joypad control in menus --- engine/h2shared/in_sdl.c | 18 ++++++++++++++---- engine/hexen2/cl_main.c | 11 ++++++++--- engine/hexen2/menu.c | 1 + 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/engine/h2shared/in_sdl.c b/engine/h2shared/in_sdl.c index a0ceeec99..c57eb47b0 100644 --- a/engine/h2shared/in_sdl.c +++ b/engine/h2shared/in_sdl.c @@ -75,9 +75,9 @@ static cvar_t joy_sensitivityyaw = {"joy_sensitivityyaw", "-1", CVAR_NONE}; /* /* hack to generate uparrow/leftarrow etc. key events * for axes if the stick driver isn't generating them. */ /* might be useful for menu navigation etc. */ -#define JOY_KEYEVENT_FOR_AXES 0 /* not for now */ +#define JOY_KEYEVENT_FOR_AXES 1 #if (JOY_KEYEVENT_FOR_AXES) -static cvar_t joy_axiskeyevents = {"joy_axiskeyevents", "0", CVAR_ARCHIVE}; +static cvar_t joy_axiskeyevents = {"joy_axiskeyevents", "1", CVAR_ARCHIVE}; static cvar_t joy_axiskeyevents_deadzone = {"joy_axiskeyevents_deadzone", "0.5", CVAR_ARCHIVE}; /* joystick axes state */ @@ -811,7 +811,7 @@ void IN_Commands (void) void IN_SendKeyEvents (void) { SDL_Event event; - int sym, state, modstate; + int sym, state, modstate, joy2key; qboolean gamekey; if ((gamekey = Key_IsGameKey()) != prev_gamekey) @@ -1102,13 +1102,23 @@ void IN_SendKeyEvents (void) case SDL_JOYBUTTONUP: if (in_mode_set) break; + joy2key = 0; + switch (K_JOY1 + event.jbutton.button) { + /* Hard code SELECT & START buttons for menu control */ + case K_AUX5: + joy2key = K_ESCAPE; + break; + case K_AUX6: + joy2key = K_ENTER; + } + Con_DPrintf ("Pressed joystick button %s\n", Key_KeynumToString(K_JOY1 + event.jbutton.button)); if (event.jbutton.button > K_AUX28 - K_JOY1) { Con_Printf ("Ignored event for joystick button %d\n", event.jbutton.button); break; } - Key_Event(K_JOY1 + event.jbutton.button, event.jbutton.state == SDL_PRESSED); + Key_Event(joy2key ? joy2key : (K_JOY1 + event.jbutton.button), event.jbutton.state == SDL_PRESSED); break; /* mouse/trackball motion handled by IN_MouseMove() */ diff --git a/engine/hexen2/cl_main.c b/engine/hexen2/cl_main.c index aab611f04..8fac29d64 100644 --- a/engine/hexen2/cl_main.c +++ b/engine/hexen2/cl_main.c @@ -907,9 +907,6 @@ void CL_SendCmd (void) { usercmd_t cmd; - if (cls.state != ca_connected) - return; - if (cls.signon == SIGNONS) { // get basic movement from keyboard @@ -921,6 +918,14 @@ void CL_SendCmd (void) // send the unreliable message CL_SendMove (&cmd); } + else + { + // enable directional joypad input in menus + IN_Move (&cmd); + } + + if (cls.state != ca_connected) + return; if (cls.demoplayback) { diff --git a/engine/hexen2/menu.c b/engine/hexen2/menu.c index 76bc30ede..7607ab58f 100644 --- a/engine/hexen2/menu.c +++ b/engine/hexen2/menu.c @@ -3494,6 +3494,7 @@ static void M_Quit_Key (int key) } break; + case K_ENTER: case 'Y': case 'y': Key_SetDest (key_console);