100 lines
2.7 KiB
C++
100 lines
2.7 KiB
C++
//===== Copyright <20> 1996-2009, Valve Corporation, All rights reserved. ======//
|
||
//
|
||
// Purpose:
|
||
//
|
||
//===========================================================================//
|
||
|
||
#ifndef MM_EXTENSIONS_H
|
||
#define MM_EXTENSIONS_H
|
||
#ifdef _WIN32
|
||
#pragma once
|
||
#endif
|
||
|
||
#include "UtlStringMap.h"
|
||
|
||
#include "vgui/ILocalize.h"
|
||
#include "engine/inetsupport.h"
|
||
#include "cdll_int.h"
|
||
#include "eiface.h"
|
||
#include "igameevents.h"
|
||
#ifdef _X360
|
||
#include "ixboxsystem.h"
|
||
#endif
|
||
#include "eiface.h"
|
||
|
||
#include "mm_framework.h"
|
||
|
||
#include "engine/ienginevoice.h"
|
||
|
||
class CMatchExtensions : public IMatchExtensions
|
||
{
|
||
// Methods of IMatchExtensions
|
||
public:
|
||
// Registers an extension interface
|
||
virtual void RegisterExtensionInterface( char const *szInterfaceString, void *pvInterface );
|
||
|
||
// Unregisters an extension interface
|
||
virtual void UnregisterExtensionInterface( char const *szInterfaceString, void *pvInterface );
|
||
|
||
// Gets a pointer to a registered extension interface
|
||
virtual void * GetRegisteredExtensionInterface( char const *szInterfaceString );
|
||
|
||
public:
|
||
CMatchExtensions();
|
||
~CMatchExtensions();
|
||
|
||
protected:
|
||
struct RegisteredInterface_t
|
||
{
|
||
void *m_pvInterface;
|
||
int m_nRefCount;
|
||
|
||
RegisteredInterface_t() : m_nRefCount( 0 ), m_pvInterface( 0 ) {}
|
||
};
|
||
typedef CUtlStringMap< RegisteredInterface_t > InterfaceMap_t;
|
||
InterfaceMap_t m_mapRegisteredInterfaces;
|
||
|
||
protected:
|
||
void OnExtensionInterfaceUpdated( char const *szInterfaceString, void *pvInterface );
|
||
|
||
public:
|
||
vgui::ILocalize * GetILocalize() { return m_exts.m_pILocalize; }
|
||
INetSupport * GetINetSupport() { return m_exts.m_pINetSupport; }
|
||
IEngineVoice * GetIEngineVoice() { return m_exts.m_pIEngineVoice; }
|
||
IVEngineClient * GetIVEngineClient() { return m_exts.m_pIVEngineClient; }
|
||
IVEngineServer * GetIVEngineServer() { return m_exts.m_pIVEngineServer; }
|
||
IServerGameDLL * GetIServerGameDLL() { return m_exts.m_pIServerGameDLL; }
|
||
IGameEventManager2 * GetIGameEventManager2() { return m_exts.m_pIGameEventManager2; }
|
||
IBaseClientDLL * GetIBaseClientDLL() { return m_exts.m_pIBaseClientDLL; }
|
||
#ifdef _X360
|
||
IXboxSystem * GetIXboxSystem() { return m_exts.m_pIXboxSystem; }
|
||
IXOnline * GetIXOnline() { return m_exts.m_pIXOnline; }
|
||
#endif
|
||
|
||
protected:
|
||
// Known extension interfaces
|
||
struct Exts_t
|
||
{
|
||
inline Exts_t() { memset( this, 0, sizeof( *this ) ); }
|
||
|
||
vgui::ILocalize *m_pILocalize;
|
||
INetSupport *m_pINetSupport;
|
||
IEngineVoice *m_pIEngineVoice;
|
||
IVEngineClient *m_pIVEngineClient;
|
||
IVEngineServer *m_pIVEngineServer;
|
||
IServerGameDLL *m_pIServerGameDLL;
|
||
IGameEventManager2 *m_pIGameEventManager2;
|
||
IBaseClientDLL *m_pIBaseClientDLL;
|
||
#ifdef _X360
|
||
IXboxSystem *m_pIXboxSystem;
|
||
IXOnline *m_pIXOnline;
|
||
#endif
|
||
}
|
||
m_exts;
|
||
};
|
||
|
||
// Match title singleton
|
||
extern CMatchExtensions *g_pMatchExtensions;
|
||
|
||
#endif // MM_EXTENSIONS_H
|