diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/globalvars_base.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'public/globalvars_base.h')
| -rw-r--r-- | public/globalvars_base.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/public/globalvars_base.h b/public/globalvars_base.h new file mode 100644 index 0000000..7ba96cb --- /dev/null +++ b/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 |