void Update() { Wave current = waves [currentWave]; // Handle success state if (waveCompleteScreen != null && waveCompleteScreen.activeSelf) { waveCompleteDelay -= Time.deltaTime; if (waveCompleteDelay <= 0) { waveCompleteScreen.SetActive(false); waveCompleteDelay = 5.0f; } } // Handle wave cooldown if (current.currentCooldownDelay > 0) { CooldownCountdown(); return; } else { waveCooldownScreen.SetActive(false); } // Handle complete logic if (current.started && !current.completed && current.AllEnemiesDied() && current.queue.Count == 0) { /* * If a wave complete screen is set, activate it and * remove it after the cooldown. */ if (waveCompleteScreen != null) { waveCompleteScreen.SetActive(true); } current.completed = true; return; } if (!current.started) { // Referencing issue? current.started = true; foreach (EnemyType enemy in current.enemies) { UnityEngine.Object resource = Resources.Load("Prefabs/Enemies/" + enemy.type); for (int i = 0; i < enemy.number; i++) { current.queue.Add(() => { current.Spawn( Instantiate(resource) as GameObject, transform.position, path ); }); } } } else if (!current.completed) { current.currentSpawnDelay -= Time.deltaTime; if (current.currentSpawnDelay < 0) { current.currentSpawnDelay = Wave.SPAWN_DELAY; if (current.queue.Count > 0) { current.queue [0] (); current.queue.RemoveAt(0); } } } else { if (currentWave < waves.Length - 1) { currentWave++; } } }