155 lines
6.5 KiB
C++
155 lines
6.5 KiB
C++
//========= 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
|