mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-17 14:07:48 +00:00
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user