/// <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 inputs foreach (var controller in controllers) { controller.UpdateInput(); } if (!IsGameOver) { LevelScroller.layers[2].Enabled = true; LevelScroller.layers[3].Enabled = true; LevelScroller.layers[4].Enabled = false; LevelScroller.layers[5].Enabled = false; if (Paused) { MediaPlayer.Pause(); } else { MediaPlayer.Resume(); } GameHUD.Update(gameTime); // add to-spawn items to the gameobjects list GameObjects.AddRange(Level.ToSpawn); Level.ToSpawn.Clear(); if (Mario.IsDead) { if (Mario.TimeDied.TotalMilliseconds == 0) { Mario.TimeDied = gameTime.TotalGameTime; } else if (gameTime.TotalGameTime > Mario.TimeDied + new TimeSpan(0, 0, 0, 3)) { if (HUDMap["Lives"] <= 0) { GameOver(); } else { HUDMap["Lives"]--; LoadGameLevel("mini_game"); MediaPlayer.Play(backGroundMusic); Mario.Respawn(); } } } if (Mario.ReachedGate) { Mario.ReachedGate = false; LoadGameLevel("hospital"); Mario.Respawn(); } if (Mario.OnFlagpole) { if (Mario.TimeWon.TotalMilliseconds == 0) { Mario.TimeWon = gameTime.TotalGameTime; } else if (gameTime.TotalGameTime > Mario.TimeWon + new TimeSpan(0, 0, 0, 5)) { GameWon(); } } // update all game objects (their sprites are updated inside) foreach (var obj in GameObjects) { if (!Paused) { obj.Update(gameTime); } } UpdateCollisions(); // update collisions CleanDeletedObjects(); // remove any deleted items from anywhere they might remain } base.Update(gameTime); LevelScroller.Update(); }