// Update public void Update( float frameTime ) { if ( CurrentScreen == null ) return; switch ( State ) { // Init case E_ScreenState.Init: { CurrentScreen.Init(); CurrentScreen.TimelineActive( "start", true, false ); State = E_ScreenState.Start; Time = 0.0f; goto case E_ScreenState.Start; //break; } // Start case E_ScreenState.Start: { CurrentScreen.StartLoop( frameTime ); if ( Time >= StartTimer ) { State = E_ScreenState.Update; Time = 0.0f; } else Time = MathHelper.Min( Time + frameTime, StartTimer ); break; } // Update case E_ScreenState.Update: { CurrentScreen.Update( frameTime ); Time += frameTime; break; } // End case E_ScreenState.End: { CurrentScreen.EndLoop( frameTime ); if ( Time >= EndTimer ) { CurrentScreen.End(); // switch to the next screen CurrentScreen = NextScreen; NextScreen = null; if ( CurrentScreen != null ) { State = E_ScreenState.Init; Update( frameTime ); } else State = E_ScreenState.None; } else Time = MathHelper.Min( Time + frameTime, EndTimer ); break; } } }
// SetNextScreen public void SetNextScreen( Screen nextScreen ) { if ( CurrentScreen == null ) { // initial screen CurrentScreen = nextScreen; State = E_ScreenState.Init; } else { // next screen NextScreen = nextScreen; State = E_ScreenState.End; Time = 0.0f; CurrentScreen.TimelineActive( "start", false, false ); CurrentScreen.TimelineActive( "end", true, false ); } }