2023-05-10 00:05:38 +02:00
//=============================================================================//
//
// Purpose: IApplication methods
//
//=============================================================================//
2021-12-25 22:36:38 +01:00
# include "core/stdafx.h"
2023-05-10 00:05:38 +02:00
# include "tier0/frametask.h"
# include "tier0/commandline.h"
# include "tier1/cvar.h"
# include "vpc/interfaces.h"
# include "common/engine_launcher_api.h"
# include "pluginsystem/pluginsystem.h"
# include "pluginsystem/modsystem.h"
# include "ebisusdk/EbisuSDK.h"
# include "engine/cmodel_bsp.h"
# include "engine/sys_engine.h"
# include "engine/sys_dll2.h"
# include "engine/sdk_dll.h"
# include "engine/host_cmd.h"
# include "engine/enginetrace.h"
# ifndef CLIENT_DLL
# include "engine/server/sv_main.h"
# include "server/vengineserver_impl.h"
# include "game/server/gameinterface.h"
# endif // !CLIENT_DLL
# ifndef DEDICATED
# include "client/cdll_engine_int.h"
# include "game/client/cliententitylist.h"
# include "gameui/IConsole.h"
# include "windows/id3dx.h"
# include "windows/input.h"
# endif // !DEDICATED
# include "public/idebugoverlay.h"
# include "vstdlib/keyvaluessystem.h"
2021-12-25 22:36:38 +01:00
# include "engine/sys_dll.h"
2023-05-10 00:05:38 +02:00
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CSourceAppSystemGroup : : StaticPreInit ( CSourceAppSystemGroup * pSourceAppSystemGroup )
{
if ( pSourceAppSystemGroup - > GetCurrentStage ( ) = = CSourceAppSystemGroup : : CREATION )
{
ConVar_InitShipped ( ) ;
ConVar_PurgeShipped ( ) ;
ConCommand_StaticInit ( ) ;
ConCommand_InitShipped ( ) ;
ConCommand_PurgeShipped ( ) ;
}
return CSourceAppSystemGroup__PreInit ( pSourceAppSystemGroup ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CSourceAppSystemGroup : : StaticCreate ( CSourceAppSystemGroup * pSourceAppSystemGroup )
{
return CSourceAppSystemGroup__Create ( pSourceAppSystemGroup ) ;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
int CModAppSystemGroup : : StaticMain ( CModAppSystemGroup * pModAppSystemGroup )
{
std : : thread fixed ( & CEngineSDK : : FixedFrame , g_EngineSDK ) ;
fixed . detach ( ) ;
int nRunResult = RUN_OK ;
HEbisuSDK_Init ( ) ; // Not here in retail. We init EbisuSDK here though.
# if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) // !TODO: rebuild does not work for S1 (CModAppSystemGroup and CEngine member offsets do align with all other builds).
return CModAppSystemGroup_Main ( pModAppSystemGroup ) ;
# elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3)
g_pEngine - > SetQuitting ( IEngine : : QUIT_NOTQUITTING ) ;
if ( g_pEngine - > Load ( pModAppSystemGroup - > IsServerOnly ( ) , g_pEngineParms - > baseDirectory ) )
{
2023-09-09 15:12:58 +02:00
if ( CEngineAPI : : MainLoop ( ) )
2023-05-10 00:05:38 +02:00
{
nRunResult = RUN_RESTART ;
}
g_pEngine - > Unload ( ) ;
# ifndef CLIENT_DLL
SV_ShutdownGameDLL ( ) ;
# endif // !CLIENT_DLL
}
return nRunResult ;
# endif
}
//-----------------------------------------------------------------------------
// Purpose: Instantiate all main libraries
//-----------------------------------------------------------------------------
bool CModAppSystemGroup : : StaticCreate ( CModAppSystemGroup * pModAppSystemGroup )
{
# ifdef DEDICATED
pModAppSystemGroup - > SetServerOnly ( ) ;
* m_bIsDedicated = true ;
# endif // DEDICATED
2023-08-22 01:11:49 +02:00
EXPOSE_INTERFACE_FN ( ( InstantiateInterfaceFn ) PluginSystem , CPluginSystem , INTERFACEVERSION_PLUGINSYSTEM ) ;
EXPOSE_INTERFACE_FN ( ( InstantiateInterfaceFn ) KeyValuesSystem , CKeyValuesSystem , KEYVALUESSYSTEM_INTERFACE_VERSION ) ;
2023-05-10 00:05:38 +02:00
2023-07-20 22:00:00 +02:00
InitPluginSystem ( pModAppSystemGroup ) ;
CALL_PLUGIN_CALLBACKS ( g_pPluginSystem - > GetCreateCallbacks ( ) , pModAppSystemGroup ) ;
2023-05-10 00:05:38 +02:00
g_pModSystem - > Init ( ) ;
2023-08-22 01:11:49 +02:00
g_pDebugOverlay = ( CIVDebugOverlay * ) g_pFactorySystem - > GetFactory ( VDEBUG_OVERLAY_INTERFACE_VERSION ) ;
2023-05-10 00:05:38 +02:00
# ifndef CLIENT_DLL
2023-08-22 01:11:49 +02:00
g_pServerGameDLL = ( CServerGameDLL * ) g_pFactorySystem - > GetFactory ( INTERFACEVERSION_SERVERGAMEDLL ) ;
g_pServerGameClients = ( CServerGameClients * ) g_pFactorySystem - > GetFactory ( INTERFACEVERSION_SERVERGAMECLIENTS_NEW ) ;
2023-05-10 00:05:38 +02:00
if ( ! g_pServerGameClients )
2023-08-22 01:11:49 +02:00
g_pServerGameClients = ( CServerGameClients * ) g_pFactorySystem - > GetFactory ( INTERFACEVERSION_SERVERGAMECLIENTS ) ;
g_pServerGameEntities = ( CServerGameEnts * ) g_pFactorySystem - > GetFactory ( INTERFACEVERSION_SERVERGAMEENTS ) ;
2023-05-10 00:05:38 +02:00
# endif // !CLIENT_DLL
# ifndef DEDICATED
2023-08-22 01:11:49 +02:00
g_pClientEntityList = ( CClientEntityList * ) g_pFactorySystem - > GetFactory ( VCLIENTENTITYLIST_INTERFACE_VERSION ) ;
g_pEngineTraceClient = ( CEngineTraceClient * ) g_pFactorySystem - > GetFactory ( INTERFACEVERSION_ENGINETRACE_CLIENT ) ;
2023-05-10 00:05:38 +02:00
g_pImGuiConfig - > Load ( ) ; // Load ImGui configs.
DirectX_Init ( ) ;
# endif // !DEDICATED
if ( CommandLine ( ) - > CheckParm ( " -devsdk " ) )
{
cv - > EnableDevCvars ( ) ;
}
g_FrameTasks . push_back ( std : : move ( g_TaskScheduler ) ) ;
g_bAppSystemInit = true ;
return CModAppSystemGroup_Create ( pModAppSystemGroup ) ;
}
//-----------------------------------------------------------------------------
// Purpose: Initialize plugin system
//-----------------------------------------------------------------------------
void CModAppSystemGroup : : InitPluginSystem ( CModAppSystemGroup * pModAppSystemGroup )
{
2023-09-17 20:33:57 +02:00
g_pPluginSystem - > Init ( ) ;
for ( auto & it : g_pPluginSystem - > GetInstances ( ) )
2023-05-10 00:05:38 +02:00
{
2023-09-17 20:33:57 +02:00
if ( g_pPluginSystem - > LoadInstance ( it ) )
2023-08-22 19:32:21 +02:00
Msg ( eDLL_T : : ENGINE , " Loaded plugin: '%s' \n " , it . m_Name . String ( ) ) ;
2023-05-10 00:05:38 +02:00
else
2023-08-22 19:32:21 +02:00
Warning ( eDLL_T : : ENGINE , " Failed loading plugin: '%s' \n " , it . m_Name . String ( ) ) ;
2023-05-10 00:05:38 +02:00
}
}
2021-12-25 22:36:38 +01:00
//-----------------------------------------------------------------------------
// Sys_Error_Internal
//
//-----------------------------------------------------------------------------
int HSys_Error_Internal ( char * fmt , va_list args )
{
2023-05-22 23:17:50 +02:00
char buffer [ 2048 ] ;
2023-07-22 21:14:04 +02:00
Error ( eDLL_T : : ENGINE , NO_ERROR , " _______________________________________________________________ \n " ) ;
Error ( eDLL_T : : ENGINE , NO_ERROR , " ] ENGINE ERROR ################################################ \n " ) ;
2023-05-22 23:17:50 +02:00
int nLen = vsprintf ( buffer , fmt , args ) ;
bool shouldNewline = true ;
if ( nLen > 0 )
shouldNewline = buffer [ nLen - 1 ] ! = ' \n ' ;
2023-07-22 21:14:04 +02:00
Error ( eDLL_T : : ENGINE , NO_ERROR , shouldNewline ? " %s \n " : " %s " , buffer ) ;
2021-12-25 22:36:38 +01:00
///////////////////////////////////////////////////////////////////////////
return Sys_Error_Internal ( fmt , args ) ;
}
2023-01-25 02:26:52 +01:00
void VSys_Dll : : Attach ( ) const
2021-12-25 22:36:38 +01:00
{
2023-05-10 00:05:38 +02:00
DetourAttach ( ( LPVOID * ) & CSourceAppSystemGroup__PreInit , & CSourceAppSystemGroup : : StaticPreInit ) ;
DetourAttach ( ( LPVOID * ) & CSourceAppSystemGroup__Create , & CSourceAppSystemGroup : : StaticCreate ) ;
DetourAttach ( ( LPVOID * ) & CModAppSystemGroup_Main , & CModAppSystemGroup : : StaticMain ) ;
DetourAttach ( ( LPVOID * ) & CModAppSystemGroup_Create , & CModAppSystemGroup : : StaticCreate ) ;
2023-01-25 02:26:52 +01:00
DetourAttach ( & Sys_Error_Internal , & HSys_Error_Internal ) ;
2021-12-25 22:36:38 +01:00
}
2023-01-25 02:26:52 +01:00
void VSys_Dll : : Detach ( ) const
2021-12-25 22:36:38 +01:00
{
2023-05-10 00:05:38 +02:00
DetourDetach ( ( LPVOID * ) & CSourceAppSystemGroup__PreInit , & CSourceAppSystemGroup : : StaticPreInit ) ;
DetourDetach ( ( LPVOID * ) & CSourceAppSystemGroup__Create , & CSourceAppSystemGroup : : StaticCreate ) ;
DetourDetach ( ( LPVOID * ) & CModAppSystemGroup_Main , & CModAppSystemGroup : : StaticMain ) ;
DetourDetach ( ( LPVOID * ) & CModAppSystemGroup_Create , & CModAppSystemGroup : : StaticCreate ) ;
2023-01-25 02:26:52 +01:00
DetourDetach ( & Sys_Error_Internal , & HSys_Error_Internal ) ;
2021-12-25 22:36:38 +01:00
}