Ejemplo n.º 1
0
        internal State EnableBossMode(Boss boss, bool bossHasInstance, GameDatabase db, State gameState, GameTime gameTime)
        {
            State state = gameState;

            boss            = Boss.Instance;
            bossHasInstance = true;

            if (bossHasInstance)
            {
                CollisionHandler.CheckBossBulletsCollisions(db.Bullets.GetAll(), db.Players.GetAll());
                CollisionHandler.CheckPlayerBulletsCollisions(new List <IGameObject>()
                {
                    boss
                }, db.Bullets.GetAll(),
                                                              db.Players.GetAll(), db.Explosions.GetAll());

                BulletsFactory.BossShoot(db.Bullets, boss);

                boss.Update(gameTime);

                if (!boss.IsVisible)
                {
                    state = State.Winning;
                }
            }
            return(state);
        }
Ejemplo n.º 2
0
        internal State Play(GameDatabase db, State gameState, Boss boss, bool bossHasInstance,
                            StatsManager statsManager, GameTime gameTime, Random random)
        {
            State state = gameState;

            if (db.Players.GetAll().Any(s => s.Score >= 10000))
            {
                state = this.EnableBossMode(boss, bossHasInstance,
                                            db, gameState, gameTime);
            }
            else
            {
                for (int i = 0; i < db.Enemies.GetCount(); i++)
                {
                    BulletsFactory.EnemyShoot(db.Bullets, db.Enemies.GetAll()[i]);
                }

                //Creating entities
                EnemyFactory.CreateEnemies(db.Enemies, random);
                AsteroidFactory.CreateAsteroids(db.Asteroids, random);

                ItemFactory.CreateItems(db.Items, db.Enemies.GetAll().Cast <IGameObject>().ToList(), random);
                ItemFactory.CreateItems(db.Items, db.Asteroids.GetAll().Cast <IGameObject>().ToList(), random);

                // Handle collisions between players and enemy objects
                CollisionHandler.CheckForCollision(db.Asteroids.GetAll().Cast <IGameObject>().ToList(), db.Players.GetAll(), db.Explosions.GetAll());
                CollisionHandler.CheckForCollision(db.Enemies.GetAll().Cast <IGameObject>().ToList(), db.Players.GetAll(), db.Explosions.GetAll());

                // Handle collisions between players and enemy items
                CollisionHandler.CheckPlayerItemCollisions(db.Items.GetAll(), db.Players.GetAll());

                ExplosionFactory.CreateExplosion(db.Explosions, db.Enemies.GetAll().Cast <IGameObject>().ToList());
                ExplosionFactory.CreateExplosion(db.Explosions, db.Asteroids.GetAll().Cast <IGameObject>().ToList());

                //Updating entities
                db.Enemies.GetAll().ForEach(e => e.Update(gameTime));
                db.Asteroids.GetAll().ForEach(a => a.Update(gameTime));
                db.Items.GetAll().ForEach(i => i.Update(gameTime));

                // Cleaning with mr.Proper
                EntityCleanerHandler.ClearEnemies(db.Enemies);
                EntityCleanerHandler.ClearAsteroids(db.Asteroids);
                EntityCleanerHandler.ClearExplosion(db.Explosions);
                EntityCleanerHandler.ClearPlayers(db.Players);
            }

            //Update
            db.Bullets.GetAll().ForEach(b => b.Update(gameTime));
            db.Explosions.GetAll().ForEach(e => e.Update(gameTime));

            statsManager.UpdatePlayersStats(db.Players.GetAll());

            //Handle collisions between bullets and gameobjects
            CollisionHandler.CheckPlayerBulletsCollisions(db.Enemies.GetAll().Cast <IGameObject>().ToList(), db.Bullets.GetAll(), db.Players.GetAll(), db.Explosions.GetAll());
            CollisionHandler.CheckPlayerBulletsCollisions(db.Asteroids.GetAll().Cast <IGameObject>().ToList(), db.Bullets.GetAll(), db.Players.GetAll(), db.Explosions.GetAll());
            CollisionHandler.CheckEnemiesBulletsCollisions(db.Bullets.GetAll(), db.Players.GetAll());

            EntityCleanerHandler.ClearBullets(db.Bullets);

            return(state);
        }