source-engine/utils/scenemanager/scenemanager.cpp
FluorescentCIAAfricanAmerican 3bf9df6b27 1
2020-04-22 12:56:21 -04:00

221 lines
4.7 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//===========================================================================//
// scenemanager.cpp : Defines the entry point for the console application.
//
#include "cbase.h"
#include "appframework/tier3app.h"
#include "workspacemanager.h"
#include "filesystem.h"
#include "FileSystem_Tools.h"
#include "cmdlib.h"
#include "vstdlib/random.h"
#include "SoundEmitterSystem/isoundemittersystembase.h"
#include "iscenemanagersound.h"
#include <vgui/ILocalize.h>
#include <vgui/IVGui.h>
#include "tier0/icommandline.h"
#include "icvar.h"
#include "vstdlib/cvar.h"
#include "mathlib/mathlib.h"
char cmdline[1024] = "";
static CUniformRandomStream g_Random;
IUniformRandomStream *random = &g_Random;
IFileSystem *filesystem = NULL;
SpewRetval_t SceneManagerSpewFunc( SpewType_t spewType, char const *pMsg )
{
switch (spewType)
{
case SPEW_ERROR:
{
MessageBox(NULL, pMsg, "FATAL ERROR", MB_OK);
}
return SPEW_ABORT;
case SPEW_WARNING:
{
Con_ColorPrintf( 255, 0, 0, pMsg );
}
break;
case SPEW_ASSERT:
{
Con_ColorPrintf( 255, 0, 0, pMsg );
}
#ifdef _DEBUG
return SPEW_DEBUGGER;
#else
return SPEW_CONTINUE;
#endif
default:
{
Con_Printf(pMsg);
}
break;
}
return SPEW_CONTINUE;
}
//-----------------------------------------------------------------------------
// The application object
//-----------------------------------------------------------------------------
class CHLSceneManagerApp : public CTier3SteamApp
{
typedef CTier3SteamApp BaseClass;
public:
// Methods of IApplication
virtual bool Create();
virtual bool PreInit();
virtual int Main();
virtual void PostShutdown();
virtual void Destroy();
private:
// Sets up the search paths
bool SetupSearchPaths();
};
bool CHLSceneManagerApp::Create()
{
SpewOutputFunc( SceneManagerSpewFunc );
AppSystemInfo_t appSystems[] =
{
{ "vgui2.dll", VGUI_IVGUI_INTERFACE_VERSION },
{ "soundemittersystem.dll", SOUNDEMITTERSYSTEM_INTERFACE_VERSION },
{ "", "" } // Required to terminate the list
};
return AddSystems( appSystems );
}
void CHLSceneManagerApp::Destroy()
{
}
//-----------------------------------------------------------------------------
// Sets up the game path
//-----------------------------------------------------------------------------
bool CHLSceneManagerApp::SetupSearchPaths()
{
if ( !BaseClass::SetupSearchPaths( NULL, false, true ) )
return false;
// Set gamedir.
Q_MakeAbsolutePath( gamedir, sizeof( gamedir ), GetGameInfoPath() );
Q_AppendSlash( gamedir, sizeof( gamedir ) );
return true;
}
//-----------------------------------------------------------------------------
// Init, shutdown
//-----------------------------------------------------------------------------
bool CHLSceneManagerApp::PreInit( )
{
MathLib_Init( 2.2f, 2.2f, 0.0f, 2.0f, false, false, false, false );
if ( !BaseClass::PreInit() )
return false;
g_pFileSystem = filesystem = g_pFullFileSystem;
if ( !g_pSoundEmitterSystem || !g_pVGuiLocalize || !g_pFileSystem )
{
Error("Unable to load required library interface!\n");
return false;
}
filesystem->SetWarningFunc( Warning );
// Add paths...
if ( !SetupSearchPaths() )
return false;
return true;
}
void CHLSceneManagerApp::PostShutdown()
{
g_pFileSystem = filesystem = NULL;
BaseClass::PostShutdown();
}
//-----------------------------------------------------------------------------
// main application
//-----------------------------------------------------------------------------
int CHLSceneManagerApp::Main()
{
g_pSoundEmitterSystem->ModInit();
sound->Init();
CWorkspaceManager *sm = new CWorkspaceManager();
bool workspace_loaded = false;
for ( int i = 1; i < CommandLine()->ParmCount(); i++ )
{
char const *argv = CommandLine()->GetParm( i );
if ( !workspace_loaded && strstr (argv, ".vsw") )
{
workspace_loaded = true;
// Strip game directory and slash
char workspace_name[ 512 ];
filesystem->FullPathToRelativePath( argv, workspace_name, sizeof( workspace_name ) );
sm->AutoLoad( workspace_name );
}
}
if ( !workspace_loaded )
{
sm->AutoLoad( NULL );
}
int retval = mx::run ();
sound->Shutdown();
g_pSoundEmitterSystem->ModShutdown();
return retval;
}
int main (int argc, char *argv[])
{
CommandLine()->CreateCmdLine( argc, argv );
CoInitialize(NULL);
// make sure, we start in the right directory
char szName[256];
strcpy (szName, mx::getApplicationPath() );
mx::init (argc, argv);
char workingdir[ 256 ];
workingdir[0] = 0;
Q_getwd( workingdir, sizeof( workingdir ) );
CHLSceneManagerApp sceneManagerApp;
CSteamApplication steamApplication( &sceneManagerApp );
int nRetVal = steamApplication.Run();
CoUninitialize();
return nRetVal;
}