Don't create a new class just to register a screen.
This commit is contained in:
@@ -12,15 +12,11 @@
|
||||
class InputEventPlus;
|
||||
class Screen;
|
||||
typedef Screen* (*CreateScreenFn)(const RString& sClassName);
|
||||
void RegisterScreenClass( const RString& sClassName, CreateScreenFn pfn );
|
||||
|
||||
// Each Screen class should have a REGISTER_SCREEN_CLASS in its CPP file.
|
||||
struct RegisterScreenClass { RegisterScreenClass( const RString &sClassName, CreateScreenFn pfn ); };
|
||||
#define REGISTER_SCREEN_CLASS( className ) \
|
||||
static Screen* Create##className( const RString &sName ) { LuaThreadVariable var( "LoadingScreen", sName ); Screen *pRet = new className; pRet->SetName( sName ); Screen::InitScreen( pRet ); return pRet; } \
|
||||
struct Register##className { \
|
||||
Register##className() { RegisterScreenClass( #className,Create##className); } \
|
||||
}; \
|
||||
static Register##className register_##className;
|
||||
static RegisterScreenClass register_##className( #className, Create##className )
|
||||
|
||||
enum ScreenType
|
||||
{
|
||||
|
||||
@@ -207,7 +207,7 @@ namespace ScreenManagerUtil
|
||||
};
|
||||
using namespace ScreenManagerUtil;
|
||||
|
||||
void RegisterScreenClass( const RString& sClassName, CreateScreenFn pfn )
|
||||
RegisterScreenClass::RegisterScreenClass( const RString& sClassName, CreateScreenFn pfn )
|
||||
{
|
||||
if( g_pmapRegistrees == NULL )
|
||||
g_pmapRegistrees = new map<RString,CreateScreenFn>;
|
||||
|
||||
Reference in New Issue
Block a user