Fixed last few stuff with clock correction
This commit is contained in:
parent
6691968046
commit
a3b6b94959
4 changed files with 24 additions and 8 deletions
|
@ -2234,7 +2234,15 @@ void CL_Move(float accumulated_extra_samples, bool bFinalTick )
|
||||||
|
|
||||||
if ( cl.IsActive() )
|
if ( cl.IsActive() )
|
||||||
{
|
{
|
||||||
NET_Tick mymsg( cl.m_nDeltaTick, cl.m_ClockDriftMgr.m_nCachedRealClientTick, host_frametime_unbounded, host_frametime_stddeviation );
|
// TODO_ENHANCED:
|
||||||
|
// When fps is lower than tickrate,
|
||||||
|
// the server doesn't really know how many ticks were processed this frame client-side.
|
||||||
|
//
|
||||||
|
// When the client tick count is sent to server, sv_max_usercmd_future_ticks doesn't take into account when
|
||||||
|
// multiple commands are ran from client because it had low fps.
|
||||||
|
// We could probably store in CUserCmd structure the current tick number to account for that ?
|
||||||
|
// This works anyway.
|
||||||
|
NET_Tick mymsg( cl.m_nDeltaTick, cl.m_ClockDriftMgr.m_nCachedRealClientTick + cl.m_ClockDriftMgr.m_nCurrentTick, host_frametime_unbounded, host_frametime_stddeviation );
|
||||||
cl.m_NetChannel->SendNetMsg( mymsg );
|
cl.m_NetChannel->SendNetMsg( mymsg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,9 +99,10 @@ void CClockDriftMgr::ApplyClockCorrection(bool bFinalTick)
|
||||||
{
|
{
|
||||||
if (bFinalTick)
|
if (bFinalTick)
|
||||||
{
|
{
|
||||||
m_nCachedRealClientTick++;
|
cl.m_ClockDriftMgr.m_nCachedRealClientTick += cl.m_ClockDriftMgr.m_nNumberOfTicks;
|
||||||
}
|
}
|
||||||
m_nClientTick = m_nCachedRealClientTick + m_nLagDiff + g_ClientGlobalVariables.simTicksThisFrame - 1;
|
|
||||||
|
m_nClientTick = m_nCachedRealClientTick + m_nLagDiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CClockDriftMgr::ShowDebugInfo()
|
void CClockDriftMgr::ShowDebugInfo()
|
||||||
|
|
|
@ -39,6 +39,8 @@ public:
|
||||||
int m_nOldServerTick;
|
int m_nOldServerTick;
|
||||||
int m_nServerTick; // Last-received tick from the server.
|
int m_nServerTick; // Last-received tick from the server.
|
||||||
int m_nClientTick;
|
int m_nClientTick;
|
||||||
|
int m_nNumberOfTicks;
|
||||||
|
int m_nCurrentTick;
|
||||||
int m_nCachedRealClientTick; // The client's own tick counter (specifically, for interpolation during rendering).
|
int m_nCachedRealClientTick; // The client's own tick counter (specifically, for interpolation during rendering).
|
||||||
// The server may be on a slightly different tick and the client will drift towards it.
|
// The server may be on a slightly different tick and the client will drift towards it.
|
||||||
int m_nLaggedClientTick;
|
int m_nLaggedClientTick;
|
||||||
|
|
|
@ -3130,6 +3130,8 @@ void _Host_RunFrame (float time)
|
||||||
host_remainder -= numticks * host_state.interval_per_tick;
|
host_remainder -= numticks * host_state.interval_per_tick;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cl.m_ClockDriftMgr.m_nNumberOfTicks = numticks;
|
||||||
|
|
||||||
host_nexttick = host_state.interval_per_tick - host_remainder;
|
host_nexttick = host_state.interval_per_tick - host_remainder;
|
||||||
|
|
||||||
g_pMDLCache->MarkFrame();
|
g_pMDLCache->MarkFrame();
|
||||||
|
@ -3246,7 +3248,7 @@ void _Host_RunFrame (float time)
|
||||||
#endif
|
#endif
|
||||||
cl.m_tickRemainder = host_remainder;
|
cl.m_tickRemainder = host_remainder;
|
||||||
g_ServerGlobalVariables.simTicksThisFrame = 1;
|
g_ServerGlobalVariables.simTicksThisFrame = 1;
|
||||||
cl.SetFrameTime( host_frametime );
|
cl.SetFrameTime(host_frametime);
|
||||||
for ( int tick = 0; tick < numticks; tick++ )
|
for ( int tick = 0; tick < numticks; tick++ )
|
||||||
{
|
{
|
||||||
// Emit an ETW event every simulation frame.
|
// Emit an ETW event every simulation frame.
|
||||||
|
@ -3315,8 +3317,9 @@ void _Host_RunFrame (float time)
|
||||||
//-------------------
|
//-------------------
|
||||||
#ifndef SWDS
|
#ifndef SWDS
|
||||||
if ( !sv.IsDedicated() )
|
if ( !sv.IsDedicated() )
|
||||||
{
|
{
|
||||||
_Host_RunFrame_Client( bFinalTick );
|
cl.m_ClockDriftMgr.m_nCurrentTick = tick;
|
||||||
|
_Host_RunFrame_Client(bFinalTick);
|
||||||
}
|
}
|
||||||
|
|
||||||
toolframework->Think( bFinalTick );
|
toolframework->Think( bFinalTick );
|
||||||
|
@ -3358,7 +3361,8 @@ void _Host_RunFrame (float time)
|
||||||
// as quickly as we can.
|
// as quickly as we can.
|
||||||
if ( numticks == 0 && ( demoplayer->IsPlayingTimeDemo() || demoplayer->IsSkipping() ) )
|
if ( numticks == 0 && ( demoplayer->IsPlayingTimeDemo() || demoplayer->IsSkipping() ) )
|
||||||
{
|
{
|
||||||
_Host_RunFrame_Client( true );
|
cl.m_ClockDriftMgr.m_nCurrentTick = 0;
|
||||||
|
_Host_RunFrame_Client(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !sv.IsDedicated() )
|
if ( !sv.IsDedicated() )
|
||||||
|
@ -3455,7 +3459,8 @@ void _Host_RunFrame (float time)
|
||||||
//-------------------
|
//-------------------
|
||||||
if ( !sv.IsDedicated() )
|
if ( !sv.IsDedicated() )
|
||||||
{
|
{
|
||||||
_Host_RunFrame_Client( bFinalTick );
|
cl.m_ClockDriftMgr.m_nCurrentTick = tick;
|
||||||
|
_Host_RunFrame_Client(bFinalTick);
|
||||||
}
|
}
|
||||||
toolframework->Think( bFinalTick );
|
toolframework->Think( bFinalTick );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue