Browse Source

engine: client: move joystick cvars to static allocation

pull/2/head
Alibek Omarov 1 year ago
parent
commit
f19ed1c1c2
  1. 14
      engine/client/cl_mobile.c
  2. 119
      engine/client/in_joy.c
  3. 6
      engine/client/input.c
  4. 6
      engine/platform/sdl/events.c

14
engine/client/cl_mobile.c

@ -20,17 +20,17 @@ GNU General Public License for more details.
#include "input.h" #include "input.h"
#include "platform/platform.h" #include "platform/platform.h"
mobile_engfuncs_t *gMobileEngfuncs; static mobile_engfuncs_t *gMobileEngfuncs;
convar_t *vibration_length; static CVAR_DEFINE_AUTO( vibration_length, "1.0", FCVAR_ARCHIVE | FCVAR_PRIVILEGED, "vibration length" );
convar_t *vibration_enable; static CVAR_DEFINE_AUTO( vibration_enable, "1", FCVAR_ARCHIVE | FCVAR_PRIVILEGED, "enable vibration" );
static cl_font_t g_scaled_font; static cl_font_t g_scaled_font;
static float g_font_scale; static float g_font_scale;
static void pfnVibrate( float life, char flags ) static void pfnVibrate( float life, char flags )
{ {
if( !vibration_enable->value ) if( !vibration_enable.value )
return; return;
if( life < 0.0f ) if( life < 0.0f )
@ -42,7 +42,7 @@ static void pfnVibrate( float life, char flags )
//Con_Reportf( "Vibrate: %f %d\n", life, flags ); //Con_Reportf( "Vibrate: %f %d\n", life, flags );
// here goes platform-specific backends // here goes platform-specific backends
Platform_Vibrate( life * vibration_length->value, flags ); Platform_Vibrate( life * vibration_length.value, flags );
} }
static void Vibrate_f( void ) static void Vibrate_f( void )
@ -142,8 +142,8 @@ qboolean Mobile_Init( void )
success = true; success = true;
Cmd_AddCommand( "vibrate", (xcommand_t)Vibrate_f, "Vibrate for specified time"); Cmd_AddCommand( "vibrate", (xcommand_t)Vibrate_f, "Vibrate for specified time");
vibration_length = Cvar_Get( "vibration_length", "1.0", FCVAR_ARCHIVE | FCVAR_PRIVILEGED, "Vibration length"); Cvar_RegisterVariable( &vibration_length );
vibration_enable = Cvar_Get( "vibration_enable", "1", FCVAR_ARCHIVE | FCVAR_PRIVILEGED, "Enable vibration"); Cvar_RegisterVariable( &vibration_enable );
return success; return success;
} }

119
engine/client/in_joy.c

