mirror of
https://github.com/Shpoike/Quakespasm.git
synced 2025-04-22 11:10:46 +00:00
hack key emulation
This commit is contained in:
parent
660f7d4077
commit
3faf16b104
2 changed files with 57 additions and 7 deletions
|
@ -556,9 +556,9 @@ static int IN_KeyForControllerButton(SDL_GameControllerButton button)
|
|||
case SDL_CONTROLLER_BUTTON_B: return K_X360_B;
|
||||
case SDL_CONTROLLER_BUTTON_X: return K_X360_X;
|
||||
case SDL_CONTROLLER_BUTTON_Y: return K_X360_Y;
|
||||
case SDL_CONTROLLER_BUTTON_BACK: return K_X360_BACK;
|
||||
case SDL_CONTROLLER_BUTTON_BACK: return K_ESCAPE;
|
||||
//case SDL_CONTROLLER_BUTTON_GUIDE: return K_X360_GUIDE;
|
||||
case SDL_CONTROLLER_BUTTON_START: return K_X360_START;
|
||||
case SDL_CONTROLLER_BUTTON_START: return K_ESCAPE;
|
||||
case SDL_CONTROLLER_BUTTON_LEFTSTICK: return K_X360_LEFT_THUMB;
|
||||
case SDL_CONTROLLER_BUTTON_RIGHTSTICK: return K_X360_RIGHT_THUMB;
|
||||
case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: return K_X360_LEFT_SHOULDER;
|
||||
|
@ -601,9 +601,9 @@ void IN_ControllerButton(SDL_JoystickID instanceid, SDL_GameControllerButton but
|
|||
Key_Event(key, down);
|
||||
|
||||
// also send emulated keyboard key
|
||||
emulatedkey = IN_EmulatedKeyForControllerKey(key);
|
||||
if (emulatedkey)
|
||||
Key_Event(emulatedkey, down);
|
||||
// emulatedkey = IN_EmulatedKeyForControllerKey(key);
|
||||
// if (emulatedkey)
|
||||
// Key_Event(emulatedkey, down);
|
||||
}
|
||||
|
||||
#define DOWN_THRESHOLD 0.5
|
||||
|
@ -638,7 +638,7 @@ void IN_ControllerAxis(SDL_JoystickID instanceid, SDL_GameControllerAxis axis, S
|
|||
_rawDualAxis.left.x = axisValue;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_LEFTY:
|
||||
IN_ControllerAxisButton(_rawDualAxis.left.y, axisValue, K_X360_LEFT_THUMB_DOWN, K_X360_LEFT_THUMB_UP);
|
||||
IN_ControllerAxisButton(_rawDualAxis.left.y, axisValue, K_X360_LEFT_THUMB_UP, K_X360_LEFT_THUMB_DOWN);
|
||||
_rawDualAxis.left.y = axisValue;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTX:
|
||||
|
@ -646,7 +646,7 @@ void IN_ControllerAxis(SDL_JoystickID instanceid, SDL_GameControllerAxis axis, S
|
|||
_rawDualAxis.right.x = axisValue;
|
||||
break;
|
||||
case SDL_CONTROLLER_AXIS_RIGHTY:
|
||||
IN_ControllerAxisButton(_rawDualAxis.right.y, axisValue, K_X360_RIGHT_THUMB_DOWN, K_X360_RIGHT_THUMB_UP);
|
||||
IN_ControllerAxisButton(_rawDualAxis.right.y, axisValue, K_X360_RIGHT_THUMB_UP, K_X360_RIGHT_THUMB_DOWN);
|
||||
_rawDualAxis.right.y = axisValue;
|
||||
break;
|
||||
|
||||
|
|
|
@ -947,6 +947,35 @@ void Key_GetGrabbedInput (int *lastkey, int *lastchar)
|
|||
*lastchar = key_inputgrab.lastchar;
|
||||
}
|
||||
|
||||
static int IN_IsControllerKey(int button)
|
||||
{
|
||||
return button >= K_X360_DPAD_UP && button <= K_X360_RIGHT_THUMB_RIGHT;
|
||||
}
|
||||
|
||||
static int IN_EmulatedKeyForControllerKey(int button)
|
||||
{
|
||||
switch (button)
|
||||
{
|
||||
case K_X360_DPAD_UP: return K_UPARROW;
|
||||
case K_X360_DPAD_DOWN: return K_DOWNARROW;
|
||||
case K_X360_DPAD_LEFT: return K_LEFTARROW;
|
||||
case K_X360_DPAD_RIGHT: return K_RIGHTARROW;
|
||||
case K_X360_LEFT_THUMB_UP: return K_UPARROW;
|
||||
case K_X360_LEFT_THUMB_DOWN: return K_DOWNARROW;
|
||||
case K_X360_LEFT_THUMB_LEFT: return K_LEFTARROW;
|
||||
case K_X360_LEFT_THUMB_RIGHT: return K_RIGHTARROW;
|
||||
case K_X360_RIGHT_THUMB_UP: return K_UPARROW;
|
||||
case K_X360_RIGHT_THUMB_DOWN: return K_DOWNARROW;
|
||||
case K_X360_RIGHT_THUMB_LEFT: return K_LEFTARROW;
|
||||
case K_X360_RIGHT_THUMB_RIGHT: return K_RIGHTARROW;
|
||||
// case K_X360_START: return K_ESCAPE;
|
||||
// case K_X360_BACK: return K_ESCAPE;
|
||||
case K_X360_A: return K_ENTER;
|
||||
case K_X360_B: return K_ESCAPE;
|
||||
default: return button;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
===================
|
||||
Key_Event
|
||||
|
@ -963,6 +992,27 @@ void Key_Event (int key, qboolean down)
|
|||
if (key < 0 || key >= MAX_KEYS)
|
||||
return;
|
||||
|
||||
if (IN_IsControllerKey(key))
|
||||
{
|
||||
int emukey = IN_EmulatedKeyForControllerKey(key);
|
||||
|
||||
if (key_dest == key_menu
|
||||
&& !key_inputgrab.active)
|
||||
{
|
||||
key = emukey;
|
||||
}
|
||||
else
|
||||
{
|
||||
// handle keyup when leaving menu with an emulated key
|
||||
if (!down &&
|
||||
!keydown[key] &&
|
||||
keydown[emukey])
|
||||
{
|
||||
key = emukey;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// handle fullscreen toggle
|
||||
if (down && (key == K_ENTER || key == K_KP_ENTER) && keydown[K_ALT])
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue