47 lines
1023 B
C++
47 lines
1023 B
C++
#ifndef GAMEMODE_H
|
|
#define GAMEMODE_H
|
|
|
|
#include "interface.h"
|
|
#include "tier0/platform.h"
|
|
#include "tier1/utlvector.h"
|
|
|
|
class CGameMode
|
|
{
|
|
public:
|
|
virtual void RoundBegin( void );
|
|
virtual void RoundEnd( void );
|
|
bool bCanPlayerSpawnMidRound;
|
|
};
|
|
|
|
|
|
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); \
|
|
|
|
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;
|
|
|
|
CUtlVector<CGameModeRegistry*> m_RegisteredGameModes;
|
|
};
|
|
|
|
extern IGameModeManager *GameModeManager();
|
|
|
|
#endif
|