/// <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) { // Exit the game. if (Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } // Play sound effect when the player shoots. if (Keyboard.GetState().IsKeyDown(Keys.Space) && player1.MySuperProjectile.ProjectileState == SuperProjectile.PROJECTILE_STATE.STILL) { playerFire.Play(); } #region Handle behaviour between player and sentry. foreach (var item in sentries) { // The following if statement will ensure that the sentry will only carry out it's behaviour if it is still visible. if (item.Visible == true) { // Follow the player's position. item.Follow(player1); // Ensure the sentry and the player collide if the sentry is still visible. player1.CollisionSentry(item); #region Handle the sentry's projectile colllsions with walls foreach (var wall in projectileColliders) { item.SentrySuperProjectile.WallCollision(wall); } #endregion #region what will happen when a sentry dies. // If the sentry is killed... if (item.Health <= 0) { if (item.Visible == true) { // ...Add to the killcount. killCount++; // Create an explosion where the sentry once was. deathExplosion = new AnimateSheetSprite(this, item.PixelPosition, new List <TileRef>() { new TileRef(0, 0, 0), new TileRef(1, 0, 0), new TileRef(2, 0, 0), }, 64, 64, 0f); } // Make the sentry invisible. item.Visible = false; } #endregion } } #endregion #region Handle the player and player projectile's collisions with walls. // Ensure that the player collides with locks. foreach (Lock collisionLock in locks) { player1.CollisionLock(collisionLock); } // Ensure the player projectile collides with walls. foreach (var item in projectileColliders) { player1.MySuperProjectile.WallCollision(item); } #endregion #region What to do when all sentries have been destroyed. if (killCount == sentryCount) { MediaPlayer.Volume -= 0.4f; foreach (Lock item in locks) { item.Visible = false; } gameOverState = true; } #endregion #region Play background music when test timer is up. // Play background music. //timeSpan -= gameTime.ElapsedGameTime; // timeSpan < TimeSpan.Zero // Add the above line to the if statement below to test the countdown. if (MediaPlayer.Volume != 0.5f) { MediaPlayer.Play(backgroundMusic); MediaPlayer.Volume += 0.5f; } #endregion // What to do when the player reaches the exit tile. if (player1.BoundingRectangle.Intersects(exitTile.CollisionField) && player1.Visible == true) { victoryFanfare.Play(); player1.Visible = false; } base.Update(gameTime); // TODO: Add your update logic here /// <summary> /// This is called when the game should draw itself. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> }