示例#1
0
        public void update(GameTime gameTime)
        {
            player.update(gameTime);
            foreach (Character enemy in enemies)
            {
                enemy.update(gameTime);
                if (!enemy.isAlive())
                {
                    removedEnemies.Add(enemy);
                    if (enemy.getType() == 3)
                    {
                        addExplosion(enemy.getPos(), enemy.getVel() / 5.0f, 4.0f, Color.OrangeRed);
                        soundManager.bossDeath();
                        Game1.points += 1000;
                    }
                    else
                    {
                        addExplosion(enemy.getPos(), enemy.getVel() / 5.0f, 0.7f, Color.White);
                        soundManager.enemyDeath();
                        Game1.points += 250 + (enemy.getType() * 50);
                    }
                }
            }
            foreach (Bullet bullet in enemyBullets)
            {
                bullet.update(gameTime);
                if (!bullet.isAlive())
                {
                    removedEnemyBullets.Add(bullet);
                }
            }
            foreach (Bullet bullet in playerBullets)
            {
                bullet.update(gameTime);
                if (!bullet.isAlive())
                {
                    removedPlayerBullets.Add(bullet);
                }
            }
            foreach (Character egg in eggs)
            {
                egg.update(gameTime);
                egg.rotate(-0.001f);
                if (!egg.isAlive())
                {
                    removedEggs.Add(egg);
                }
            }
            foreach (Bullet eff in effects)
            {
                eff.update(gameTime);
                if (!eff.isAlive())
                {
                    removedEffects.Add(eff);
                }
            }

            // check player shots
            foreach (Bullet bullet in playerBullets)
            {
                foreach (Character enemy in enemies)
                {
                    if (bullet.isAlive() &&
                        bullet.getLifetime() > bullet.getLifetimeThreshold() / 2 &&
                        bullet.getBoundingBox().Intersects(enemy.getBoundingBox()))
                    {
                        // check stay, so we only check bombs every bombCounter frames
                        if (!bullet.isStay() || bombCounter == 0)
                        {
                            enemy.hit(bullet.getDamage());
                            addSparks(enemy.getPos(), enemy.getVel());
                            if (!bullet.isStay())
                            {
                                bullet.kill();
                            }
                            soundManager.enemyHit();
                        }
                    }
                }
            }

            // check enemy shots
            if (player.isAlive())
            {
                foreach (Bullet bullet in enemyBullets)
                {
                    if (bullet.isAlive() &&
                        bullet.getLifetime() > bullet.getLifetimeThreshold() / 2 &&
                        bullet.getBoundingBox().Intersects(player.getBoundingBox()))
                    {
                        player.hit(bullet.getDamage());
                        addSparks(player.getPos(), player.getVel());
                        bullet.kill();
                        soundManager.playerHit();
                    }
                }
            }

            // check eggs
            foreach (Character egg in eggs)
            {
                if (egg.isAlive() && egg.getBoundingBox().Intersects(player.getBoundingBox()))
                {
                    egg.kill();
                    player.incHP(40);
                    player.incEggs();
                    soundManager.egg();
                    Game1.points += 250;
                }
            }

            foreach (Bullet b in removedPlayerBullets)
            {
                playerBullets.Remove(b);
            }
            foreach (Bullet b in removedEnemyBullets)
            {
                enemyBullets.Remove(b);
            }
            foreach (Character b in removedEnemies)
            {
                enemies.Remove(b);
            }
            foreach (Character e in removedEggs)
            {
                eggs.Remove(e);
            }
            foreach (Bullet e in removedEffects)
            {
                effects.Remove(e);
            }

            // death handling
            if (!player.isAlive())
            {
                // after the wait
                if (deathTimer == 0)
                {
                    player.revive();
                    deathTimer = deathTimerMax;
                    player.setPos(new Vector2(0.0f, 0.0f));
                    cam.setPos(new Vector2(0.0f, 0.0f));
                    if (player.getLives() < 0)
                    {
                        levelManager.initLevel(0);
                        player.setLives(3);
                    }
                }
                // meaning, just died
                else
                {
                    if (deathTimer == deathTimerMax)
                    {
                        addExplosion(player.getPos(), player.getVel() / 5.0f, 0.5f, Color.Yellow);
                        soundManager.playerDeath();
                        player.decLives();
                        if (player.getLives() < 0)
                        {
                            Game1.instance.setGameOver(true);
                        }
                    }
                    deathTimer--;
                }
            }
        }