mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 12:06:07 +08:00
Added original SDK code for Alien Swarm.
This commit is contained in:
228
public/appframework/AppFramework.h
Normal file
228
public/appframework/AppFramework.h
Normal file
@ -0,0 +1,228 @@
|
||||
//===== Copyright <20> 1996-2005, 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"
|
||||
#include "ilaunchabledll.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
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// This assumes you've used one of the
|
||||
#define DEFINE_LAUNCHABLE_DLL_STEAM_APP() \
|
||||
class CAppLaunchableDLL : public ILaunchableDLL \
|
||||
{ \
|
||||
public: \
|
||||
virtual int main( int argc, char **argv ) \
|
||||
{ \
|
||||
return AppMain( argc, argv, &__s_SteamApplicationObject ); \
|
||||
} \
|
||||
}; \
|
||||
static CAppLaunchableDLL __g_AppLaunchableDLL; \
|
||||
EXPOSE_SINGLE_INTERFACE_GLOBALVAR( CAppLaunchableDLL, ILaunchableDLL, LAUNCHABLE_DLL_INTERFACE_VERSION, __g_AppLaunchableDLL );
|
||||
|
||||
|
||||
#if !defined( _X360 )
|
||||
#if 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( PLATFORM_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
|
||||
#define DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \
|
||||
int __stdcall WinMain( struct HINSTANCE__* hInstance, struct HINSTANCE__* hPrevInstance, NULLTERMINATED char *lpCmdLine, int nCmdShow ) \
|
||||
{ \
|
||||
return AppMain( hInstance, hPrevInstance, lpCmdLine, nCmdShow, &_globalVarName ); \
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#define DEFINE_WINDOWED_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \
|
||||
DLL_EXPORT int AppMain360( struct HINSTANCE__* hInstance, struct HINSTANCE__* hPrevInstance, NULLTERMINATED char *lpCmdLine, int nCmdShow ) \
|
||||
{ \
|
||||
return AppMain( hInstance, hPrevInstance, lpCmdLine, nCmdShow, &_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 ) \
|
||||
DLL_EXPORT int AppMain360( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) \
|
||||
{ \
|
||||
return AppMain( hInstance, hPrevInstance, lpCmdLine, nCmdShow, &_globalVarName ); \
|
||||
}
|
||||
#endif
|
||||
|
||||
#define DEFINE_BINLAUNCHABLE_APPLICATION_OBJECT_GLOBALVAR( _globalVarName ) \
|
||||
class CApplicationDLL : public ILaunchableDLL \
|
||||
{ \
|
||||
public: \
|
||||
virtual int main( int argc, char **argv ) \
|
||||
{ \
|
||||
return AppMain( argc, argv, &_globalVarName ); \
|
||||
} \
|
||||
}; \
|
||||
EXPOSE_SINGLE_INTERFACE( CApplicationDLL, ILaunchableDLL, LAUNCHABLE_DLL_INTERFACE_VERSION )
|
||||
|
||||
#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 )
|
||||
|
||||
#define DEFINE_BINLAUNCHABLE_APPLICATION_OBJECT( _className ) \
|
||||
static _className __s_ApplicationObject; \
|
||||
DEFINE_BINLAUNCHABLE_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();
|
||||
|
||||
public:
|
||||
// Here's a hook to override the filesystem DLL that it tries to load.
|
||||
// By default, it uses FileSystem_GetFileSystemDLLName to figure this out.
|
||||
virtual bool GetFileSystemDLLName( char *pOut, int nMaxBytes, bool &bIsSteam );
|
||||
|
||||
protected:
|
||||
IFileSystem *m_pFileSystem;
|
||||
CSteamAppSystemGroup *m_pChildAppSystemGroup;
|
||||
bool m_bSteam;
|
||||
};
|
||||
|
||||
|
||||
class CBinLaunchableSteamApp : public CSteamApplication
|
||||
{
|
||||
public:
|
||||
CBinLaunchableSteamApp( CSteamAppSystemGroup *pAppSystemGroup ) : CSteamApplication( pAppSystemGroup )
|
||||
{
|
||||
}
|
||||
|
||||
virtual bool GetFileSystemDLLName( char *pOut, int nMaxChars, bool &bIsSteam )
|
||||
{
|
||||
// Our path should already include game\bin, so just use the filename directly
|
||||
// and don't try to figure out an absolute path to it as CSteamApplication does.
|
||||
V_strncpy( pOut, "filesystem_stdio", nMaxChars );
|
||||
bIsSteam = false;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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 )
|
||||
|
||||
#define DEFINE_BINLAUNCHABLE_STEAM_APPLICATION_OBJECT_GLOBALVAR( _className, _varName ) \
|
||||
static CBinLaunchableSteamApp __s_SteamApplicationObject( &_varName ); \
|
||||
DEFINE_BINLAUNCHABLE_APPLICATION_OBJECT_GLOBALVAR( __s_SteamApplicationObject )
|
||||
|
||||
#define DEFINE_BINLAUNCHABLE_STEAM_APPLICATION_OBJECT( _className ) \
|
||||
static _className __s_ApplicationObject; \
|
||||
static CBinLaunchableSteamApp __s_SteamApplicationObject( &__s_ApplicationObject ); \
|
||||
DEFINE_BINLAUNCHABLE_APPLICATION_OBJECT_GLOBALVAR( __s_SteamApplicationObject )
|
||||
|
||||
|
||||
// This defines your steam application object and ties it to your appsystemgroup.
|
||||
// This does NOT hookup its AppMain to get called. You'll have to call that from startup code
|
||||
// or use something like DEFINE_LAUNCHABLE_DLL_STEAM_APP() to call it.
|
||||
//
|
||||
// _steamApplicationClass derives from CSteamApplication.
|
||||
// _appClass derives from CAppSystemGroup (.. can derive from - or be - CTier2SteamApp for example).
|
||||
//
|
||||
#define DEFINE_CUSTOM_STEAM_APPLICATION_OBJECT( _steamApplicationClassName, _appClassName ) \
|
||||
static _appClassName __s_ApplicationObject; \
|
||||
static _steamApplicationClassName __s_SteamApplicationObject( &__s_ApplicationObject );
|
||||
|
||||
#endif // APPFRAMEWORK_H
|
Reference in New Issue
Block a user