00001
00002
00003
00004
00005
00006 namespace MontyHallGame
00007 {
00008 using System;
00009 using Microsoft.Xna.Framework;
00010 using Microsoft.Xna.Framework.Graphics;
00011 using NewGamePhysics.StateManager;
00012
00017 class MontyHallLoadingScreen : GameScreen
00018 {
00019 #region Fields
00020
00021 bool loadingIsSlow;
00022 bool otherScreensAreGone;
00023
00024 GameScreen[] screensToLoad;
00025
00026 #endregion
00027
00028 #region Initialization
00029
00030
00035 private MontyHallLoadingScreen(ScreenManager screenManager, bool loadingIsSlow,
00036 GameScreen[] screensToLoad)
00037 {
00038 this.loadingIsSlow = loadingIsSlow;
00039 this.screensToLoad = screensToLoad;
00040
00041 TransitionOnTime = TimeSpan.FromSeconds(0.5);
00042 }
00043
00044
00048 public static void Load(ScreenManager screenManager, bool loadingIsSlow,
00049 PlayerIndex? controllingPlayer,
00050 params GameScreen[] screensToLoad)
00051 {
00052
00053 foreach (GameScreen screen in screenManager.GetScreens())
00054 screen.ExitScreen();
00055
00056
00057 MontyHallLoadingScreen loadingScreen = new MontyHallLoadingScreen(screenManager,
00058 loadingIsSlow,
00059 screensToLoad);
00060
00061 screenManager.AddScreen(loadingScreen, controllingPlayer);
00062 }
00063
00064
00065 #endregion
00066
00067 #region Update and Draw
00068
00072 public override void Update(GameTime gameTime, bool otherScreenHasFocus,
00073 bool coveredByOtherScreen)
00074 {
00075 base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen);
00076
00077
00078
00079 if (otherScreensAreGone)
00080 {
00081 ScreenManager.RemoveScreen(this);
00082
00083 foreach (GameScreen screen in screensToLoad)
00084 {
00085 if (screen != null)
00086 {
00087 ScreenManager.AddScreen(screen, ControllingPlayer);
00088 }
00089 }
00090
00091
00092
00093
00094 ScreenManager.Game.ResetElapsedTime();
00095 }
00096 }
00097
00098
00102 public override void Draw(GameTime gameTime)
00103 {
00104
00105
00106
00107
00108
00109 if ((ScreenState == ScreenState.Active) &&
00110 (ScreenManager.GetScreens().Length == 1))
00111 {
00112 otherScreensAreGone = true;
00113 }
00114
00115
00116
00117
00118
00119
00120
00121 if (loadingIsSlow)
00122 {
00123 SpriteBatch spriteBatch = ScreenManager.SpriteBatch;
00124 SpriteFont font = ScreenManager.Fonts["game"];
00125
00126 const string message = "Loading...";
00127
00128
00129 Viewport viewport = ScreenManager.GraphicsDevice.Viewport;
00130 Vector2 viewportSize = new Vector2(viewport.Width, viewport.Height);
00131 Vector2 textSize = font.MeasureString(message);
00132 Vector2 textPosition = (viewportSize - textSize) / 2;
00133
00134 Color color = new Color(255, 255, 255, TransitionAlpha);
00135
00136
00137 spriteBatch.Begin();
00138 spriteBatch.DrawString(font, message, textPosition, color);
00139 spriteBatch.End();
00140 }
00141 }
00142
00143 #endregion
00144 }
00145 }