summaryrefslogtreecommitdiff
path: root/appframework/WinApp.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /appframework/WinApp.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'appframework/WinApp.cpp')
-rw-r--r--appframework/WinApp.cpp248
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