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