diff options
Diffstat (limited to 'utils/scenemanager/scenemanager.cpp')
| -rw-r--r-- | utils/scenemanager/scenemanager.cpp | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/utils/scenemanager/scenemanager.cpp b/utils/scenemanager/scenemanager.cpp new file mode 100644 index 0000000..7bf42c8 --- /dev/null +++ b/utils/scenemanager/scenemanager.cpp @@ -0,0 +1,220 @@ +//========= 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; +} |