mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-01-20 03:50:08 +00:00
engine: client: another interpolation fix
This commit is contained in:
parent
b289de26a6
commit
386ae2067b
@ -241,6 +241,11 @@ void CL_SignonReply( void )
|
||||
}
|
||||
}
|
||||
|
||||
float CL_LerpInterval( void )
|
||||
{
|
||||
return max( cl_interp->value, 1.f / cl_updaterate->value );
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
CL_LerpPoint
|
||||
@ -291,12 +296,13 @@ static float CL_LerpPoint( void )
|
||||
if( cl_interp->value > 0.001f )
|
||||
{
|
||||
// manual lerp value (goldsrc mode)
|
||||
frac = ( cl.time - cl.mtime[1] ) / cl_interp->value;
|
||||
float td = max( 0.f, cl.time - cl.mtime[0] );
|
||||
frac = td / CL_LerpInterval();
|
||||
}
|
||||
else if( server_frametime > 0.001f )
|
||||
{
|
||||
// automatic lerp (classic mode)
|
||||
frac = ( cl.time - cl.mtime[1] ) / server_frametime;
|
||||
frac = ( cl.time - cl.mtime[1] ) / server_frametime;
|
||||
}
|
||||
#endif
|
||||
return frac;
|
||||
@ -339,10 +345,10 @@ Validate interpolation cvars, calc interpolation window
|
||||
*/
|
||||
void CL_ComputeClientInterpolationAmount( usercmd_t *cmd )
|
||||
{
|
||||
int min_interp = MIN_EX_INTERP;
|
||||
int max_interp = MAX_EX_INTERP;
|
||||
int interpolation_msec;
|
||||
qboolean forced = false;
|
||||
const float epsilon = 0.001f; // to avoid float invalid comparision
|
||||
float min_interp = MIN_EX_INTERP;
|
||||
float max_interp = MAX_EX_INTERP;
|
||||
float interpolation_time;
|
||||
|
||||
if( cl_updaterate->value < MIN_UPDATERATE )
|
||||
{
|
||||
@ -357,29 +363,24 @@ void CL_ComputeClientInterpolationAmount( usercmd_t *cmd )
|
||||
}
|
||||
|
||||
if( cls.spectator )
|
||||
max_interp = 200;
|
||||
max_interp = 0.2f;
|
||||
|
||||
min_interp = 1000.0f / cl_updaterate->value;
|
||||
min_interp = Q_max( 1, min_interp );
|
||||
interpolation_msec = cl_interp->value * 1000.0f;
|
||||
|
||||
if(( interpolation_msec + 1 ) < min_interp )
|
||||
min_interp = 1.0f / cl_updaterate->value;
|
||||
interpolation_time = CL_LerpInterval( );
|
||||
|
||||
if( (cl_interp->value + epsilon) < min_interp )
|
||||
{
|
||||
Con_Printf( "ex_interp forced up to %i msec\n", interpolation_msec );
|
||||
interpolation_msec = min_interp;
|
||||
forced = true;
|
||||
Con_Printf( "ex_interp forced up to %.1f msec\n", min_interp * 1000.f );
|
||||
Cvar_SetValue( "ex_interp", min_interp );
|
||||
}
|
||||
else if(( interpolation_msec - 1 ) > max_interp )
|
||||
else if( (cl_interp->value - epsilon) > max_interp )
|
||||
{
|
||||
Con_Printf( "ex_interp forced down to %i msec\n", interpolation_msec );
|
||||
interpolation_msec = max_interp;
|
||||
forced = true;
|
||||
Con_Printf( "ex_interp forced down to %.1f msec\n", max_interp * 1000.f );
|
||||
Cvar_SetValue( "ex_interp", max_interp );
|
||||
}
|
||||
|
||||
if( forced ) Cvar_SetValue( "ex_interp", (float)interpolation_msec * 0.001f );
|
||||
interpolation_msec = bound( min_interp, interpolation_msec, max_interp );
|
||||
|
||||
cmd->lerp_msec = CL_DriftInterpolationAmount( interpolation_msec );
|
||||
interpolation_time = bound( min_interp, interpolation_time, max_interp );
|
||||
cmd->lerp_msec = CL_DriftInterpolationAmount( interpolation_time * 1000 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -107,8 +107,8 @@ extern int CL_UPDATE_BACKUP;
|
||||
#define MIN_UPDATERATE 10.0f
|
||||
#define MAX_UPDATERATE 102.0f
|
||||
|
||||
#define MIN_EX_INTERP 50.0f
|
||||
#define MAX_EX_INTERP 100.0f
|
||||
#define MIN_EX_INTERP 0.005f
|
||||
#define MAX_EX_INTERP 0.1f
|
||||
|
||||
#define CL_MIN_RESEND_TIME 1.5f // mininum time gap (in seconds) before a subsequent connection request is sent.
|
||||
#define CL_MAX_RESEND_TIME 20.0f // max time. The cvar cl_resend is bounded by these.
|
||||
|
Loading…
x
Reference in New Issue
Block a user