Committed new API

--HG--
extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%40142
This commit is contained in:
David Anderson 2005-10-21 07:18:53 +00:00
parent 1fb61175c1
commit e24876a8cd
3 changed files with 60 additions and 3 deletions

View File

@ -20,6 +20,20 @@
using namespace SourceMM;
#define ITER_PLEVENT(evn, plid) \
CPluginManager::CPlugin *_Xpl; \
SourceHook::List<IMetamodListener *>::iterator event; \
IMetamodListener *api; \
for (PluginIter iter = g_PluginMngr._begin(); iter != g_PluginMngr._end(); iter++) { \
_Xpl = (*iter); \
if (_Xpl->m_Id == plid) \
continue; \
for (event=_Xpl->m_Events.begin(); event!=_Xpl->m_Events.end(); event++) { \
api = (*event); \
api->evn(plid); \
} \
}
CPluginManager g_PluginMngr;
CPluginManager::CPluginManager()
@ -70,6 +84,8 @@ PluginId CPluginManager::Load(const char *file, PluginId source, bool &already,
if (!pl)
return Pl_BadLoad;
ITER_PLEVENT(OnPluginLoad, pl->m_Id);
return pl->m_Id;
}
@ -113,7 +129,14 @@ bool CPluginManager::Pause(PluginId id, char *error, size_t maxlen)
return false;
}
return _Pause(pl, error, maxlen);
bool ret;
if ( (ret=_Pause(pl, error, maxlen)) == true )
{
ITER_PLEVENT(OnPluginPause, pl->m_Id);
}
return ret;
}
bool CPluginManager::Unpause(PluginId id, char *error, size_t maxlen)
@ -126,7 +149,14 @@ bool CPluginManager::Unpause(PluginId id, char *error, size_t maxlen)
return false;
}
return _Unpause(pl, error, maxlen);
bool ret;
if ( (ret=_Unpause(pl, error, maxlen)) == true )
{
ITER_PLEVENT(OnPluginUnpause, pl->m_Id);
}
return ret;
}
bool CPluginManager::Unload(PluginId id, bool force, char *error, size_t maxlen)
@ -139,7 +169,14 @@ bool CPluginManager::Unload(PluginId id, bool force, char *error, size_t maxlen)
return false;
}
return _Unload(pl, force, error, maxlen);
bool ret;
PluginId old_id = pl->m_Id;
if ( (ret=_Unload(pl, force, error, maxlen)) == true )
{
ITER_PLEVENT(OnPluginUnload, old_id);
}
return ret;
}
bool CPluginManager::Retry(PluginId id, char *error, size_t len)

View File

@ -160,6 +160,8 @@ public:
virtual void OnLevelInit(char const *pMapName, char const *pMapEntities, char const *pOldLevel, char const *pLandmarkName, bool loadGame, bool background) { }
virtual void OnLevelShutdown() { }
virtual void *OnEngineQuery(const char *iface, int *ret)
{
if (ret)

View File

@ -68,6 +68,18 @@ void ClearGamedllList();
} \
return (orig)(iface, ret);
#define ITER_EVENT(evn, args) \
CPluginManager::CPlugin *pl; \
SourceHook::List<IMetamodListener *>::iterator event; \
IMetamodListener *api; \
for (PluginIter iter = g_PluginMngr._begin(); iter != g_PluginMngr._end(); iter++) { \
pl = (*iter); \
for (event=pl->m_Events.begin(); event!=pl->m_Events.end(); event++) { \
api = (*event); \
api->evn##args; \
} \
}
///////////////////////////////////
// Main code for HL2 Interaction //
///////////////////////////////////
@ -566,6 +578,10 @@ void LevelShutdown_handler(void)
} else {
bInFirstLevel = false;
}
ITER_EVENT(OnLevelShutdown, ());
RETURN_META(MRES_IGNORED);
}
bool LevelInit_handler(char const *pMapName, char const *pMapEntities, char const *pOldLevel, char const *pLandmarkName, bool loadGame, bool background)
@ -576,6 +592,8 @@ bool LevelInit_handler(char const *pMapName, char const *pMapEntities, char cons
LogMessage("[META] Warning: Console messages will not be redirected to rcon console.");
}
ITER_EVENT(OnLevelInit, (pMapName, pMapEntities, pOldLevel, pLandmarkName, loadGame, background));
RETURN_META_VALUE(MRES_IGNORED, false);
}