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
|
CL_LerpPoint
|
||||||
@ -291,12 +296,13 @@ static float CL_LerpPoint( void )
|
|||||||
if( cl_interp->value > 0.001f )
|
if( cl_interp->value > 0.001f )
|
||||||
{
|
{
|
||||||
// manual lerp value (goldsrc mode)
|
// 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 )
|
else if( server_frametime > 0.001f )
|
||||||
{
|
{
|
||||||
// automatic lerp (classic mode)
|
// automatic lerp (classic mode)
|
||||||
frac = ( cl.time - cl.mtime[1] ) / server_frametime;
|
frac = ( cl.time - cl.mtime[1] ) / server_frametime;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return frac;
|
return frac;
|
||||||
@ -339,10 +345,10 @@ Validate interpolation cvars, calc interpolation window
|
|||||||
*/
|
*/
|
||||||
void CL_ComputeClientInterpolationAmount( usercmd_t *cmd )
|
void CL_ComputeClientInterpolationAmount( usercmd_t *cmd )
|
||||||
{
|
{
|
||||||
int min_interp = MIN_EX_INTERP;
|
const float epsilon = 0.001f; // to avoid float invalid comparision
|
||||||
int max_interp = MAX_EX_INTERP;
|
float min_interp = MIN_EX_INTERP;
|
||||||
int interpolation_msec;
|
float max_interp = MAX_EX_INTERP;
|
||||||
qboolean forced = false;
|
float interpolation_time;
|
||||||
|
|
||||||
if( cl_updaterate->value < MIN_UPDATERATE )
|
if( cl_updaterate->value < MIN_UPDATERATE )
|
||||||
{
|
{
|
||||||
@ -357,29 +363,24 @@ void CL_ComputeClientInterpolationAmount( usercmd_t *cmd )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( cls.spectator )
|
if( cls.spectator )
|
||||||
max_interp = 200;
|
max_interp = 0.2f;
|
||||||
|
|
||||||
min_interp = 1000.0f / cl_updaterate->value;
|
min_interp = 1.0f / cl_updaterate->value;
|
||||||
min_interp = Q_max( 1, min_interp );
|
interpolation_time = CL_LerpInterval( );
|
||||||
interpolation_msec = cl_interp->value * 1000.0f;
|
|
||||||
|
if( (cl_interp->value + epsilon) < min_interp )
|
||||||
if(( interpolation_msec + 1 ) < min_interp )
|
|
||||||
{
|
{
|
||||||
Con_Printf( "ex_interp forced up to %i msec\n", interpolation_msec );
|
Con_Printf( "ex_interp forced up to %.1f msec\n", min_interp * 1000.f );
|
||||||
interpolation_msec = min_interp;
|
Cvar_SetValue( "ex_interp", min_interp );
|
||||||
forced = true;
|
|
||||||
}
|
}
|
||||||
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 );
|
Con_Printf( "ex_interp forced down to %.1f msec\n", max_interp * 1000.f );
|
||||||
interpolation_msec = max_interp;
|
Cvar_SetValue( "ex_interp", max_interp );
|
||||||
forced = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( forced ) Cvar_SetValue( "ex_interp", (float)interpolation_msec * 0.001f );
|
interpolation_time = bound( min_interp, interpolation_time, max_interp );
|
||||||
interpolation_msec = bound( min_interp, interpolation_msec, max_interp );
|
cmd->lerp_msec = CL_DriftInterpolationAmount( interpolation_time * 1000 );
|
||||||
|
|
||||||
cmd->lerp_msec = CL_DriftInterpolationAmount( interpolation_msec );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -107,8 +107,8 @@ extern int CL_UPDATE_BACKUP;
|
|||||||
#define MIN_UPDATERATE 10.0f
|
#define MIN_UPDATERATE 10.0f
|
||||||
#define MAX_UPDATERATE 102.0f
|
#define MAX_UPDATERATE 102.0f
|
||||||
|
|
||||||
#define MIN_EX_INTERP 50.0f
|
#define MIN_EX_INTERP 0.005f
|
||||||
#define MAX_EX_INTERP 100.0f
|
#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_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.
|
#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