public void EnemyDied()
 {
     enemiesAlive--;
     if (enemiesAlive == 0)
     {
         WaveComplete?.Invoke();
         wave++;
         StartCoroutine(DelayStartWave());
     }
 }
예제 #2
0
        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();
     }
 }
예제 #4
0
        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());
            }
        }
예제 #5
0
 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
     }
 }
예제 #6
0
 public void End()
 {
     WaveComplete?.Invoke();
 }