mirror of
https://github.com/FWGS/xash3d-fwgs
synced 2024-12-26 02:36:08 +01:00
input: provide a common function for collecting input from different sources
This commit is contained in:
parent
bff9ca8438
commit
da094fa04e
@ -493,6 +493,47 @@ void IN_JoyAppendMove( usercmd_t *cmd, float forwardmove, float sidemove )
|
||||
}
|
||||
}
|
||||
|
||||
void IN_CollectInput( float *forward, float *side, float *pitch, float *yaw, qboolean includeSdlMouse )
|
||||
{
|
||||
if( !m_ignore->value )
|
||||
{
|
||||
#if XASH_INPUT == INPUT_SDL
|
||||
if( includeSdlMouse )
|
||||
{
|
||||
int x, y;
|
||||
SDL_GetMouseState( &x, &y );
|
||||
*pitch += y * m_pitch->value;
|
||||
*yaw -= x * m_yaw->value;
|
||||
}
|
||||
#endif // INPUT_SDL
|
||||
|
||||
#ifdef __ANDROID__
|
||||
{
|
||||
float x, y;
|
||||
Android_MouseMove( &x, &y );
|
||||
*pitch += y * m_pitch->value;
|
||||
*yaw -= x * m_yaw->value;
|
||||
}
|
||||
#endif // ANDROID
|
||||
}
|
||||
|
||||
Joy_FinalizeMove( forward, side, yaw, pitch );
|
||||
IN_TouchMove( forward, side, yaw, pitch );
|
||||
|
||||
#ifdef USE_EVDEV
|
||||
IN_EvdevMove( yaw, pitch );
|
||||
#endif
|
||||
|
||||
if( look_filter->value )
|
||||
{
|
||||
*pitch = ( inputstate.lastpitch + *pitch ) / 2;
|
||||
*yaw = ( inputstate.lastyaw + *yaw ) / 2;
|
||||
inputstate.lastpitch = *pitch;
|
||||
inputstate.lastyaw = *yaw;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
IN_EngineAppendMove
|
||||
@ -502,7 +543,7 @@ Called from cl_main.c after generating command in client
|
||||
*/
|
||||
void IN_EngineAppendMove( float frametime, usercmd_t *cmd, qboolean active )
|
||||
{
|
||||
float forward, side, dpitch, dyaw;
|
||||
float forward, side, pitch, yaw;
|
||||
|
||||
if( clgame.dllFuncs.pfnLookEvent )
|
||||
return;
|
||||
@ -510,45 +551,18 @@ void IN_EngineAppendMove( float frametime, usercmd_t *cmd, qboolean active )
|
||||
if( cls.key_dest != key_game || cl.paused || cl.intermission )
|
||||
return;
|
||||
|
||||
forward = side = dpitch = dyaw = 0;
|
||||
forward = side = pitch = yaw = 0;
|
||||
|
||||
if(active)
|
||||
if( active )
|
||||
{
|
||||
float sensitivity = ( (float)RI.fov_x / (float)90.0f );
|
||||
#if XASH_INPUT == INPUT_SDL
|
||||
if( m_enginemouse->value && !m_ignore->value )
|
||||
{
|
||||
int mouse_x, mouse_y;
|
||||
SDL_GetRelativeMouseState( &mouse_x, &mouse_y );
|
||||
RI.viewangles[PITCH] += mouse_y * m_pitch->value * sensitivity;
|
||||
RI.viewangles[YAW] -= mouse_x * m_yaw->value * sensitivity;
|
||||
}
|
||||
#endif
|
||||
#ifdef __ANDROID__
|
||||
if( !m_ignore->value )
|
||||
{
|
||||
float mouse_x, mouse_y;
|
||||
Android_MouseMove( &mouse_x, &mouse_y );
|
||||
RI.viewangles[PITCH] += mouse_y * m_pitch->value * sensitivity;
|
||||
RI.viewangles[YAW] -= mouse_x * m_yaw->value * sensitivity;
|
||||
}
|
||||
#endif
|
||||
Joy_FinalizeMove( &forward, &side, &dyaw, &dpitch );
|
||||
IN_TouchMove( &forward, &side, &dyaw, &dpitch );
|
||||
IN_JoyAppendMove( cmd, forward, side );
|
||||
#ifdef USE_EVDEV
|
||||
IN_EvdevMove( &dyaw, &dpitch );
|
||||
#endif
|
||||
if( look_filter->value )
|
||||
{
|
||||
dpitch = ( inputstate.lastpitch + dpitch ) / 2;
|
||||
dyaw = ( inputstate.lastyaw + dyaw ) / 2;
|
||||
inputstate.lastpitch = dpitch;
|
||||
inputstate.lastyaw = dyaw;
|
||||
}
|
||||
|
||||
RI.viewangles[YAW] += dyaw * sensitivity;
|
||||
RI.viewangles[PITCH] += dpitch * sensitivity;
|
||||
IN_CollectInput( &forward, &side, &yaw, &pitch, m_enginemouse->value );
|
||||
|
||||
IN_JoyAppendMove( cmd, forward, side );
|
||||
|
||||
RI.viewangles[YAW] += yaw * sensitivity;
|
||||
RI.viewangles[PITCH] += pitch * sensitivity;
|
||||
RI.viewangles[PITCH] = bound( -90, RI.viewangles[PITCH], 90 );
|
||||
}
|
||||
}
|
||||
@ -573,37 +587,7 @@ void Host_InputFrame( void )
|
||||
|
||||
if( clgame.dllFuncs.pfnLookEvent )
|
||||
{
|
||||
int dx, dy;
|
||||
|
||||
#ifndef __ANDROID__
|
||||
if( in_mouseinitialized && !m_ignore->value )
|
||||
{
|
||||
SDL_GetRelativeMouseState( &dx, &dy );
|
||||
pitch += dy * m_pitch->value, yaw -= dx * m_yaw->value; //mouse speed
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __ANDROID__
|
||||
if( !m_ignore->value )
|
||||
{
|
||||
float mouse_x, mouse_y;
|
||||
Android_MouseMove( &mouse_x, &mouse_y );
|
||||
pitch += mouse_y * m_pitch->value, yaw -= mouse_x * m_yaw->value; //mouse speed
|
||||
}
|
||||
#endif
|
||||
|
||||
Joy_FinalizeMove( &forward, &side, &yaw, &pitch );
|
||||
IN_TouchMove( &forward, &side, &yaw, &pitch );
|
||||
#ifdef USE_EVDEV
|
||||
IN_EvdevMove( &yaw, &pitch );
|
||||
#endif
|
||||
if( look_filter->value )
|
||||
{
|
||||
pitch = ( inputstate.lastpitch + pitch ) / 2;
|
||||
yaw = ( inputstate.lastyaw + yaw ) / 2;
|
||||
inputstate.lastpitch = pitch;
|
||||
inputstate.lastyaw = yaw;
|
||||
}
|
||||
IN_CollectInput( &forward, &side, &yaw, &pitch, in_mouseinitialized );
|
||||
|
||||
if( cls.key_dest == key_game )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user