139 lines
2.9 KiB
C++
139 lines
2.9 KiB
C++
|
//========= 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();
|
||
|
}
|