diff options
Diffstat (limited to 'game/shared/GameEventListener.h')
| -rw-r--r-- | game/shared/GameEventListener.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/game/shared/GameEventListener.h b/game/shared/GameEventListener.h new file mode 100644 index 0000000..d77b809 --- /dev/null +++ b/game/shared/GameEventListener.h @@ -0,0 +1,70 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef GAME_EVENT_LISTENER_H +#define GAME_EVENT_LISTENER_H +#ifdef _WIN32 +#pragma once +#endif + +#include "igameevents.h" +extern IGameEventManager2 *gameeventmanager; + +// A safer method than inheriting straight from IGameEventListener2. +// Avoids requiring the user to remove themselves as listeners in +// their deconstructor, and sets the serverside variable based on +// our dll location. +class CGameEventListener : public IGameEventListener2 +{ +public: + CGameEventListener() : m_bRegisteredForEvents(false) + { + } + + ~CGameEventListener() + { + StopListeningForAllEvents(); + } + + void ListenForGameEvent( const char *name ) + { + m_bRegisteredForEvents = true; + +#ifdef CLIENT_DLL + bool bServerSide = false; +#else + bool bServerSide = true; +#endif + if ( gameeventmanager ) + { + gameeventmanager->AddListener( this, name, bServerSide ); + } + + AssertMsg1( gameeventmanager, "Failed to subscribe to event %s!", name ); + } + + void StopListeningForAllEvents() + { + // remove me from list + if ( m_bRegisteredForEvents ) + { + if ( gameeventmanager ) + gameeventmanager->RemoveListener( this ); + m_bRegisteredForEvents = false; + } + } + + // Intentionally abstract + virtual void FireGameEvent( IGameEvent *event ) = 0; + +private: + + // Have we registered for any events? + bool m_bRegisteredForEvents; +}; + +#endif |