hl2_src-leak-2017/src/game/server/toolframework_server.cpp

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();
}