Support up to 16 joystick axes, select which to use with j_*_axis cvars.

This commit is contained in:
Zack Middleton 2012-02-15 18:26:08 +00:00
parent 76c4346463
commit 7a1efc19a4
2 changed files with 12 additions and 16 deletions

View file

@ -1059,15 +1059,7 @@ NON-PORTABLE SYSTEM SERVICES
==============================================================
*/
typedef enum {
AXIS_SIDE,
AXIS_FORWARD,
AXIS_UP,
AXIS_ROLL,
AXIS_YAW,
AXIS_PITCH,
MAX_JOYSTICK_AXIS
} joystickAxis_t;
#define MAX_JOYSTICK_AXIS 16
void Sys_Init (void);

View file

@ -561,7 +561,7 @@ struct
{
qboolean buttons[16]; // !!! FIXME: these might be too many.
unsigned int oldaxes;
int oldaaxes[16];
int oldaaxes[MAX_JOYSTICK_AXIS];
unsigned int oldhats;
} stick_state;
@ -808,13 +808,12 @@ static void IN_JoyMove( void )
total = SDL_JoystickNumAxes(stick);
if (total > 0)
{
if (total > 16) total = 16;
if (in_joystickUseAnalog->integer)
{
if (total > MAX_JOYSTICK_AXIS) total = MAX_JOYSTICK_AXIS;
for (i = 0; i < total; i++)
{
Sint16 axis = SDL_JoystickGetAxis(stick, i);
if (in_joystickUseAnalog->integer)
{
float f = ( (float) abs(axis) ) / 32767.0f;
if( f < in_joystickThreshold->value ) axis = 0;
@ -825,8 +824,13 @@ static void IN_JoyMove( void )
stick_state.oldaaxes[i] = axis;
}
}
}
else
{
if (total > 16) total = 16;
for (i = 0; i < total; i++)
{
Sint16 axis = SDL_JoystickGetAxis(stick, i);
float f = ( (float) axis ) / 32767.0f;
if( f < -in_joystickThreshold->value ) {
axes |= ( 1 << ( i * 2 ) );