/// <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) { if (Keyboard.GetState().IsKeyDown(Keys.Escape))// || !player.IsActive) { Exit(); } foreach (Interfaces.IUpdatable item in Engine.UpdatableObjects) { item.Update(gameTime); } foreach (Projectile projectile in Engine.Projectiles) { projectile.Update(gameTime); foreach (Unit unit in Engine.UpdatableObjects) { if (Collision.CheckForCollisionBetweenCollidables(projectile, unit)) { if (projectile.Owner is PlayableCharacter && unit is Enemy) { unit.GetHitByProjectile(projectile); if (!(projectile is RayParticle)) { projectile.Nullify(); } } if (projectile.Owner is Enemy && unit is PlayableCharacter) { unit.GetHitByProjectile(projectile); projectile.Nullify(); } } } } foreach (var bonus in Engine.PlayerTimedBonuses) { if (bonus.CountDownTimer.IsActive) { if (bonus.CountDownTimer.CheckTimer(gameTime)) { bonus.IsTimedOut = true; } } } foreach (var item in Engine.Items) { if (item.IsActive) { item.Update(gameTime); } } //if (Keyboard.GetState().IsKeyDown(Keys.B)) //{ // Engine.ChangeLevel("Level2"); // camera.SetSceneBounds(new Rectangle(50, 50, Engine.LevelBounds.Width - 200, Engine.LevelBounds.Height)); //} camera.Chase(gameTime); camera.Update(gameTime); Engine.CleanInactiveObjects(); base.Update(gameTime); }