mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 14:46:53 +00:00
221 lines
4.7 KiB
C++
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;
|
|
}
|