Screen_Base* ScreenOverlayManager::CreateScreen(ScreenOverlays screentomake, Screen_Base* pParentScreen, void* pPtr1, void* pPtr2) { Screen_Base* newscreen = 0; switch( screentomake ) { case ScreenOverlay_DontChange: case ScreenOverlay_Destroy: case ScreenOverlay_RemoveDontDestroy: assert( false ); break; case ScreenOverlay_GameType_Selector: newscreen = MyNew GameType_Selector(); break; case ScreenOverlay_GameType_EmptyReplaceMe: newscreen = MyNew GameType_EmptyReplaceMe(); break; case ScreenOverlay_Loading: newscreen = MyNew Screen_Loading(); break; case ScreenOverlay_HowToPlay_Online: newscreen = MyNew Screen_HowToPlay(); ((Screen_HowToPlay*)newscreen)->m_PageShowing = HTPPT_Online; break; case ScreenOverlay_HowToPlay_Infinite: newscreen = MyNew Screen_HowToPlay(); ((Screen_HowToPlay*)newscreen)->m_PageShowing = HTPPT_Infinite; break; case ScreenOverlay_HowToPlay_Puzzle: newscreen = MyNew Screen_HowToPlay(); ((Screen_HowToPlay*)newscreen)->m_PageShowing = HTPPT_Puzzle; break; case ScreenOverlay_Options: newscreen = MyNew Screen_Pause(); break; case ScreenOverlay_Achievements: newscreen = MyNew Screen_Achievements(); break; case ScreenOverlay_Stats: newscreen = MyNew Screen_Stats(); break; } if( newscreen ) newscreen->SetParentScreen( pParentScreen ); return newscreen; };
// --------------------------------------------------------------------------- void Screen_Goto(Screen id) { if(active_screen != SCREEN_END) { // execute exit function of current screen if(screens[active_screen].exit_fnc != NULL) screens[active_screen].exit_fnc(); } // draw loading screen Screen_Loading(id); // execute init function of new screen if(screens[id].init_fnc != NULL) screens[id].init_fnc(); // reset last update timer screens[id].last_update = 0; active_screen = id; }