private IEnumerator SpawnSubWave(SubWave subWave) { alive = 0; int totalEnemies = 0; foreach (var d in subWave.EnemyData) { totalEnemies += d.Amount; } bool portalsOpen = false; levelScript.OpenPortals(() => { portalsOpen = true; }); yield return(new WaitUntil(() => portalsOpen)); events.FireEvent(new WaveEnemyChange { EnemiesLeft = totalEnemies }); int i = 0; while (i < totalEnemies) { yield return(StartCoroutine(SpawnBatch(subWave.EnemyData, i, totalEnemies))); i += portals.Count; } levelScript.ClosePortals(); while (alive > 0) { yield return(null); } }