#ifndef GAMEMODE_H #define GAMEMODE_H #include "interface.h" #include "tier0/platform.h" class CGameMode { public: virtual void RoundBegin( void ); virtual void RoundEnd( void ); bool bCanPlayerSpawnMidRound; }; interface IGameModeManager: public IInterface { public: virtual void StartGameMode( const char *szName ) = 0; virtual const char *GetCurrentGameMode( void ) = 0; virtual CGameMode *GetCurrentGameModeClass( void ) = 0; virtual void RestartCurrentGameMode( void ) = 0; }; extern IGameModeManager *GameModeManager(); typedef CGameMode*(*GameModeRegistryFn)(); class CGameModeRegistry { public: CGameModeRegistry( const char *szName, GameModeRegistryFn pfn ); const char *m_szName; GameModeRegistryFn m_pfn; }; #define DECLARE_GAME_MODE( class, name ) \ CGameMode *__gamemode_alloc_##name() \ { \ return new class; \ }; \ CGameModeRegistry __gamemode_##name##_registry(#name, __gamemode_alloc_##name); \ #endif