You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
2.9 KiB
138 lines
2.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
// |
|
//===========================================================================// |
|
#include "cbase.h" |
|
#include "igamesystem.h" |
|
#include "toolframework/iserverenginetools.h" |
|
#include "init_factory.h" |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: This is an autogame system which is used to call back into the engine at appropriate points |
|
// so that IToolSystems can get these hooks at the correct time |
|
//----------------------------------------------------------------------------- |
|
class CToolFrameworkServer : public CAutoGameSystemPerFrame, public IToolFrameworkServer |
|
{ |
|
public: |
|
virtual bool Init(); |
|
// Level init, shutdown |
|
virtual void LevelInitPreEntity(); |
|
// entities are created / spawned / precached here |
|
virtual void LevelInitPostEntity(); |
|
virtual void LevelShutdownPreEntity(); |
|
// Entities are deleted / released here... |
|
virtual void LevelShutdownPostEntity(); |
|
// Called each frame before entities think |
|
virtual void FrameUpdatePreEntityThink(); |
|
// called after entities think |
|
virtual void FrameUpdatePostEntityThink(); |
|
virtual void PreClientUpdate(); |
|
virtual void PreSetupVisibility(); |
|
|
|
|
|
IServerEngineTools *m_pTools; |
|
}; |
|
|
|
// Singleton |
|
static CToolFrameworkServer g_ToolFrameworkServer; |
|
IToolFrameworkServer *g_pToolFrameworkServer = &g_ToolFrameworkServer; |
|
|
|
#ifndef NO_TOOLFRAMEWORK |
|
|
|
bool ToolsEnabled() |
|
{ |
|
return g_ToolFrameworkServer.m_pTools && g_ToolFrameworkServer.m_pTools->InToolMode() && !engine->IsDedicatedServer(); |
|
} |
|
|
|
#endif |
|
|
|
bool CToolFrameworkServer::Init() |
|
{ |
|
factorylist_t list; |
|
FactoryList_Retrieve( list ); |
|
|
|
// Latch onto internal interface |
|
m_pTools = ( IServerEngineTools * )list.engineFactory( VSERVERENGINETOOLS_INTERFACE_VERSION, NULL ); |
|
|
|
if ( !m_pTools && !engine->IsDedicatedServer() ) |
|
{ |
|
return false; |
|
} |
|
|
|
return true; |
|
} |
|
|
|
void CToolFrameworkServer::LevelInitPreEntity() |
|
{ |
|
if ( !m_pTools ) |
|
{ |
|
return; |
|
} |
|
m_pTools->LevelInitPreEntityAllTools(); |
|
} |
|
|
|
void CToolFrameworkServer::LevelInitPostEntity() |
|
{ |
|
if ( !m_pTools ) |
|
{ |
|
return; |
|
} |
|
m_pTools->LevelInitPostEntityAllTools(); |
|
} |
|
|
|
void CToolFrameworkServer::LevelShutdownPreEntity() |
|
{ |
|
if ( !m_pTools ) |
|
{ |
|
return; |
|
} |
|
m_pTools->LevelShutdownPreEntityAllTools(); |
|
} |
|
|
|
void CToolFrameworkServer::LevelShutdownPostEntity() |
|
{ |
|
if ( !m_pTools ) |
|
{ |
|
return; |
|
} |
|
m_pTools->LevelShutdownPostEntityAllTools(); |
|
} |
|
|
|
void CToolFrameworkServer::FrameUpdatePreEntityThink() |
|
{ |
|
if ( !m_pTools ) |
|
{ |
|
return; |
|
} |
|
m_pTools->FrameUpdatePreEntityThinkAllTools(); |
|
} |
|
|
|
void CToolFrameworkServer::FrameUpdatePostEntityThink() |
|
{ |
|
if ( !m_pTools ) |
|
{ |
|
return; |
|
} |
|
m_pTools->FrameUpdatePostEntityThinkAllTools(); |
|
} |
|
|
|
void CToolFrameworkServer::PreClientUpdate() |
|
{ |
|
if ( !m_pTools ) |
|
{ |
|
return; |
|
} |
|
m_pTools->PreClientUpdateAllTools(); |
|
} |
|
|
|
void CToolFrameworkServer::PreSetupVisibility() |
|
{ |
|
if ( !m_pTools ) |
|
{ |
|
return; |
|
} |
|
m_pTools->PreSetupVisibilityAllTools(); |
|
}
|
|
|