Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= 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
|