@ -45,22 +45,24 @@ static struct joy_axis_s
} joyaxis[MAX_AXES] = { 0 }; } joyaxis[MAX_AXES] = { 0 };
static byte currentbinding; // add posibility to remap keys, to place it in joykeys[] static byte currentbinding; // add posibility to remap keys, to place it in joykeys[]
static qboolean joy_initialized; static qboolean joy_initialized;
convar_t *joy_enable;
static convar_t *joy_pitch; static CVAR_DEFINE_AUTO( joy_pitch, "100.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick pitch sensitivity" );
static convar_t *joy_yaw; static CVAR_DEFINE_AUTO( joy_yaw, "100.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick yaw sensitivity" );
static convar_t *joy_forward; static CVAR_DEFINE_AUTO( joy_side, "1.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick side sensitivity. Values from -1.0 to 1.0" );
static convar_t *joy_side; static CVAR_DEFINE_AUTO( joy_forward, "1.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick forward sensitivity. Values from -1.0 to 1.0" );
static convar_t *joy_found; static CVAR_DEFINE_AUTO( joy_lt_threshold, "16384", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "left trigger threshold. Value from 0 to 32767");
static convar_t *joy_index; static CVAR_DEFINE_AUTO( joy_rt_threshold, "16384", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "right trigger threshold. Value from 0 to 32767" );
static convar_t *joy_lt_threshold; static CVAR_DEFINE_AUTO( joy_side_key_threshold, "24576", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "side axis key event emit threshold. Value from 0 to 32767" );
static convar_t *joy_rt_threshold; static CVAR_DEFINE_AUTO( joy_forward_key_threshold, "24576", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "forward axis key event emit threshold. Value from 0 to 32767");
static convar_t *joy_side_deadzone; static CVAR_DEFINE_AUTO( joy_side_deadzone, DEFAULT_JOY_DEADZONE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "side axis deadzone. Value from 0 to 32767" );
static convar_t *joy_forward_deadzone; static CVAR_DEFINE_AUTO( joy_forward_deadzone, DEFAULT_JOY_DEADZONE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "forward axis deadzone. Value from 0 to 32767");
static convar_t *joy_side_key_threshold; static CVAR_DEFINE_AUTO( joy_pitch_deadzone, DEFAULT_JOY_DEADZONE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "pitch axis deadzone. Value from 0 to 32767");
static convar_t *joy_forward_key_threshold; static CVAR_DEFINE_AUTO( joy_yaw_deadzone, DEFAULT_JOY_DEADZONE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "yaw axis deadzone. Value from 0 to 32767" );
static convar_t *joy_pitch_deadzone; static CVAR_DEFINE_AUTO( joy_axis_binding, "sfpyrl", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "axis hardware id to engine inner axis binding, "
static convar_t *joy_yaw_deadzone; "s - side, f - forward, y - yaw, p - pitch, r - left trigger, l - right trigger" );
static convar_t *joy_axis_binding; static CVAR_DEFINE_AUTO( joy_found, "0", FCVAR_READ_ONLY, "is joystick is connected" );
static CVAR_DEFINE_AUTO( joy_index, "0", FCVAR_READ_ONLY, "current active joystick" );
CVAR_DEFINE_AUTO( joy_enable, "1", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "enable joystick" );
/* /*
============ ============
@ -69,7 +71,7 @@ Joy_IsActive
*/ */
qboolean Joy_IsActive( void ) qboolean Joy_IsActive( void )
{ {
return joy_found->value && joy_enable->value; return joy_found.value && joy_enable.value;
} }
/* /*
@ -94,7 +96,7 @@ void Joy_HatMotionEvent( byte hat, byte value )
}; };
int i; int i;
if( !joy_found->value ) if( !joy_found.value )
return; return;
for( i = 0; i < ARRAYSIZE( keys ); i++ ) for( i = 0; i < ARRAYSIZE( keys ); i++ )
@ -125,11 +127,11 @@ static void Joy_ProcessTrigger( const engineAxis_t engineAxis, short value )
{ {
case JOY_AXIS_RT: case JOY_AXIS_RT:
trigButton = K_JOY2; trigButton = K_JOY2;
trigThreshold = joy_rt_threshold->value; trigThreshold = joy_rt_threshold.value;
break; break;
case JOY_AXIS_LT: case JOY_AXIS_LT:
trigButton = K_JOY1; trigButton = K_JOY1;
trigThreshold = joy_lt_threshold->value; trigThreshold = joy_lt_threshold.value;
break; break;
default: default:
Con_Reportf( S_ERROR "Joy_ProcessTrigger: invalid axis = %i", engineAxis ); Con_Reportf( S_ERROR "Joy_ProcessTrigger: invalid axis = %i", engineAxis );
@ -159,12 +161,12 @@ static int Joy_GetHatValueForAxis( const engineAxis_t engineAxis )
switch( engineAxis ) switch( engineAxis )
{ {
case JOY_AXIS_SIDE: case JOY_AXIS_SIDE:
threshold = joy_side_key_threshold->value; threshold = joy_side_key_threshold.value;
negative = JOY_HAT_LEFT; negative = JOY_HAT_LEFT;
positive = JOY_HAT_RIGHT; positive = JOY_HAT_RIGHT;
break; break;
case JOY_AXIS_FWD: case JOY_AXIS_FWD:
threshold = joy_side_key_threshold->value; threshold = joy_side_key_threshold.value;
negative = JOY_HAT_UP; negative = JOY_HAT_UP;
positive = JOY_HAT_DOWN; positive = JOY_HAT_DOWN;
break; break;
@ -198,10 +200,10 @@ static void Joy_ProcessStick( const engineAxis_t engineAxis, short value )
switch( engineAxis ) switch( engineAxis )
{ {
case JOY_AXIS_FWD: deadzone = joy_forward_deadzone->value; break; case JOY_AXIS_FWD: deadzone = joy_forward_deadzone.value; break;
case JOY_AXIS_SIDE: deadzone = joy_side_deadzone->value; break; case JOY_AXIS_SIDE: deadzone = joy_side_deadzone.value; break;
case JOY_AXIS_PITCH: deadzone = joy_pitch_deadzone->value; break; case JOY_AXIS_PITCH: deadzone = joy_pitch_deadzone.value; break;
case JOY_AXIS_YAW: deadzone = joy_yaw_deadzone->value; break; case JOY_AXIS_YAW: deadzone = joy_yaw_deadzone.value; break;
default: default:
Con_Reportf( S_ERROR "Joy_ProcessStick: invalid axis = %i", engineAxis ); Con_Reportf( S_ERROR "Joy_ProcessStick: invalid axis = %i", engineAxis );
break; break;
@ -236,7 +238,7 @@ Axis events
*/ */
void Joy_AxisMotionEvent( byte axis, short value ) void Joy_AxisMotionEvent( byte axis, short value )
{ {
if( !joy_found->value ) if( !joy_found.value )
return; return;
if( axis >= MAX_AXES ) if( axis >= MAX_AXES )
@ -271,7 +273,7 @@ Trackball events. UNDONE
*/ */
void Joy_BallMotionEvent( byte ball, short xrel, short yrel ) void Joy_BallMotionEvent( byte ball, short xrel, short yrel )
{ {
//if( !joy_found->value ) //if( !joy_found.value )
// return; // return;
} }
@ -284,7 +286,7 @@ Button events
*/ */
void Joy_ButtonEvent( byte button, byte down ) void Joy_ButtonEvent( byte button, byte down )
{ {
if( !joy_found->value ) if( !joy_found.value )
return; return;
// generic game button code. // generic game button code.
@ -309,7 +311,7 @@ Called when joystick is removed. For future expansion
*/ */
void Joy_RemoveEvent( void ) void Joy_RemoveEvent( void )
{ {
if( joy_found->value ) if( joy_found.value )
Cvar_FullSet( "joy_found", "0", FCVAR_READ_ONLY ); Cvar_FullSet( "joy_found", "0", FCVAR_READ_ONLY );
} }
@ -322,7 +324,7 @@ Called when joystick is removed. For future expansion
*/ */
void Joy_AddEvent( void ) void Joy_AddEvent( void )
{ {
if( joy_enable->value && !joy_found->value ) if( joy_enable.value && !joy_found.value )
Cvar_FullSet( "joy_found", "1", FCVAR_READ_ONLY ); Cvar_FullSet( "joy_found", "1", FCVAR_READ_ONLY );
} }
@ -338,9 +340,9 @@ void Joy_FinalizeMove( float *fw, float *side, float *dpitch, float *dyaw )
if( !Joy_IsActive() ) if( !Joy_IsActive() )
return; return;
if( FBitSet( joy_axis_binding->flags, FCVAR_CHANGED ) ) if( FBitSet( joy_axis_binding.flags, FCVAR_CHANGED ) )
{ {
const char *bind = joy_axis_binding->string; const char *bind = joy_axis_binding.string;
size_t i; size_t i;
for( i = 0; bind[i]; i++ ) for( i = 0; bind[i]; i++ )
@ -357,18 +359,18 @@ void Joy_FinalizeMove( float *fw, float *side, float *dpitch, float *dyaw )
} }
} }
ClearBits( joy_axis_binding->flags, FCVAR_CHANGED ); ClearBits( joy_axis_binding.flags, FCVAR_CHANGED );
} }
*fw -= joy_forward->value * (float)joyaxis[JOY_AXIS_FWD ].val/(float)SHRT_MAX; // must be form -1.0 to 1.0 *fw -= joy_forward.value * (float)joyaxis[JOY_AXIS_FWD ].val/(float)SHRT_MAX; // must be form -1.0 to 1.0
*side += joy_side->value * (float)joyaxis[JOY_AXIS_SIDE].val/(float)SHRT_MAX; *side += joy_side.value * (float)joyaxis[JOY_AXIS_SIDE].val/(float)SHRT_MAX;
#if !defined(XASH_SDL) #if !defined(XASH_SDL)
*dpitch += joy_pitch->value * (float)joyaxis[JOY_AXIS_PITCH].val/(float)SHRT_MAX * host.realframetime; // abs axis rotate is frametime related *dpitch += joy_pitch.value * (float)joyaxis[JOY_AXIS_PITCH].val/(float)SHRT_MAX * host.realframetime; // abs axis rotate is frametime related
*dyaw -= joy_yaw->value * (float)joyaxis[JOY_AXIS_YAW ].val/(float)SHRT_MAX * host.realframetime; *dyaw -= joy_yaw.value * (float)joyaxis[JOY_AXIS_YAW ].val/(float)SHRT_MAX * host.realframetime;
#else #else
// HACKHACK: SDL have inverted look axis. // HACKHACK: SDL have inverted look axis.
*dpitch -= joy_pitch->value * (float)joyaxis[JOY_AXIS_PITCH].val/(float)SHRT_MAX * host.realframetime; *dpitch -= joy_pitch.value * (float)joyaxis[JOY_AXIS_PITCH].val/(float)SHRT_MAX * host.realframetime;
*dyaw += joy_yaw->value * (float)joyaxis[JOY_AXIS_YAW ].val/(float)SHRT_MAX * host.realframetime; *dyaw += joy_yaw.value * (float)joyaxis[JOY_AXIS_YAW ].val/(float)SHRT_MAX * host.realframetime;
#endif #endif
} }
@ -381,32 +383,31 @@ Main init procedure
*/ */
void Joy_Init( void ) void Joy_Init( void )
{ {
joy_pitch = Cvar_Get( "joy_pitch", "100.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick pitch sensitivity" ); Cvar_RegisterVariable( &joy_pitch );
joy_yaw = Cvar_Get( "joy_yaw", "100.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick yaw sensitivity" ); Cvar_RegisterVariable( &joy_yaw );
joy_side = Cvar_Get( "joy_side", "1.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick side sensitivity. Values from -1.0 to 1.0" ); Cvar_RegisterVariable( &joy_side );
joy_forward = Cvar_Get( "joy_forward", "1.0", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "joystick forward sensitivity. Values from -1.0 to 1.0" ); Cvar_RegisterVariable( &joy_forward );
joy_lt_threshold = Cvar_Get( "joy_lt_threshold", "16384", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "left trigger threshold. Value from 0 to 32767"); Cvar_RegisterVariable( &joy_lt_threshold );
joy_rt_threshold = Cvar_Get( "joy_rt_threshold", "16384", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "right trigger threshold. Value from 0 to 32767" ); Cvar_RegisterVariable( &joy_rt_threshold );
// emit a key event at 75% axis move // emit a key event at 75% axis move
joy_side_key_threshold = Cvar_Get( "joy_side_key_threshold", "24576", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "side axis key event emit threshold. Value from 0 to 32767" ); Cvar_RegisterVariable( &joy_side_key_threshold );
joy_forward_key_threshold = Cvar_Get( "joy_forward_key_threshold", "24576", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "forward axis key event emit threshold. Value from 0 to 32767"); Cvar_RegisterVariable( &joy_forward_key_threshold );
// by default, we rely on deadzone detection come from system, but some glitchy devices report false deadzones // by default, we rely on deadzone detection come from system, but some glitchy devices report false deadzones
joy_side_deadzone = Cvar_Get( "joy_side_deadzone", DEFAULT_JOY_DEADZONE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "side axis deadzone. Value from 0 to 32767" ); Cvar_RegisterVariable( &joy_side_deadzone );
joy_forward_deadzone = Cvar_Get( "joy_forward_deadzone", DEFAULT_JOY_DEADZONE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "forward axis deadzone. Value from 0 to 32767"); Cvar_RegisterVariable( &joy_forward_deadzone );
joy_pitch_deadzone = Cvar_Get( "joy_pitch_deadzone", DEFAULT_JOY_DEADZONE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "pitch axis deadzone. Value from 0 to 32767"); Cvar_RegisterVariable( &joy_pitch_deadzone );
joy_yaw_deadzone = Cvar_Get( "joy_yaw_deadzone", DEFAULT_JOY_DEADZONE, FCVAR_ARCHIVE | FCVAR_FILTERABLE, "yaw axis deadzone. Value from 0 to 32767" ); Cvar_RegisterVariable( &joy_yaw_deadzone );
joy_axis_binding = Cvar_Get( "joy_axis_binding", "sfpyrl", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "axis hardware id to engine inner axis binding, " Cvar_RegisterVariable( &joy_axis_binding );
"s - side, f - forward, y - yaw, p - pitch, r - left trigger, l - right trigger" ); Cvar_RegisterVariable( &joy_found );
joy_found = Cvar_Get( "joy_found", "0", FCVAR_READ_ONLY, "is joystick is connected" );
// we doesn't loaded config.cfg yet, so this cvar is not archive. // we doesn't loaded config.cfg yet, so this cvar is not archive.
// change by +set joy_index in cmdline // change by +set joy_index in cmdline
joy_index = Cvar_Get( "joy_index", "0", FCVAR_READ_ONLY, "current active joystick" ); Cvar_RegisterVariable( &joy_index );
joy_enable = Cvar_Get( "joy_enable", "1", FCVAR_ARCHIVE | FCVAR_FILTERABLE, "enable joystick" ); Cvar_RegisterVariable( &joy_enable );
// renamed from -nojoy to -noenginejoy to not conflict with // renamed from -nojoy to -noenginejoy to not conflict with
// client.dll's joystick support // client.dll's joystick support
@ -416,7 +417,7 @@ void Joy_Init( void )
return; return;
} }
Cvar_FullSet( "joy_found", va( "%d", Platform_JoyInit( joy_index->value )), FCVAR_READ_ONLY ); Cvar_FullSet( "joy_found", va( "%d", Platform_JoyInit( joy_index.value )), FCVAR_READ_ONLY );
joy_initialized = true; joy_initialized = true;
} }

