aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/player_lagcompensation.cpp
diff options
context:
space:
mode:
authorMichael Sartain <[email protected]>2014-10-02 08:25:55 -0700
committerMichael Sartain <[email protected]>2014-10-02 08:25:55 -0700
commit55ed12f8d1eb6887d348be03aee5573d44177ffb (patch)
tree3686f7ca78c780cd9a3d367b79a9d9250c1be7c0 /mp/src/game/server/player_lagcompensation.cpp
parent* Added support for Visual C++ 2013 Express to VPC (diff)
downloadsource-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.cpp14
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;
}