void NextWave() { if (WaveInProgress) { Debug.LogWarning("Can't start new wave, current one is in progress"); return; } _currentWaveIndex++; if (_currentWaveIndex >= Waves.Count) { if (InfiniteWave != null) { StartCoroutine(InfiniteWaveRoutine(InfiniteWave)); } else { Debug.LogWarning("No more waves"); } } else { CurrentWave = Waves[_currentWaveIndex]; StartCoroutine(WaveRoutine(CurrentWave)); } NewWaveStarted?.Invoke(); SoundManager.Instance.Play(WaveStartedSound); }
private void Update() { int enemyAliveCount = FindObjectsOfType <Enemy>().Length; if (enemyAliveCount == 0 && currentWaveSize == 0) { if (isCurrentlyWave) { CurrentWaveEnded?.Invoke(this, new SpawnControllerEventArgs(this)); timeUntilNextWave = timeBetweenWave; isCurrentlyWave = false; } timeUntilNextWave -= Time.deltaTime; if (timeUntilNextWave > 0) { return; } currentWaveSize = Random.Range(GetNewMinWave(), GetNewMaxWave()); isCurrentlyWave = true; NewWaveStarted?.Invoke(this, new SpawnControllerEventArgs(this)); timeUntilNextSpawn = 0; } if (!isCurrentlyWave || currentWaveSize == 0) { return; } timeUntilNextSpawn -= Time.deltaTime; if (timeUntilNextSpawn > 0) { return; } int objectIndex = GetRandomSpawnObject(); int locationIndex = GetRandomSpawnLocation(); GameObject enemyGameObject = Enemy.Create(spawnObjects[objectIndex], spawnPoints[locationIndex].Transform.position, playerController); enemyGameObject.transform.SetParent(spawnParent.transform); --currentWaveSize; timeUntilNextSpawn = Random.Range(GetNewMinTime(), GetNewMaxTime()); }