summaryrefslogtreecommitdiff
path: root/app/legion/legion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'app/legion/legion.cpp')
-rw-r--r--app/legion/legion.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/app/legion/legion.cpp b/app/legion/legion.cpp
new file mode 100644
index 0000000..33a6c09
--- /dev/null
+++ b/app/legion/legion.cpp
@@ -0,0 +1,167 @@
+//========= 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;
+}
+
+
+