/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { // Update input manager. inputManager.Update(gameTime); // Exit game when exit bool is true if (ExitGame) { Exit(); } // Makes F toggle full-screen mode. if (Keyboard.GetState().IsKeyDown(Keys.F)) { graphics.IsFullScreen = !graphics.IsFullScreen; graphics.ApplyChanges(); } // Create a switch for where code specific to a gamestate can be placed. switch (gameState) { case GameState.TitleScreen: // Update the main menu class. mainMenu.Update(gameTime); // Update the rain. rain.Update(gameTime); // Pause the ambient firing sounds. ambientFiringSoundInstance.Pause(); // Play the other background sounds. rainSoundInstance.Play(); musicInstance.Play(); break; case GameState.Tutorial: // Update the tutorial menu class. tutorial.Update(gameTime); // Update the rain. rain.Update(gameTime); break; case GameState.Credits: // Update the credits menu class. credits.Update(gameTime); // Update the rain. rain.Update(gameTime); break; // PrePlaying is used to reset everything before moving to gamestate playing. case GameState.PrePlaying: gameState = GameState.Playing; // Reset player. playerSprite.Destroyed = false; playerSprite.Position = playerSprite.StartingPosition; playerSprite.PlayerShotManager.Shots.Clear(); // Reset score. scoreManager.ResetScore(); // Reset/remove enemies and their shots. enemyManager.Reset(); break; case GameState.Playing: // Player movment. Links playerSprite to HandleSpriteMovement of PlayerManager so player can move. playerSprite.HandleSpriteMovement(gameTime); // Update the rain. rain.Update(gameTime); // Update playerSprite. playerSprite.Update(gameTime); // Update enemyManager. enemyManager.Update(gameTime); // Update player and enemy explosionManager. enemyExplosionManager.Update(gameTime); playerExplosionManager.Update(gameTime); // Update collisionManager. collisionsManager.CheckCollisions(); // Update scoreManager scoreManager.Update(gameTime); // Pause the game if escape is pressed if (InputManager.KBState.IsKeyDown(Keys.Escape) && InputManager.PreviousKBState.IsKeyUp(Keys.Escape)) { gameState = GameState.Paused; } // Move to Game Over if player dies. if (playerSprite.Destroyed) { gameState = GameState.GameOver; } // Play the background sounds. ambientFiringSoundInstance.Play(); rainSoundInstance.Play(); musicInstance.Play(); break; case GameState.Paused: // Update paused menu. paused.Update(gameTime); // Pause the ambient firing sounds. ambientFiringSoundInstance.Pause(); rainSoundInstance.Pause(); musicInstance.Pause(); break; case GameState.GameOver: // Update the rain. rain.Update(gameTime); // Update explosionManager. enemyExplosionManager.Update(gameTime); playerExplosionManager.Update(gameTime); gameOver.Update(gameTime); break; } base.Update(gameTime); }