IEnumerator SpawnWave() { bool spawning = true; while (spawning) { if (Time.time - waveTimer < waveTimeToWait && enemies.Count == 0) { if (Input.GetKeyDown(KeyCode.RightArrow)) { waveTimer -= waveTimeToWait; } enemyText.text = $"Time to Wave {waveNum+1}: {Mathf.Round((waveTimeToWait - (Time.time - waveTimer)))}"; } else if (elevators != null) { if (enemyQueue.Count == 0 && spawnWave) { waveNum++; if (waveNum == 5) { SceneManager.LoadScene("MainMenu"); spawning = false; yield return(null); } waveTimer = Time.time; if (waveNum == 4) //5th wave = boss wave { SpawnBoss(); } else { GenerateEnemyQueue(); } spawnWave = false; traderManager.GenerateShop(); traderOut = true; } else if (enemyQueue.Count == 0 && !spawnWave && enemies.Count == 0) { spawnWave = true; } else { if (Time.time - waveSpawnTimer < Constants.WAVEGEN_GROUP_SPAWN_TIME) { } else { if (traderOut) { traderManager.RemoveShop(); } int spawnNum = maxEnemyGroupSpawn; if (spawnNum + enemies.Count > maxEnemiesOut) { spawnNum = spawnNum - ((spawnNum + enemies.Count) - maxEnemiesOut); } if (spawnNum > enemyQueue.Count) { spawnNum = enemyQueue.Count; } SpawnEnemyGroup(spawnNum); waveSpawnTimer = Time.time; enemyText.text = $"Wave: {waveNum + 1}\nEnemies Remaining: {enemyQueue.Count + enemies.Count}\nEnemies Out: {enemies.Count}"; } yield return(new WaitForSeconds(1f)); } enemyText.text = $"Wave: {waveNum+1}\nEnemies Remaining: {enemyQueue.Count + enemies.Count}\nEnemies Out: {enemies.Count}"; yield return(new WaitForSeconds(1f)); } yield return(null); } }