public void Draw(SpriteBatch spriteBatch, GameTime gameTime) { string scoreHUDText = ScoreHUDCounter.ToString(); string coinHUDText = CoinHUDCounter.ToString(); string worldHUDText = CurrentWorld.ToString() + "-" + CurrentStage.ToString(); // Sets our timeCounter such that our HUD Timer decrements every half of a second. if (gameTime.TotalGameTime.Milliseconds % GameValues.HUDDrawDelay == 0 && !FreezeHUD) { if (timeCounter < TimerLife) { if (timeCounter == GameValues.HUDTimeWarningAmount) { TimeIsLow = true; SoundManager.Instance.PlayTimeWarning(); } timeCounter++; } else { new TimeUpCommand(GameStateMachine.Instance.PlayableObjects).Execute(); } } string timerHUDText = ""; if (GameStateMachine.Instance.GameState.ToString() == "SuperMario.GameStates.TimeScoreAnimationState") { timerHUDText = TimeLeft.ToString(); } else if (GameStateMachine.Instance.GameState.ToString() == "SuperMario.GameStates.ExitGameState" || GameStateMachine.Instance.GameState.ToString() == "SuperMario.GameStates.GameWonState") { timerHUDText = GameValues.HUDEmptyTimeCounter; } else { timerHUDText = (TimerLife - timeCounter).ToString(); } // Pads all our HUD values with 0's. for (int i = 1; scoreHUDText.Length < GameValues.HUDScoreMaxLength; i++) { scoreHUDText = "0" + scoreHUDText; } for (int i = 1; coinHUDText.Length < GameValues.HUDCoinMaxLength; i++) { coinHUDText = "0" + coinHUDText; } for (int i = 1; timerHUDText.Length < GameValues.HUDTimerMaxLength; i++) { timerHUDText = "0" + timerHUDText; } //if (GameStateMachine.Instance.GameState.ToString() == "SuperMario.GameStates.GameOverState") if (GameStateMachine.Instance.GameState.ToString() == "SuperMario.GameStates.MarioRespawnState") { if (!(Mario.Instance.Lives > GameValues.MarioStartingLives)) { UpdateGameStats(scoreHUDText, coinHUDText, worldHUDText, timerHUDText, Mario.Instance.Lives - 1); } } else if (GameStateMachine.Instance.GameState.ToString() == "SuperMario.GameStates.GameOverState" && gameOver) { UpdateGameStats(scoreHUDText, coinHUDText, worldHUDText, timerHUDText, Mario.Instance.Lives); gameOver = false; } scoreHUDText = "MARIO\n" + scoreHUDText; coinHUDText = "\nx" + coinHUDText; worldHUDText = "WORLD\n " + worldHUDText; timerHUDText = "TIME\n " + timerHUDText; Vector2 scoreHUDOrigin = HudFont.MeasureString(scoreHUDText) / 2; Vector2 coinHUDOrigin = HudFont.MeasureString(coinHUDText) / 2; Vector2 worldHUDOrigin = HudFont.MeasureString(worldHUDText) / 2; Vector2 timerHUDOrigin = HudFont.MeasureString(timerHUDText) / 2; int xPositionPadding = (int)Position.X / 4; int yPositionPadding = (int)Position.Y; // Sets the distance between each line of text on the HUD. HudFont.LineSpacing = 3 * ((int)HudFont.MeasureString(scoreHUDText).Y / 7); sprite.UpdateSpritePosition(new Vector2(Position.X - HudFont.MeasureString(coinHUDText).X - xPositionPadding, yPositionPadding + 5)); sprite.Draw(spriteBatch, gameTime); spriteBatch.DrawString(HudFont, scoreHUDText, new Vector2(Position.X - (3 * xPositionPadding), yPositionPadding), Color.White, 0, scoreHUDOrigin, 1.0f, SpriteEffects.None, 0.5f); spriteBatch.DrawString(HudFont, scoreHUDText, new Vector2(Position.X - (3 * xPositionPadding), yPositionPadding), Color.White, 0, scoreHUDOrigin, 1.0f, SpriteEffects.None, 0.5f); spriteBatch.DrawString(HudFont, coinHUDText, new Vector2(Position.X - xPositionPadding, yPositionPadding), Color.White, 0, coinHUDOrigin, 1.0f, SpriteEffects.None, 0.5f); spriteBatch.DrawString(HudFont, worldHUDText, new Vector2(Position.X + xPositionPadding, yPositionPadding), Color.White, 0, worldHUDOrigin, 1.0f, SpriteEffects.None, 0.5f); spriteBatch.DrawString(HudFont, timerHUDText, new Vector2(Position.X + (3 * xPositionPadding), yPositionPadding), Color.White, 0, timerHUDOrigin, 1.0f, SpriteEffects.None, 0.5f); }