diff options
author | Tim Angus <tim@ngus.net> | 2011-04-23 22:38:25 +0000 |
---|---|---|
committer | Tim Angus <tim@ngus.net> | 2013-01-03 00:18:07 +0000 |
commit | 06006eb6930de74c577c87daf6a0f7917e22d578 (patch) | |
tree | 8caec25df040a3f3eddc99b593e51d993b9be1be /src/sdl | |
parent | 98438cc3e7d32312bb52b413c12698b67b8cfeb0 (diff) |
* Merge ioq3-r1946
Diffstat (limited to 'src/sdl')
-rw-r--r-- | src/sdl/sdl_glimp.c | 13 | ||||
-rw-r--r-- | src/sdl/sdl_input.c | 88 | ||||
-rw-r--r-- | src/sdl/sdl_snd.c | 3 |
3 files changed, 80 insertions, 24 deletions
diff --git a/src/sdl/sdl_glimp.c b/src/sdl/sdl_glimp.c index f065eb2d..ad30fdef 100644 --- a/src/sdl/sdl_glimp.c +++ b/src/sdl/sdl_glimp.c @@ -105,6 +105,19 @@ void GLimp_Shutdown( void ) /* =============== +GLimp_Minimize + +Minimize the game so that user is back at the desktop +=============== +*/ +void GLimp_Minimize(void) +{ + SDL_WM_IconifyWindow(); +} + + +/* +=============== GLimp_LogComment =============== */ diff --git a/src/sdl/sdl_input.c b/src/sdl/sdl_input.c index 0d1164fb..8de34078 100644 --- a/src/sdl/sdl_input.c +++ b/src/sdl/sdl_input.c @@ -35,8 +35,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "../client/client.h" #include "../sys/sys_local.h" -#define ARRAYLEN(x) (sizeof(x)/sizeof(x[0])) - #ifdef MACOS_X // Mouse acceleration needs to be disabled #define MACOS_X_ACCELERATION_HACK @@ -70,6 +68,7 @@ static cvar_t *in_joystick = NULL; static cvar_t *in_joystickDebug = NULL; static cvar_t *in_joystickThreshold = NULL; static cvar_t *in_joystickNo = NULL; +static cvar_t *in_joystickUseAnalog = NULL; static int vidRestartTime = 0; @@ -612,6 +611,7 @@ struct { qboolean buttons[16]; // !!! FIXME: these might be too many. unsigned int oldaxes; + int oldaaxes[16]; unsigned int oldhats; } stick_state; @@ -625,6 +625,7 @@ static void IN_InitJoystick( void ) { int i = 0; int total = 0; + char buf[16384] = ""; if (stick != NULL) SDL_JoystickClose(stick); @@ -632,11 +633,6 @@ static void IN_InitJoystick( void ) stick = NULL; memset(&stick_state, '\0', sizeof (stick_state)); - if( !in_joystick->integer ) { - Com_DPrintf( "Joystick is not active.\n" ); - return; - } - if (!SDL_WasInit(SDL_INIT_JOYSTICK)) { Com_DPrintf("Calling SDL_Init(SDL_INIT_JOYSTICK)...\n"); @@ -650,13 +646,28 @@ static void IN_InitJoystick( void ) total = SDL_NumJoysticks(); Com_DPrintf("%d possible joysticks\n", total); + + // Print list and build cvar to allow ui to select joystick. for (i = 0; i < total; i++) - Com_DPrintf("[%d] %s\n", i, SDL_JoystickName(i)); + { + Q_strcat(buf, sizeof(buf), SDL_JoystickName(i)); + Q_strcat(buf, sizeof(buf), "\n"); + } + + Cvar_Get( "in_availableJoysticks", buf, CVAR_ROM ); + + if( !in_joystick->integer ) { + Com_DPrintf( "Joystick is not active.\n" ); + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); + return; + } in_joystickNo = Cvar_Get( "in_joystickNo", "0", CVAR_ARCHIVE ); if( in_joystickNo->integer < 0 || in_joystickNo->integer >= total ) Cvar_Set( "in_joystickNo", "0" ); + in_joystickUseAnalog = Cvar_Get( "in_joystickUseAnalog", "0", CVAR_ARCHIVE ); + stick = SDL_JoystickOpen( in_joystickNo->integer ); if (stick == NULL) { @@ -665,11 +676,12 @@ static void IN_InitJoystick( void ) } Com_DPrintf( "Joystick %d opened\n", in_joystickNo->integer ); - Com_DPrintf( "Name: %s\n", SDL_JoystickName(in_joystickNo->integer) ); - Com_DPrintf( "Axes: %d\n", SDL_JoystickNumAxes(stick) ); - Com_DPrintf( "Hats: %d\n", SDL_JoystickNumHats(stick) ); - Com_DPrintf( "Buttons: %d\n", SDL_JoystickNumButtons(stick) ); - Com_DPrintf( "Balls: %d\n", SDL_JoystickNumBalls(stick) ); + Com_DPrintf( "Name: %s\n", SDL_JoystickName(in_joystickNo->integer) ); + Com_DPrintf( "Axes: %d\n", SDL_JoystickNumAxes(stick) ); + Com_DPrintf( "Hats: %d\n", SDL_JoystickNumHats(stick) ); + Com_DPrintf( "Buttons: %d\n", SDL_JoystickNumButtons(stick) ); + Com_DPrintf( "Balls: %d\n", SDL_JoystickNumBalls(stick) ); + Com_DPrintf( "Use Analog: %s\n", in_joystickUseAnalog->integer ? "Yes" : "No" ); SDL_JoystickEventState(SDL_QUERY); } @@ -697,7 +709,7 @@ IN_JoyMove */ static void IN_JoyMove( void ) { - qboolean joy_pressed[ARRAYLEN(joy_keys)]; + qboolean joy_pressed[ARRAY_LEN(joy_keys)]; unsigned int axes = 0; unsigned int hats = 0; int total = 0; @@ -740,8 +752,8 @@ static void IN_JoyMove( void ) total = SDL_JoystickNumButtons(stick); if (total > 0) { - if (total > ARRAYLEN(stick_state.buttons)) - total = ARRAYLEN(stick_state.buttons); + if (total > ARRAY_LEN(stick_state.buttons)) + total = ARRAY_LEN(stick_state.buttons); for (i = 0; i < total; i++) { qboolean pressed = (SDL_JoystickGetButton(stick, i) != 0); @@ -850,11 +862,27 @@ static void IN_JoyMove( void ) 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 ) ); - } else if( f > in_joystickThreshold->value ) { - axes |= ( 1 << ( ( i * 2 ) + 1 ) ); + + if (in_joystickUseAnalog->integer) + { + float f = ( (float) abs(axis) ) / 32767.0f; + + if( f < in_joystickThreshold->value ) axis = 0; + + if ( axis != stick_state.oldaaxes[i] ) + { + Com_QueueEvent( 0, SE_JOYSTICK_AXIS, i, axis, 0, NULL ); + stick_state.oldaaxes[i] = axis; + } + } + else + { + float f = ( (float) axis ) / 32767.0f; + if( f < -in_joystickThreshold->value ) { + axes |= ( 1 << ( i * 2 ) ); + } else if( f > in_joystickThreshold->value ) { + axes |= ( 1 << ( ( i * 2 ) + 1 ) ); + } } } } @@ -1037,6 +1065,20 @@ void IN_Frame( void ) /* =============== +IN_InitKeyLockStates +=============== +*/ +void IN_InitKeyLockStates( void ) +{ + unsigned char *keystate = SDL_GetKeyState(NULL); + + keys[K_SCROLLOCK].down = keystate[SDLK_SCROLLOCK]; + keys[K_KP_NUMLOCK].down = keystate[SDLK_NUMLOCK]; + keys[K_CAPSLOCK].down = keystate[SDLK_CAPSLOCK]; +} + +/* +=============== IN_Init =============== */ @@ -1060,7 +1102,7 @@ void IN_Init( void ) in_joystick = Cvar_Get( "in_joystick", "0", CVAR_ARCHIVE|CVAR_LATCH ); in_joystickDebug = Cvar_Get( "in_joystickDebug", "0", CVAR_TEMP ); - in_joystickThreshold = Cvar_Get( "in_joystickThreshold", "0.15", CVAR_ARCHIVE ); + in_joystickThreshold = Cvar_Get( "joy_threshold", "0.15", CVAR_ARCHIVE ); #ifdef MACOS_X_ACCELERATION_HACK in_disablemacosxmouseaccel = Cvar_Get( "in_disablemacosxmouseaccel", "1", CVAR_ARCHIVE ); @@ -1085,6 +1127,8 @@ void IN_Init( void ) Cvar_SetValue( "com_unfocused", !( appState & SDL_APPINPUTFOCUS ) ); Cvar_SetValue( "com_minimized", !( appState & SDL_APPACTIVE ) ); + IN_InitKeyLockStates( ); + IN_InitJoystick( ); Com_DPrintf( "------------------------------------\n" ); } diff --git a/src/sdl/sdl_snd.c b/src/sdl/sdl_snd.c index 24510329..6ab90ae0 100644 --- a/src/sdl/sdl_snd.c +++ b/src/sdl/sdl_snd.c @@ -100,8 +100,7 @@ static struct { AUDIO_S16MSB, "AUDIO_S16MSB" } }; -static int formatToStringTableSize = - sizeof( formatToStringTable ) / sizeof( formatToStringTable[ 0 ] ); +static int formatToStringTableSize = ARRAY_LEN( formatToStringTable ); /* =============== |