69 lines
1.9 KiB
C++
69 lines
1.9 KiB
C++
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================//
|
|
|
|
#ifndef CLOCKDRIFTMGR_H
|
|
#define CLOCKDRIFTMGR_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
|
|
class CClockDriftMgr
|
|
{
|
|
friend class CBaseClientState;
|
|
|
|
public:
|
|
CClockDriftMgr();
|
|
|
|
// Is clock correction even enabled right now?
|
|
static bool IsClockCorrectionEnabled();
|
|
|
|
// Clear our state.
|
|
void Clear();
|
|
|
|
// This is called each time a server packet comes in. It is used to correlate
|
|
// where the server is in time compared to us.
|
|
void SetServerTick( int iServerTick );
|
|
|
|
// Pass in the frametime you would use, and it will drift it towards the server clock.
|
|
float AdjustFrameTime( float inputFrameTime );
|
|
|
|
// Returns how many ticks ahead of the server the client is.
|
|
float GetCurrentClockDifference() const;
|
|
|
|
|
|
private:
|
|
|
|
void ShowDebugInfo( float flAdjustment );
|
|
|
|
// This scales the offsets so the average produced is equal to the
|
|
// current average + flAmount. This way, as we add corrections,
|
|
// we lower the average accordingly so we don't keep responding
|
|
// as much as we need to after we'd adjusted it a couple times.
|
|
void AdjustAverageDifferenceBy( float flAmountInSeconds );
|
|
|
|
|
|
private:
|
|
|
|
enum
|
|
{
|
|
// This controls how much it smoothes out the samples from the server.
|
|
NUM_CLOCKDRIFT_SAMPLES=16
|
|
};
|
|
|
|
// This holds how many ticks the client is ahead each time we get a server tick.
|
|
// We average these together to get our estimate of how far ahead we are.
|
|
float m_ClockOffsets[NUM_CLOCKDRIFT_SAMPLES];
|
|
int m_iCurClockOffset;
|
|
|
|
int m_nServerTick; // Last-received tick from the server.
|
|
int m_nClientTick; // 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.
|
|
};
|
|
|
|
|
|
#endif // CLOCKDRIFTMGR_H
|