Transition away from Screen(sName), to Screen(); set the name just
before calling Init(). This will reduce the amount of repetitive boilerplate code for screens, allowing a screen to have no explicit ctor.
This commit is contained in:
@@ -25,6 +25,10 @@ void Screen::InitScreen( Screen *pScreen )
|
|||||||
pScreen->Init();
|
pScreen->Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Screen::Screen()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
Screen::Screen( CString sName )
|
Screen::Screen( CString sName )
|
||||||
{
|
{
|
||||||
SetName( sName );
|
SetName( sName );
|
||||||
|
|||||||
@@ -23,6 +23,13 @@ void RegisterScreenClass( const CString& sClassName, CreateScreenFn pfn );
|
|||||||
}; \
|
}; \
|
||||||
static Register##className register_##className;
|
static Register##className register_##className;
|
||||||
|
|
||||||
|
#define REGISTER_SCREEN_CLASS_NEW( className ) \
|
||||||
|
static Screen* Create##className( const CString &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;
|
||||||
|
|
||||||
enum ScreenType
|
enum ScreenType
|
||||||
{
|
{
|
||||||
attract,
|
attract,
|
||||||
@@ -36,6 +43,7 @@ class Screen : public ActorFrame
|
|||||||
public:
|
public:
|
||||||
static void InitScreen( Screen *pScreen );
|
static void InitScreen( Screen *pScreen );
|
||||||
|
|
||||||
|
Screen();
|
||||||
Screen( CString sName ); // enforce that all screens have m_sName filled in
|
Screen( CString sName ); // enforce that all screens have m_sName filled in
|
||||||
virtual ~Screen();
|
virtual ~Screen();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user