stick emulate keys

This commit is contained in:
Eric Wasylishen 2016-02-08 01:07:04 -07:00
parent b7fae1a4ee
commit 660f7d4077
2 changed files with 38 additions and 6 deletions

View file

@ -557,7 +557,7 @@ static int IN_KeyForControllerButton(SDL_GameControllerButton button)
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_GUIDE: return K_X360_GUIDE;
//case SDL_CONTROLLER_BUTTON_GUIDE: return K_X360_GUIDE;
case SDL_CONTROLLER_BUTTON_START: return K_X360_START;
case SDL_CONTROLLER_BUTTON_LEFTSTICK: return K_X360_LEFT_THUMB;
case SDL_CONTROLLER_BUTTON_RIGHTSTICK: return K_X360_RIGHT_THUMB;
@ -606,6 +606,22 @@ void IN_ControllerButton(SDL_JoystickID instanceid, SDL_GameControllerButton but
Key_Event(emulatedkey, down);
}
#define DOWN_THRESHOLD 0.5
#define UP_THRESHOLD 0.25
void IN_ControllerAxisButton(float oldval, float newval, int negativekey, int positivekey)
{
if (!(oldval < -DOWN_THRESHOLD) && (newval < -DOWN_THRESHOLD))
Key_Event(negativekey, true);
else if (!(oldval > -UP_THRESHOLD) && (newval > -UP_THRESHOLD))
Key_Event(negativekey, false);
if (!(oldval > DOWN_THRESHOLD) && (newval > DOWN_THRESHOLD))
Key_Event(positivekey, true);
else if (!(oldval < UP_THRESHOLD) && (newval < UP_THRESHOLD))
Key_Event(positivekey, false);
}
void IN_ControllerAxis(SDL_JoystickID instanceid, SDL_GameControllerAxis axis, Sint16 value)
{
float axisValue = Sint16ToPlusMinusOne( value );
@ -618,13 +634,21 @@ void IN_ControllerAxis(SDL_JoystickID instanceid, SDL_GameControllerAxis axis, S
{
// TODO: swap move/look cvar
case SDL_CONTROLLER_AXIS_LEFTX:
_rawDualAxis.left.x = axisValue; break;
IN_ControllerAxisButton(_rawDualAxis.left.x, axisValue, K_X360_LEFT_THUMB_LEFT, K_X360_LEFT_THUMB_RIGHT);
_rawDualAxis.left.x = axisValue;
break;
case SDL_CONTROLLER_AXIS_LEFTY:
_rawDualAxis.left.y = axisValue; break;
IN_ControllerAxisButton(_rawDualAxis.left.y, axisValue, K_X360_LEFT_THUMB_DOWN, K_X360_LEFT_THUMB_UP);
_rawDualAxis.left.y = axisValue;
break;
case SDL_CONTROLLER_AXIS_RIGHTX:
_rawDualAxis.right.x = axisValue; break;
IN_ControllerAxisButton(_rawDualAxis.right.x, axisValue, K_X360_RIGHT_THUMB_LEFT, K_X360_RIGHT_THUMB_RIGHT);
_rawDualAxis.right.x = axisValue;
break;
case SDL_CONTROLLER_AXIS_RIGHTY:
_rawDualAxis.right.y = axisValue; break;
IN_ControllerAxisButton(_rawDualAxis.right.y, axisValue, K_X360_RIGHT_THUMB_DOWN, K_X360_RIGHT_THUMB_UP);
_rawDualAxis.right.y = axisValue;
break;
case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
{

View file

@ -177,7 +177,15 @@ keyname_t keynames[] =
{"X360_Y", K_X360_Y},
{"X360_LEFT_TRIGGER", K_X360_LEFT_TRIGGER},
{"X360_RIGHT_TRIGGER", K_X360_RIGHT_TRIGGER},
{"X360_GUIDE", K_X360_GUIDE},
//{"X360_GUIDE", K_X360_GUIDE},
{"K_X360_LEFT_THUMB_UP", K_X360_LEFT_THUMB_UP},
{"K_X360_LEFT_THUMB_DOWN", K_X360_LEFT_THUMB_DOWN},
{"K_X360_LEFT_THUMB_LEFT", K_X360_LEFT_THUMB_LEFT},
{"K_X360_LEFT_THUMB_RIGHT", K_X360_LEFT_THUMB_RIGHT},
{"K_X360_RIGHT_THUMB_UP", K_X360_RIGHT_THUMB_UP},
{"K_X360_RIGHT_THUMB_DOWN", K_X360_RIGHT_THUMB_DOWN},
{"K_X360_RIGHT_THUMB_LEFT", K_X360_RIGHT_THUMB_LEFT},
{"K_X360_RIGHT_THUMB_RIGHT", K_X360_RIGHT_THUMB_RIGHT},
{NULL, 0}
};