diff options
| author | Michael Sartain <[email protected]> | 2014-10-02 08:25:55 -0700 |
|---|---|---|
| committer | Michael Sartain <[email protected]> | 2014-10-02 08:25:55 -0700 |
| commit | 55ed12f8d1eb6887d348be03aee5573d44177ffb (patch) | |
| tree | 3686f7ca78c780cd9a3d367b79a9d9250c1be7c0 /mp/src/game/server/player_lagcompensation.cpp | |
| parent | * Added support for Visual C++ 2013 Express to VPC (diff) | |
| download | source-sdk-2013-55ed12f8d1eb6887d348be03aee5573d44177ffb.tar.xz source-sdk-2013-55ed12f8d1eb6887d348be03aee5573d44177ffb.zip | |
Updated the SDK with the latest code from the TF and HL2 branches.
Diffstat (limited to 'mp/src/game/server/player_lagcompensation.cpp')
| -rw-r--r-- | mp/src/game/server/player_lagcompensation.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/mp/src/game/server/player_lagcompensation.cpp b/mp/src/game/server/player_lagcompensation.cpp index 08503652..37f322e5 100644 --- a/mp/src/game/server/player_lagcompensation.cpp +++ b/mp/src/game/server/player_lagcompensation.cpp @@ -172,6 +172,7 @@ class CLagCompensationManager : public CAutoGameSystemPerFrame, public ILagCompe public: CLagCompensationManager( char const *name ) : CAutoGameSystemPerFrame( name ), m_flTeleportDistanceSqr( 64 *64 ) { + m_isCurrentlyDoingCompensation = false; } // IServerSystem stuff @@ -194,6 +195,8 @@ public: void StartLagCompensation( CBasePlayer *player, CUserCmd *cmd ); void FinishLagCompensation( CBasePlayer *player ); + bool IsCurrentlyDoingLagCompensation() const OVERRIDE { return m_isCurrentlyDoingCompensation; } + private: void BacktrackPlayer( CBasePlayer *player, float flTargetTime ); @@ -216,6 +219,8 @@ private: CBasePlayer *m_pCurrentPlayer; // The player we are doing lag compensation for float m_flTeleportDistanceSqr; + + bool m_isCurrentlyDoingCompensation; // Sentinel to prevent calling StartLagCompensation a second time before a Finish. }; static CLagCompensationManager g_LagCompensationManager( "CLagCompensationManager" ); @@ -322,6 +327,8 @@ void CLagCompensationManager::FrameUpdatePostEntityThink() // Called during player movement to set up/restore after lag compensation void CLagCompensationManager::StartLagCompensation( CBasePlayer *player, CUserCmd *cmd ) { + Assert( !m_isCurrentlyDoingCompensation ); + //DONT LAG COMP AGAIN THIS FRAME IF THERES ALREADY ONE IN PROGRESS //IF YOU'RE HITTING THIS THEN IT MEANS THERES A CODE BUG if ( m_pCurrentPlayer ) @@ -350,6 +357,8 @@ void CLagCompensationManager::StartLagCompensation( CBasePlayer *player, CUserCm Q_memset( m_RestoreData, 0, sizeof( m_RestoreData ) ); Q_memset( m_ChangeData, 0, sizeof( m_ChangeData ) ); + m_isCurrentlyDoingCompensation = true; + // Get true latency // correct is the amout of time we have to correct game time @@ -734,7 +743,10 @@ void CLagCompensationManager::FinishLagCompensation( CBasePlayer *player ) m_pCurrentPlayer = NULL; if ( !m_bNeedToRestore ) + { + m_isCurrentlyDoingCompensation = false; return; // no player was changed at all + } // Iterate all active players for ( int i = 1; i <= gpGlobals->maxClients; i++ ) @@ -828,6 +840,8 @@ void CLagCompensationManager::FinishLagCompensation( CBasePlayer *player ) pPlayer->SetSimulationTime( restore->m_flSimulationTime ); } } + + m_isCurrentlyDoingCompensation = false; } |