public List <Enemy> Spawn(LevelRecipie levelRecipie)
        {
            foreach (var enemyHandler in enemyHandlers)
            {
                enemyHandler.Recycle();
            }

            if (foliages != null)
            {
                foreach (var foliage in foliages)
                {
                    Destroy(foliage.gameObject);
                }
            }

            foliages.Clear();

            var enemies = enemySpawner.Spawn(levelRecipie.enemies);

            enemyHandlers.Clear();

            foliages.AddRange(foliageSpawner.Spawn(levelRecipie.foliages));


            for (int i = 0; i < enemies.Count; i++)
            {
                Enemy enemy = enemies[i];
                enemyHandlers.Add(new EnemyHandler(enemy, this));
                enemy.transform.position = foliages[i].position;
            }


            return(enemies);
        }
Esempio n. 2
0
        private void SpawnLevel(Level level, Exit exit, LevelRecipie levelRecipie)
        {
            if (ammunition != null)
            {
                foreach (var item in ammunition)
                {
                    ammunitionSpawner.Recycle(item);
                }
            }

            if (stones != null)
            {
                foreach (var stone in stones)
                {
                    stonesSpawner.Recycle(stone);
                }
            }

            if (bushes != null)
            {
                foreach (var bush in bushes)
                {
                    bushSpawner.Recycle(bush);
                }
            }


            stones     = stonesSpawner.Spawn(levelRecipie.stones);
            ammunition = ammunitionSpawner.Spawn(levelRecipie.cartridges);
            bushes     = bushSpawner.Spawn(levelRecipie.bushes);

            enemiesSet.Clear();
            enemiesController.OnEnemyDie -= Enemy_OnDie;

            foreach (var enemy in enemiesController.Spawn(levelRecipie))
            {
                enemiesSet.Add(new EnemySpawnSet(enemy));
            }

            enemiesController.OnEnemyDie += Enemy_OnDie;

            deadEnemies.Clear();

            level.OpenAllDoors();
            exit.Close();

            OnLevelReady?.Invoke(this, new LevelSpawnData(level,
                                                          exit, enemiesSet.Count));

            FireLevelStateChange();
        }
Esempio n. 3
0
 private void GameController_OnGameReady(object sender, LevelRecipie levelRecipie)
 {
     SpawnLevel(currentLevel, currentEntry, levelRecipie);
 }