/// <summary> /// Update the enemy projectiles. /// </summary> /// <param name="gt"></param> private void UpdateProjectiles(GameTime gt) { if (Waves != null) { int i = 0; while (i < Waves[currentWaveNo].Count && Waves[currentWaveNo].Count > 0) { Waves[currentWaveNo][i].Update(gt); if (Waves[currentWaveNo][i].ToBeDeleted()) { Waves[currentWaveNo].RemoveAt(i); i--; } else { // Check for collision. bool Collided = false; if (Waves[currentWaveNo][i].CollisionSpheres != null) { foreach (BoundingSphere b in Waves[currentWaveNo][i].CollisionSpheres) { if (b.Intersects(Player.CollisionSphere)) { Collided = true; break; } } } if (Waves[currentWaveNo][i].CollisionBoxes != null) { foreach (BoundingBox b in Waves[currentWaveNo][i].CollisionBoxes) { if (b.Intersects(Player.CollisionSphere)) { Collided = true; break; } } } if (Collided) { // If the projectile has the power of > 0, then it will be removed after crashing against the player. (Attack) // If the projectile has the power = 0, then it will not be removed after crashing against the player. // If the projectile has the power of < 0, then it will be rmoved after crashing against the player. (Heal) if (Waves[currentWaveNo][i].Power > 0) { if (!Recovering) { // This means the player is hit! this.Player.HP -= Waves[currentWaveNo][i].Power; Effects.Add(new PlayerExplosion(Waves[currentWaveNo][i].Position, 2f)); PersistentContent.GetSFX("PlayerHit").Play(); Recovering = true; i--; } } else if (Waves[currentWaveNo][i].Power < 0) { // This means the player receives a powerup. // There is no powerup in this game; however! this.Player.HP -= Waves[currentWaveNo][i].Power; if (this.Player.HP > this.Player.MaxHP) { this.Player.HP = this.Player.MaxHP; } Waves[currentWaveNo].RemoveAt(i); i--; } } } i++; } } }
private void UpdatePlayer(KeyboardState ks, GameTime gt) { if (Player.HP < 0) { Main.ChangeCurrentState(new GameOver("The HP has reached 0. A big no-no for a shooter game.")); } else { Player.PlayerUpdate(ks); if (Recovering) { RecoveryCounter++; if (RecoveryCounter > RecoveryTime) { RecoveryCounter = 0; Recovering = false; } } int i = 0; // Update player's bullet. while (i < PlayerProjectiles.Count) { int j = 0; PlayerProjectiles[i].Update(gt); if (Waves != null) { while (j < Waves[currentWaveNo].Count) { // The player's bullet has hit the enemy. if (PlayerProjectiles[i].CollidedWithEnemy(Waves[currentWaveNo][j])) { Waves[currentWaveNo][j].HP -= PlayerProjectiles[i].Power; PlayerProjectiles[i].HP = 0; PersistentContent.GetSFX("EnemyHit").Play(); } j++; } } i++; } i = 0; // Delete marked player's bullet. while (i < PlayerProjectiles.Count) { if (PlayerProjectiles[i].ToBeDeleted() || PlayerProjectiles[i].HP <= 0) { PlayerProjectiles.RemoveAt(i); i--; } i++; } // Delete enemies. if (Waves != null) { i = 0; while (i < Waves[currentWaveNo].Count) { if (Waves[currentWaveNo][i].ToBeDeleted()) { Waves[currentWaveNo].RemoveAt(i); i--; } else if (Waves[currentWaveNo][i].HP <= 0) { Effects.Add(new Explosion(Waves[currentWaveNo][i].Position, 2)); PersistentContent.GetSFX("EnemyDead").Play(); Waves[currentWaveNo].RemoveAt(i); i--; } i++; } } } }