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.
167 lines
4.0 KiB
167 lines
4.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// The copyright to the contents herein is the property of Valve, L.L.C. |
|
// The contents may be used and/or copied only with the written permission of |
|
// Valve, L.L.C., or in accordance with the terms and conditions stipulated in |
|
// the agreement/contract under which the contents have been supplied. |
|
// |
|
// $Header: $ |
|
// $NoKeywords: $ |
|
// |
|
// An RTS! |
|
//============================================================================= |
|
|
|
#include "legion.h" |
|
#include <windows.h> |
|
#include "inputsystem/iinputsystem.h" |
|
#include "networksystem/inetworksystem.h" |
|
#include "filesystem.h" |
|
#include "materialsystem/imaterialsystem.h" |
|
#include "vgui/IVGui.h" |
|
#include "vgui/ISurface.h" |
|
#include "VGuiMatSurface/IMatSystemSurface.h" |
|
#include "vgui_controls/controls.h" |
|
#include "vgui/ILocalize.h" |
|
#include "vgui_controls/AnimationController.h" |
|
#include "gamemanager.h" |
|
#include "menumanager.h" |
|
#include "physicsmanager.h" |
|
#include "rendermanager.h" |
|
#include "uimanager.h" |
|
#include "inputmanager.h" |
|
#include "networkmanager.h" |
|
#include "worldmanager.h" |
|
#include "tier3/tier3.h" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Warning/Msg call back through this API |
|
// Input : type - |
|
// *pMsg - |
|
// Output : SpewRetval_t |
|
//----------------------------------------------------------------------------- |
|
SpewRetval_t SpewFunc( SpewType_t type, char const *pMsg ) |
|
{ |
|
OutputDebugString( pMsg ); |
|
if ( type == SPEW_ASSERT ) |
|
{ |
|
DebuggerBreak(); |
|
} |
|
return SPEW_CONTINUE; |
|
} |
|
|
|
|
|
static CLegionApp s_LegionApp; |
|
extern CLegionApp *g_pApp = &s_LegionApp; |
|
DEFINE_WINDOWED_STEAM_APPLICATION_OBJECT_GLOBALVAR( CLegionApp, s_LegionApp ); |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Create all singleton systems |
|
//----------------------------------------------------------------------------- |
|
bool CLegionApp::Create() |
|
{ |
|
SpewOutputFunc( SpewFunc ); |
|
|
|
// FIXME: Put this into tier1librariesconnect |
|
MathLib_Init( 2.2f, 2.2f, 0.0f, 2.0f, false ); |
|
|
|
if ( !BaseClass::Create() ) |
|
return false; |
|
|
|
AppSystemInfo_t appSystems[] = |
|
{ |
|
{ "networksystem.dll", NETWORKSYSTEM_INTERFACE_VERSION }, |
|
{ "", "" } // Required to terminate the list |
|
}; |
|
|
|
return AddSystems( appSystems ); |
|
} |
|
|
|
bool CLegionApp::PreInit( ) |
|
{ |
|
if ( !BaseClass::PreInit() ) |
|
return false; |
|
|
|
if ( !g_pInputSystem || !g_pFullFileSystem || !g_pNetworkSystem || !g_pMaterialSystem || !g_pVGui || !g_pVGuiSurface || !g_pMatSystemSurface ) |
|
{ |
|
Warning( "Legion is missing a required interface!\n" ); |
|
return false; |
|
} |
|
return true; |
|
} |
|
|
|
|
|
void CLegionApp::PostShutdown() |
|
{ |
|
BaseClass::PostShutdown(); |
|
} |
|
|
|
|
|
bool CLegionApp::RegisterConCommandBase( ConCommandBase *pCommand ) |
|
{ |
|
// Mark for easy removal |
|
pCommand->AddFlags( FCVAR_CLIENTDLL ); |
|
pCommand->SetNext( 0 ); |
|
|
|
// Link to variable list |
|
g_pCVar->RegisterConCommandBase( pCommand ); |
|
return true; |
|
} |
|
|
|
void CLegionApp::UnregisterConCommandBase( ConCommandBase *pCommand ) |
|
{ |
|
// Unlink from variable list |
|
g_pCVar->UnlinkVariable( pCommand ); |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// main application |
|
//----------------------------------------------------------------------------- |
|
int CLegionApp::Main() |
|
{ |
|
if (!SetVideoMode()) |
|
return 0; |
|
|
|
ConCommandBaseMgr::OneTimeInit( this ); |
|
|
|
g_pMaterialSystem->ModInit(); |
|
|
|
// World database |
|
IGameManager::Add( g_pWorldManager ); |
|
|
|
// Output |
|
IGameManager::Add( g_pRenderManager ); |
|
|
|
// Input |
|
IGameManager::Add( g_pNetworkManager ); |
|
IGameManager::Add( g_pInputManager ); |
|
IGameManager::Add( g_pMenuManager ); |
|
IGameManager::Add( g_pUIManager ); |
|
|
|
// Simulation |
|
IGameManager::Add( g_pPhysicsManager ); |
|
|
|
// Init the game managers |
|
if ( !IGameManager::InitAllManagers() ) |
|
return 0; |
|
|
|
// First menu to start on |
|
g_pMenuManager->PushMenu( "MainMenu" ); |
|
|
|
// This is the main game loop |
|
IGameManager::Start(); |
|
|
|
// Shut down game systems |
|
IGameManager::ShutdownAllManagers(); |
|
|
|
g_pMaterialSystem->ModShutdown(); |
|
|
|
g_pCVar->UnlinkVariables( FCVAR_CLIENTDLL ); |
|
|
|
return 1; |
|
} |
|
|
|
|
|
|
|
|