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); }
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(); }
private void GameController_OnGameReady(object sender, LevelRecipie levelRecipie) { SpawnLevel(currentLevel, currentEntry, levelRecipie); }