diff options
Diffstat (limited to 'appframework/WinApp.cpp')
| -rw-r--r-- | appframework/WinApp.cpp | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/appframework/WinApp.cpp b/appframework/WinApp.cpp new file mode 100644 index 0000000..937a9f5 --- /dev/null +++ b/appframework/WinApp.cpp @@ -0,0 +1,248 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: An application framework +// +//=============================================================================// + +#ifdef POSIX +#error +#else +#if defined( _WIN32 ) && !defined( _X360 ) +#include <windows.h> +#endif +#include "appframework/appframework.h" +#include "tier0/dbg.h" +#include "tier0/icommandline.h" +#include "interface.h" +#include "filesystem.h" +#include "appframework/iappsystemgroup.h" +#include "filesystem_init.h" +#include "vstdlib/cvar.h" +#include "xbox/xbox_console.h" + +// NOTE: This has to be the last file included! +#include "tier0/memdbgon.h" + + +//----------------------------------------------------------------------------- +// Globals... +//----------------------------------------------------------------------------- +HINSTANCE s_HInstance; + +//static CSimpleWindowsLoggingListener s_SimpleWindowsLoggingListener; +//static CSimpleLoggingListener s_SimpleLoggingListener; +//ILoggingListener *g_pDefaultLoggingListener = &s_SimpleLoggingListener; + +//----------------------------------------------------------------------------- +// HACK: Since I don't want to refit vgui yet... +//----------------------------------------------------------------------------- +void *GetAppInstance() +{ + return s_HInstance; +} + + +//----------------------------------------------------------------------------- +// Sets the application instance, should only be used if you're not calling AppMain. +//----------------------------------------------------------------------------- +void SetAppInstance( void* hInstance ) +{ + s_HInstance = (HINSTANCE)hInstance; +} + +//----------------------------------------------------------------------------- +// Specific 360 environment setup. +//----------------------------------------------------------------------------- +#if defined( _X360 ) +bool SetupEnvironment360() +{ + CommandLine()->CreateCmdLine( GetCommandLine() ); + + if ( !CommandLine()->FindParm( "-game" ) && !CommandLine()->FindParm( "-vproject" ) ) + { + // add the default game name due to lack of vproject environment + CommandLine()->AppendParm( "-game", "hl2" ); + } + + // success + return true; +} +#endif + +//----------------------------------------------------------------------------- +// Version of AppMain used by windows applications +//----------------------------------------------------------------------------- +int AppMain( void* hInstance, void* hPrevInstance, const char* lpCmdLine, int nCmdShow, CAppSystemGroup *pAppSystemGroup ) +{ + Assert( pAppSystemGroup ); + +// g_pDefaultLoggingListener = &s_SimpleWindowsLoggingListener; + s_HInstance = (HINSTANCE)hInstance; +#if !defined( _X360 ) + CommandLine()->CreateCmdLine( ::GetCommandLine() ); +#else + SetupEnvironment360(); +#endif + + return pAppSystemGroup->Run(); +} + +//----------------------------------------------------------------------------- +// Version of AppMain used by console applications +//----------------------------------------------------------------------------- +int AppMain( int argc, char **argv, CAppSystemGroup *pAppSystemGroup ) +{ + Assert( pAppSystemGroup ); + +// g_pDefaultLoggingListener = &s_SimpleLoggingListener; + s_HInstance = NULL; +#if !defined( _X360 ) + CommandLine()->CreateCmdLine( argc, argv ); +#else + SetupEnvironment360(); +#endif + + return pAppSystemGroup->Run(); +} + +//----------------------------------------------------------------------------- +// Used to startup/shutdown the application +//----------------------------------------------------------------------------- +int AppStartup( void* hInstance, void* hPrevInstance, const char* lpCmdLine, int nCmdShow, CAppSystemGroup *pAppSystemGroup ) +{ + Assert( pAppSystemGroup ); + +// g_pDefaultLoggingListener = &s_SimpleWindowsLoggingListener; + s_HInstance = (HINSTANCE)hInstance; +#if !defined( _X360 ) + CommandLine()->CreateCmdLine( ::GetCommandLine() ); +#else + SetupEnvironment360(); +#endif + + return pAppSystemGroup->Startup(); +} + +int AppStartup( int argc, char **argv, CAppSystemGroup *pAppSystemGroup ) +{ + Assert( pAppSystemGroup ); + +// g_pDefaultLoggingListener = &s_SimpleLoggingListener; + s_HInstance = NULL; +#if !defined( _X360 ) + CommandLine()->CreateCmdLine( argc, argv ); +#else + SetupEnvironment360(); +#endif + + return pAppSystemGroup->Startup(); +} + +void AppShutdown( CAppSystemGroup *pAppSystemGroup ) +{ + Assert( pAppSystemGroup ); + pAppSystemGroup->Shutdown(); +} + + +//----------------------------------------------------------------------------- +// +// Default implementation of an application meant to be run using Steam +// +//----------------------------------------------------------------------------- + + +//----------------------------------------------------------------------------- +// Constructor +//----------------------------------------------------------------------------- +CSteamApplication::CSteamApplication( CSteamAppSystemGroup *pAppSystemGroup ) +{ + m_pChildAppSystemGroup = pAppSystemGroup; + m_pFileSystem = NULL; + m_bSteam = false; +} + +//----------------------------------------------------------------------------- +// Create necessary interfaces +//----------------------------------------------------------------------------- +bool CSteamApplication::Create() +{ + FileSystem_SetErrorMode( FS_ERRORMODE_AUTO ); + + char pFileSystemDLL[MAX_PATH]; + if ( FileSystem_GetFileSystemDLLName( pFileSystemDLL, MAX_PATH, m_bSteam ) != FS_OK ) + return false; + + // Add in the cvar factory + AppModule_t cvarModule = LoadModule( VStdLib_GetICVarFactory() ); + AddSystem( cvarModule, CVAR_INTERFACE_VERSION ); + + AppModule_t fileSystemModule = LoadModule( pFileSystemDLL ); + m_pFileSystem = (IFileSystem*)AddSystem( fileSystemModule, FILESYSTEM_INTERFACE_VERSION ); + if ( !m_pFileSystem ) + { + Error( "Unable to load %s", pFileSystemDLL ); + return false; + } + + return true; +} + +//----------------------------------------------------------------------------- +// The file system pointer is invalid at this point +//----------------------------------------------------------------------------- +void CSteamApplication::Destroy() +{ + m_pFileSystem = NULL; +} + +//----------------------------------------------------------------------------- +// Pre-init, shutdown +//----------------------------------------------------------------------------- +bool CSteamApplication::PreInit() +{ + return true; +} + +void CSteamApplication::PostShutdown() +{ +} + +//----------------------------------------------------------------------------- +// Run steam main loop +//----------------------------------------------------------------------------- +int CSteamApplication::Main() +{ + // Now that Steam is loaded, we can load up main libraries through steam + if ( FileSystem_SetBasePaths( m_pFileSystem ) != FS_OK ) + return 0; + + m_pChildAppSystemGroup->Setup( m_pFileSystem, this ); + return m_pChildAppSystemGroup->Run(); +} + +//----------------------------------------------------------------------------- +// Use this version in cases where you can't control the main loop and +// expect to be ticked +//----------------------------------------------------------------------------- +int CSteamApplication::Startup() +{ + int nRetVal = BaseClass::Startup(); + if ( GetErrorStage() != NONE ) + return nRetVal; + + if ( FileSystem_SetBasePaths( m_pFileSystem ) != FS_OK ) + return 0; + + // Now that Steam is loaded, we can load up main libraries through steam + m_pChildAppSystemGroup->Setup( m_pFileSystem, this ); + return m_pChildAppSystemGroup->Startup(); +} + +void CSteamApplication::Shutdown() +{ + m_pChildAppSystemGroup->Shutdown(); + BaseClass::Shutdown(); +} + +#endif |