public void Update(GameTime gameTime) { float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds; if (state == FadeState.In) { fadeAlpha = MathHelper.Clamp(fadeAlpha - (elapsed * fadeSpeed), 0, 1); fadeImage.Alpha = fadeAlpha; fadeImage.Color = Color.White * fadeImage.Alpha; if (fadeAlpha <= 0) { state = FadeState.Idle; } } else if (state == FadeState.Out) { fadeAlpha = MathHelper.Clamp(fadeAlpha + (elapsed * fadeSpeed), 0, 1); fadeImage.Alpha = fadeAlpha; fadeImage.Color = Color.White * fadeImage.Alpha; if (fadeAlpha >= 1) //Done fading to black, now set new screen and fade into it { //Destory objects from the first screen if (Current != null) { Current.Remove(); } Current = fadeTo; Current.Add(this); state = FadeState.In; fadeImage.BringToFront(); } } }
/// <summary> /// Transitions from the current screen to the next /// </summary> public void SwitchScreen(IScreen newScreen) { //Do not fade if setting the login screen (first screen) if ((newScreen is LoginScreen) && Current == null) { //Destory objects from the first screen if (Current != null) { Current.Remove(); } Current = newScreen; Current.Add(this); } else { //Set the current screen and add it's objects fadeTo = newScreen; state = FadeState.Out; } fadeImage.BringToFront(); }