aboutsummaryrefslogtreecommitdiff
path: root/mp/src/public/globalvars_base.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/public/globalvars_base.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/public/globalvars_base.h')
-rw-r--r--mp/src/public/globalvars_base.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/mp/src/public/globalvars_base.h b/mp/src/public/globalvars_base.h
new file mode 100644
index 00000000..ddd3dd83
--- /dev/null
+++ b/mp/src/public/globalvars_base.h
@@ -0,0 +1,109 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef GLOBALVARS_BASE_H
+#define GLOBALVARS_BASE_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+class CSaveRestoreData;
+
+//-----------------------------------------------------------------------------
+// Purpose: Global variables used by shared code
+//-----------------------------------------------------------------------------
+class CGlobalVarsBase
+{
+public:
+
+ CGlobalVarsBase( bool bIsClient );
+
+ // This can be used to filter debug output or to catch the client or server in the act.
+ bool IsClient() const;
+
+ // for encoding m_flSimulationTime, m_flAnimTime
+ int GetNetworkBase( int nTick, int nEntity );
+
+public:
+
+ // Absolute time (per frame still - Use Plat_FloatTime() for a high precision real time
+ // perf clock, but not that it doesn't obey host_timescale/host_framerate)
+ float realtime;
+ // Absolute frame counter
+ int framecount;
+ // Non-paused frametime
+ float absoluteframetime;
+
+ // Current time
+ //
+ // On the client, this (along with tickcount) takes a different meaning based on what
+ // piece of code you're in:
+ //
+ // - While receiving network packets (like in PreDataUpdate/PostDataUpdate and proxies),
+ // this is set to the SERVER TICKCOUNT for that packet. There is no interval between
+ // the server ticks.
+ // [server_current_Tick * tick_interval]
+ //
+ // - While rendering, this is the exact client clock
+ // [client_current_tick * tick_interval + interpolation_amount]
+ //
+ // - During prediction, this is based on the client's current tick:
+ // [client_current_tick * tick_interval]
+ float curtime;
+
+ // Time spent on last server or client frame (has nothing to do with think intervals)
+ float frametime;
+ // current maxplayers setting
+ int maxClients;
+
+ // Simulation ticks
+ int tickcount;
+
+ // Simulation tick interval
+ float interval_per_tick;
+
+ // interpolation amount ( client-only ) based on fraction of next tick which has elapsed
+ float interpolation_amount;
+ int simTicksThisFrame;
+
+ int network_protocol;
+
+ // current saverestore data
+ CSaveRestoreData *pSaveData;
+
+private:
+ // Set to true in client code.
+ bool m_bClient;
+
+ // 100 (i.e., tickcount is rounded down to this base and then the "delta" from this base is networked
+ int nTimestampNetworkingBase;
+ // 32 (entindex() % nTimestampRandomizeWindow ) is subtracted from gpGlobals->tickcount to set the networking basis, prevents
+ // all of the entities from forcing a new PackedEntity on the same tick (i.e., prevents them from getting lockstepped on this)
+ int nTimestampRandomizeWindow;
+
+};
+
+inline int CGlobalVarsBase::GetNetworkBase( int nTick, int nEntity )
+{
+ int nEntityMod = nEntity % nTimestampRandomizeWindow;
+ int nBaseTick = nTimestampNetworkingBase * (int)( ( nTick - nEntityMod ) / nTimestampNetworkingBase );
+ return nBaseTick;
+}
+
+inline CGlobalVarsBase::CGlobalVarsBase( bool bIsClient ) :
+ m_bClient( bIsClient ),
+ nTimestampNetworkingBase( 100 ),
+ nTimestampRandomizeWindow( 32 )
+{
+}
+
+inline bool CGlobalVarsBase::IsClient() const
+{
+ return m_bClient;
+}
+
+#endif // GLOBALVARS_BASE_H