Esempio n. 1
0
        /// <summary>
        /// Draws the loading screen.
        /// </summary>
        public override void Draw(GameTime gameTime)
        {
            // If we are the only active screen, that means all the previous screens
            // must have finished transitioning off. We check for this in the Draw
            // method, rather than in Update, because it isn't enough just for the
            // screens to be gone: in order for the transition to look good we must
            // have actually drawn a frame without them before we perform the load.
            if ((ScreenState == ScreenState.Active) &&
                (ScreenManager.GetScreens().Length == 1))
            {
                _otherScreensAreGone = true;
            }

            // The gameplay screen takes a while to load, so we display a loading
            // message while that is going on, but the menus load very quickly, and
            // it would look silly if we flashed this up for just a fraction of a
            // second while returning from the game to the menus. This parameter
            // tells us how long the loading is going to take, so we know whether
            // to bother drawing the message.
            if (_loadingIsSlow)
            {
                SpriteBatch spriteBatch = ScreenManager.SpriteBatch;

                spriteBatch.Begin();
#if IPHONE
                var screenSize = new Vector2(ScreenManager.Graphics.PreferredBackBufferWidth, ScreenManager.Graphics.PreferredBackBufferHeight);
#else
                var screenSize = new Vector2(ScreenManager.GraphicsDevice.Viewport.Width, ScreenManager.GraphicsDevice.Viewport.Height);
#endif
                if (_background != null)
                {
                    spriteBatch.Draw(_background, screenSize / 2, null, Color.White, 0, new Vector2(_background.Width, _background.Height) / 2, 1, SpriteEffects.None, 0);
                }
                if (_showText)
                {
                    SpriteFont font = ScreenManager.Font;

                    const string message = "Loading...";

                    // Center the text in the screen.
                    Vector2 textSize     = font.MeasureString(message);
                    Vector2 textPosition = (screenSize - textSize) / 2;

#if SILVERLIGHT
                    var color = new Color(Color.White, MathHelper.Clamp(TransitionAlpha, 0, 1));
#else
                    var color = Color.White * TransitionAlpha;
#endif

                    // Draw the text.
                    spriteBatch.DrawString(font, message, textPosition, color);
                }

                spriteBatch.End();

                // Fix for Silversprite
                spriteBatch.Begin();
                spriteBatch.End();

                if (_fadeBackBufferToWhiteAlpha > 0)
                {
                    ScreenManager.FadeBackBufferToWhite(_fadeBackBufferToWhiteAlpha);
                }
            }
        }