mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-02-22 11:52:04 +00:00
Gamepad's left stick allowed to navigate menus
Uses logic from the triggers handling.
This commit is contained in:
parent
9e07dc2485
commit
c27ce2a7bf
2 changed files with 62 additions and 32 deletions
|
@ -609,6 +609,16 @@ IN_GamepadConfirm_Changed(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
IN_VirtualKeyEvent(int keynum, qboolean *state_store, qboolean new_state)
|
||||
{
|
||||
if (new_state != *state_store)
|
||||
{
|
||||
*state_store = new_state;
|
||||
Key_Event(keynum, *state_store, true);
|
||||
}
|
||||
}
|
||||
|
||||
qboolean IN_NumpadIsOn()
|
||||
{
|
||||
SDL_Keymod mod = SDL_GetModState();
|
||||
|
@ -637,6 +647,7 @@ IN_Update(void)
|
|||
|
||||
static qboolean left_trigger = false;
|
||||
static qboolean right_trigger = false;
|
||||
static qboolean left_stick[4] = {false, false, false, false}; // left, right, up, down virtual keys
|
||||
|
||||
static int consoleKeyCode = 0;
|
||||
|
||||
|
@ -850,26 +861,12 @@ IN_Update(void)
|
|||
switch (event.caxis.axis)
|
||||
{
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
|
||||
{
|
||||
qboolean new_left_trigger = axis_value > 8192;
|
||||
if (new_left_trigger != left_trigger)
|
||||
{
|
||||
left_trigger = new_left_trigger;
|
||||
Key_Event(K_TRIG_LEFT, left_trigger, true);
|
||||
}
|
||||
IN_VirtualKeyEvent(K_TRIG_LEFT, &left_trigger, axis_value > 8192);
|
||||
break;
|
||||
}
|
||||
|
||||
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
|
||||
{
|
||||
qboolean new_right_trigger = axis_value > 8192;
|
||||
if (new_right_trigger != right_trigger)
|
||||
{
|
||||
right_trigger = new_right_trigger;
|
||||
Key_Event(K_TRIG_RIGHT, right_trigger, true);
|
||||
}
|
||||
IN_VirtualKeyEvent(K_TRIG_RIGHT, &right_trigger, axis_value > 8192);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cl_paused->value && cls.key_dest == key_game)
|
||||
|
@ -889,6 +886,24 @@ IN_Update(void)
|
|||
joystick_right_y = axis_value;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Virtual keys to navigate menus with left stick
|
||||
if (cls.key_dest == key_menu)
|
||||
{
|
||||
switch (event.caxis.axis)
|
||||
{
|
||||
case SDL_CONTROLLER_AXIS_LEFTX:
|
||||
IN_VirtualKeyEvent(K_LEFTARROW, &left_stick[0], axis_value < -16896);
|
||||
IN_VirtualKeyEvent(K_RIGHTARROW, &left_stick[1], axis_value > 16896);
|
||||
break;
|
||||
|
||||
case SDL_CONTROLLER_AXIS_LEFTY:
|
||||
IN_VirtualKeyEvent(K_UPARROW, &left_stick[2], axis_value < -16896);
|
||||
IN_VirtualKeyEvent(K_DOWNARROW, &left_stick[3], axis_value > 16896);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -595,6 +595,16 @@ IN_GamepadConfirm_Changed(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
IN_VirtualKeyEvent(int keynum, qboolean *state_store, qboolean new_state)
|
||||
{
|
||||
if (new_state != *state_store)
|
||||
{
|
||||
*state_store = new_state;
|
||||
Key_Event(keynum, *state_store, true);
|
||||
}
|
||||
}
|
||||
|
||||
qboolean IN_NumpadIsOn()
|
||||
{
|
||||
SDL_Keymod mod = SDL_GetModState();
|
||||
|
@ -623,6 +633,7 @@ IN_Update(void)
|
|||
|
||||
static qboolean left_trigger = false;
|
||||
static qboolean right_trigger = false;
|
||||
static qboolean left_stick[4] = {false, false, false, false}; // left, right, up, down virtual keys
|
||||
|
||||
static int consoleKeyCode = 0;
|
||||
|
||||
|
@ -837,26 +848,12 @@ IN_Update(void)
|
|||
switch (event.gaxis.axis)
|
||||
{
|
||||
case SDL_GAMEPAD_AXIS_LEFT_TRIGGER :
|
||||
{
|
||||
qboolean new_left_trigger = axis_value > 8192;
|
||||
if (new_left_trigger != left_trigger)
|
||||
{
|
||||
left_trigger = new_left_trigger;
|
||||
Key_Event(K_TRIG_LEFT, left_trigger, true);
|
||||
}
|
||||
IN_VirtualKeyEvent(K_TRIG_LEFT, &left_trigger, axis_value > 8192);
|
||||
break;
|
||||
}
|
||||
|
||||
case SDL_GAMEPAD_AXIS_RIGHT_TRIGGER :
|
||||
{
|
||||
qboolean new_right_trigger = axis_value > 8192;
|
||||
if (new_right_trigger != right_trigger)
|
||||
{
|
||||
right_trigger = new_right_trigger;
|
||||
Key_Event(K_TRIG_RIGHT, right_trigger, true);
|
||||
}
|
||||
IN_VirtualKeyEvent(K_TRIG_RIGHT, &right_trigger, axis_value > 8192);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!cl_paused->value && cls.key_dest == key_game)
|
||||
|
@ -876,6 +873,24 @@ IN_Update(void)
|
|||
joystick_right_y = axis_value;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Virtual keys to navigate menus with left stick
|
||||
if (cls.key_dest == key_menu)
|
||||
{
|
||||
switch (event.gaxis.axis)
|
||||
{
|
||||
case SDL_GAMEPAD_AXIS_LEFTX :
|
||||
IN_VirtualKeyEvent(K_LEFTARROW, &left_stick[0], axis_value < -16896);
|
||||
IN_VirtualKeyEvent(K_RIGHTARROW, &left_stick[1], axis_value > 16896);
|
||||
break;
|
||||
|
||||
case SDL_GAMEPAD_AXIS_LEFTY :
|
||||
IN_VirtualKeyEvent(K_UPARROW, &left_stick[2], axis_value < -16896);
|
||||
IN_VirtualKeyEvent(K_DOWNARROW, &left_stick[3], axis_value > 16896);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue