public void EnemyDied() { enemiesAlive--; if (enemiesAlive == 0) { WaveComplete?.Invoke(); wave++; StartCoroutine(DelayStartWave()); } }
void OnAllEnemiesKilled(WaveEnemyGroup enemyGroup) { Log.Info("All enemies in current group killed"); enemyGroup.AllEnemiesKilled -= OnAllEnemiesKilled; if (enemyGroups.TrueForAll(x => x.AllEnemiesDead)) { WaveCompleted = true; WaveComplete?.Invoke(); } }
private void HandleNextWaveSpawn() { if (_currentWave >= levelDetailsScriptableObject.waves.Length) { AllWavesComplete?.Invoke(this, EventArgs.Empty); } else { WaveComplete?.Invoke(this, new WaveClearedEvent { ClearedWave = _currentWave }); SpawnWave(); } }
void OnWaveComplete() { var completedWave = waves[currentWave]; completedWave.WaveComplete -= OnWaveComplete; completedWave.EnemyReachedBase -= OnEnemyReachedBase; completedWave.EnemyKilled -= OnEnemyKilled; WaveComplete?.Invoke(completedWave); if (waves.TrueForAll(x => x.WaveCompleted)) { Log.Info("All Waves Complete!"); AllWavesComplete?.Invoke(); } else { delayTimer = new Timer(delayBetweenWaves, () => MoveToNextWave()); } }
void AdvancePatternCompletionLevel() { waves[waveIndex].completionLevel++; if (waves[waveIndex].completionLevel >= waves[waveIndex].spawnPatterns[waves[waveIndex].spawnIndex].enemyGroups.Length) // if there are no more enemies to spawn proceed { waves[waveIndex].spawnIndex++; if (waves[waveIndex].spawnIndex == waves[waveIndex].spawnPatterns.Length) // checks if the wave has been completed { waveIndex++; if (waveIndex >= waves.Length) { allWavesComplete?.Invoke(); return; } waveComplete?.Invoke(); return; } ChangeSpattern(); // starts a new pattern waves[waveIndex].completionLevel = 0; // resets completionLevel } }
public void End() { WaveComplete?.Invoke(); }