6
engine/client/input.c

@ -85,18 +85,18 @@ player is connected to the server
*/ */
void IN_LockInputDevices( qboolean lock ) void IN_LockInputDevices( qboolean lock )
{ {
extern convar_t *joy_enable; // private to input system extern convar_t joy_enable; // private to input system
if( lock ) if( lock )
{ {
SetBits( m_ignore.flags, FCVAR_READ_ONLY ); SetBits( m_ignore.flags, FCVAR_READ_ONLY );
SetBits( joy_enable->flags, FCVAR_READ_ONLY ); SetBits( joy_enable.flags, FCVAR_READ_ONLY );
SetBits( touch_enable.flags, FCVAR_READ_ONLY ); SetBits( touch_enable.flags, FCVAR_READ_ONLY );
} }
else else
{ {
ClearBits( m_ignore.flags, FCVAR_READ_ONLY ); ClearBits( m_ignore.flags, FCVAR_READ_ONLY );
ClearBits( joy_enable->flags, FCVAR_READ_ONLY ); ClearBits( joy_enable.flags, FCVAR_READ_ONLY );
ClearBits( touch_enable.flags, FCVAR_READ_ONLY ); ClearBits( touch_enable.flags, FCVAR_READ_ONLY );
} }
} }

6
engine/platform/sdl/events.c

@ -406,10 +406,12 @@ static size_t num_open_game_controllers = 0;
static void SDLash_GameController_Add( int index ) static void SDLash_GameController_Add( int index )
{ {
extern convar_t *joy_enable; // private to input system extern convar_t joy_enable; // private to input system
SDL_GameController *controller; SDL_GameController *controller;
if( !joy_enable->value )
if( !joy_enable.value )
return; return;
controller = SDL_GameControllerOpen( index ); controller = SDL_GameControllerOpen( index );
if( !controller ) if( !controller )
{ {

Loading…
Cancel
Save