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:
//
// $NoKeywords: $
//===========================================================================//
#ifndef GAMEMANAGER_H
#define GAMEMANAGER_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/utlvector.h"
//-----------------------------------------------------------------------------
// State we are in
//-----------------------------------------------------------------------------
enum LevelState_t { NOT_IN_LEVEL = 0, LOADING_LEVEL, IN_LEVEL, SHUTTING_DOWN_LEVEL, };
//-----------------------------------------------------------------------------
// State we are in
//-----------------------------------------------------------------------------
enum LevelRetVal_t { FAILED = 0, MORE_WORK, FINISHED, };
//-----------------------------------------------------------------------------
// Tick interval
//-----------------------------------------------------------------------------
#define TICK_INTERVAL 0.015f
//-----------------------------------------------------------------------------
// Game managers are singleton objects in the game code responsible for various tasks
// The order in which the server systems appear in this list are the
// order in which they are initialized and updated. They are shut down in
// reverse order from which they are initialized.
//-----------------------------------------------------------------------------
abstract_class IGameManager { public: // GameManagers are expected to implement these methods.
virtual bool Init() = 0; virtual LevelRetVal_t LevelInit( bool bFirstCall ) = 0; virtual void Update( ) = 0; virtual LevelRetVal_t LevelShutdown( bool bFirstCall ) = 0; virtual void Shutdown() = 0; // Called during game save
virtual void OnSave() = 0;
// Called during game restore
virtual void OnRestore() = 0;
// This this game manager involved in I/O or simulation?
virtual bool PerformsSimulation() = 0;
// Add, remove game managers
static void Add( IGameManager* pSys ); static void Remove( IGameManager* pSys ); static void RemoveAll( );
// Init, shutdown game managers
static bool InitAllManagers(); static void ShutdownAllManagers();
// Start, stop running game managers
static void Start (); static void Stop (); static int FrameNumber();
// Used in simulation
static float CurrentSimulationTime(); static float SimulationDeltaTime();
// Used in rendering
static float CurrentTime(); static float DeltaTime();
// Start loading a level
static void StartNewLevel(); static void ShutdownLevel(); static LevelState_t GetLevelState();
protected: // Updates the state machine related to loading levels
static void UpdateLevelStateMachine();
virtual ~IGameManager() {}
typedef LevelRetVal_t (IGameManager::*GameManagerLevelFunc_t)( bool bFirstCall ); typedef bool (IGameManager::*GameManagerInitFunc_t)(); typedef void (IGameManager::*GameManagerFunc_t)();
// Used to invoke a method of all added game managers in order
static void InvokeMethod( GameManagerFunc_t f ); static void InvokeMethodReverseOrder( GameManagerFunc_t f ); static bool InvokeMethod( GameManagerInitFunc_t f ); static LevelRetVal_t InvokeLevelMethod( GameManagerLevelFunc_t f, bool bFirstCall ); static LevelRetVal_t InvokeLevelMethodReverseOrder( GameManagerLevelFunc_t f, bool bFirstCall );
static bool m_bLevelShutdownRequested; static bool m_bLevelStartRequested; static bool m_bStopRequested; static CUtlVector< IGameManager* > m_GameManagers; static bool m_bIsRunning; static bool m_bIsInitialized; static int m_nFrameNumber; static float m_flCurrentTime; static float m_flLastTime; static LevelState_t m_LevelState; };
//-----------------------------------------------------------------------------
// Default decorator base-class for IGameManager
//-----------------------------------------------------------------------------
template< class BaseClass = IGameManager > class CGameManager : public BaseClass { public: virtual ~CGameManager();
// GameManagers are expected to implement these methods.
// NOTE: If Init or LevelInit fail, they are expected to call
virtual bool Init() { return true; } virtual LevelRetVal_t LevelInit( bool bFirstCall ) { return FINISHED; } virtual void Update( ) {} virtual LevelRetVal_t LevelShutdown( bool bFirstCall ) { return FINISHED; } virtual void Shutdown() {} virtual void OnSave() {} virtual void OnRestore() {} virtual bool PerformsSimulation() { return false; } };
//-----------------------------------------------------------------------------
// Automatically remove the game system if it gets deleted.
//-----------------------------------------------------------------------------
template< class BaseClass > inline CGameManager< BaseClass >::~CGameManager() { Remove( this ); }
#endif // GAMEMANAGER_H
|