示例#1
0
        /// <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++;
                }
            }
        }
示例#2
0
        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++;
                    }
                }
            }
        }