From 1fe278b48d162c8ca02ad7ee492f7d08c7189700 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 15 Jan 2006 18:36:40 +0000 Subject: [PATCH] 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. --- stepmania/src/Screen.cpp | 4 ++++ stepmania/src/Screen.h | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/stepmania/src/Screen.cpp b/stepmania/src/Screen.cpp index 52061f54e9..4f4ff3772e 100644 --- a/stepmania/src/Screen.cpp +++ b/stepmania/src/Screen.cpp @@ -25,6 +25,10 @@ void Screen::InitScreen( Screen *pScreen ) pScreen->Init(); } +Screen::Screen() +{ +} + Screen::Screen( CString sName ) { SetName( sName ); diff --git a/stepmania/src/Screen.h b/stepmania/src/Screen.h index 6f6a2b903e..8fb8d2398d 100644 --- a/stepmania/src/Screen.h +++ b/stepmania/src/Screen.h @@ -23,6 +23,13 @@ void RegisterScreenClass( const CString& sClassName, CreateScreenFn pfn ); }; \ 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 { attract, @@ -36,6 +43,7 @@ class Screen : public ActorFrame public: static void InitScreen( Screen *pScreen ); + Screen(); Screen( CString sName ); // enforce that all screens have m_sName filled in virtual ~Screen();