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.
158 lines
6.0 KiB
158 lines
6.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: An application framework |
|
// |
|
// $Revision: $ |
|
// $NoKeywords: $ |
|
//===========================================================================// |
|
|
|
#ifndef APPFRAMEWORK_H |
|
#define APPFRAMEWORK_H |
|
|
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "appframework/IAppSystemGroup.h" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Gets the application instance.. |
|
//----------------------------------------------------------------------------- |
|
void *GetAppInstance(); |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Sets the application instance, should only be used if you're not calling AppMain. |
|
//----------------------------------------------------------------------------- |
|
void SetAppInstance( void* hInstance ); |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Main entry point for the application |
|
//----------------------------------------------------------------------------- |
|
int AppMain( void* hInstance, void* hPrevInstance, const char* lpCmdLine, int nCmdShow, CAppSystemGroup *pAppSystemGroup ); |
|
int AppMain( int argc, char **argv, CAppSystemGroup *pAppSystemGroup ); |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Used to startup/shutdown the application |
|
//----------------------------------------------------------------------------- |
|
int AppStartup( void* hInstance, void* hPrevInstance, const char* lpCmdLine, int nCmdShow, CAppSystemGroup *pAppSystemGroup ); |
|
int AppStartup( int argc, char **argv, CAppSystemGroup *pAppSystemGroup ); |
|
void AppShutdown( CAppSystemGroup *pAppSystemGroup ); |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Macros to create singleton application objects for windowed + console apps |
|
//----------------------------------------------------------------------------- |
|
#if !defined( _X360 ) |
|
|
|
#ifdef WIN32 |
|
#define DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \ |
|
int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) \ |
|
{ \ |
|
return AppMain( hInstance, hPrevInstance, lpCmdLine, nCmdShow, &_globalVarName ); \ |
|
} |
|
#elif defined( OSX ) |
|
#define DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \ |
|
int main( int argc, char **argv ) \ |
|
{ \ |
|
extern int ValveCocoaMain( int argc, char **argv, CAppSystemGroup *pAppSystemGroup ); \ |
|
return ValveCocoaMain( argc, argv, &_globalVarName ); \ |
|
} |
|
#elif defined( LINUX ) |
|
#define DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \ |
|
int main( int argc, char **argv ) \ |
|
{ \ |
|
extern int ValveLinuxWindowedMain( int argc, char **argv, CAppSystemGroup *pAppSystemGroup ); \ |
|
return ValveLinuxWindowedMain( argc, argv, &_globalVarName ); \ |
|
} |
|
#else |
|
#error |
|
#endif |
|
|
|
#else |
|
#define DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \ |
|
void __cdecl main() \ |
|
{ \ |
|
AppMain( (HINSTANCE)1, (HINSTANCE)0, NULL, 0, &_globalVarName ); \ |
|
} |
|
#endif |
|
|
|
#if !defined( _X360 ) |
|
#define DEFINE_CONSOLE_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \ |
|
int main( int argc, char **argv ) \ |
|
{ \ |
|
return AppMain( argc, argv, &_globalVarName ); \ |
|
} |
|
#else |
|
#define DEFINE_CONSOLE_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \ |
|
void __cdecl main() \ |
|
{ \ |
|
AppMain( 0, (char**)NULL, &_globalVarName ); \ |
|
} |
|
#endif |
|
|
|
#define DEFINE_WINDOWED_APPLICATION_OBJECT( _className ) \ |
|
static _className __s_ApplicationObject; \ |
|
DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( __s_ApplicationObject ) |
|
|
|
#define DEFINE_CONSOLE_APPLICATION_OBJECT( _className ) \ |
|
static _className __s_ApplicationObject; \ |
|
DEFINE_CONSOLE_APPLICATION_OBJECT_GLOBALVAR( __s_ApplicationObject ) |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// This class is a helper class used for steam-based applications. |
|
// It loads up the file system in preparation for using it to load other |
|
// required modules from steam. |
|
//----------------------------------------------------------------------------- |
|
class CSteamApplication : public CAppSystemGroup |
|
{ |
|
typedef CAppSystemGroup BaseClass; |
|
|
|
public: |
|
CSteamApplication( CSteamAppSystemGroup *pAppSystemGroup ); |
|
|
|
// Implementation of IAppSystemGroup |
|
virtual bool Create( ); |
|
virtual bool PreInit( ); |
|
virtual int Main( ); |
|
virtual void PostShutdown(); |
|
virtual void Destroy(); |
|
|
|
// Use this version in cases where you can't control the main loop and |
|
// expect to be ticked |
|
virtual int Startup(); |
|
virtual void Shutdown(); |
|
|
|
protected: |
|
IFileSystem *m_pFileSystem; |
|
CSteamAppSystemGroup *m_pChildAppSystemGroup; |
|
bool m_bSteam; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Macros to help create singleton application objects for windowed + console steam apps |
|
//----------------------------------------------------------------------------- |
|
#define DEFINE_WINDOWED_STEAM_APPLICATION_OBJECT_GLOBALVAR( _className, _varName ) \ |
|
static CSteamApplication __s_SteamApplicationObject( &_varName ); \ |
|
DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( __s_SteamApplicationObject ) |
|
|
|
#define DEFINE_WINDOWED_STEAM_APPLICATION_OBJECT( _className ) \ |
|
static _className __s_ApplicationObject; \ |
|
static CSteamApplication __s_SteamApplicationObject( &__s_ApplicationObject ); \ |
|
DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( __s_SteamApplicationObject ) |
|
|
|
#define DEFINE_CONSOLE_STEAM_APPLICATION_OBJECT_GLOBALVAR( _className, _varName ) \ |
|
static CSteamApplication __s_SteamApplicationObject( &_varName ); \ |
|
DEFINE_CONSOLE_APPLICATION_OBJECT_GLOBALVAR( __s_SteamApplicationObject ) |
|
|
|
#define DEFINE_CONSOLE_STEAM_APPLICATION_OBJECT( _className ) \ |
|
static _className __s_ApplicationObject; \ |
|
static CSteamApplication __s_SteamApplicationObject( &__s_ApplicationObject ); \ |
|
DEFINE_CONSOLE_APPLICATION_OBJECT_GLOBALVAR( __s_SteamApplicationObject ) |
|
|
|
#endif // APPFRAMEWORK_H
|
|
|