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.
220 lines
4.7 KiB
220 lines
4.7 KiB
//========= 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; |
|
}
|
|
|