private IEnumerator waitForNextWave(float waitLength) { wavePointer += 1; if (wavePointer == waves.Count) { if (GameObject.FindGameObjectWithTag("GeneratorManager").GetComponent <GeneratorRepair>().GetGeneratorRepaired() == true) { current = waveState.gameWon; } else { current = waveState.gameLost; } } else //waits for 1/2 downtime, changes state to beforeWave { // waits another 1/2 downtime before starting wave yield return(new WaitForSeconds(waitLength / 2)); current = waveState.beforeWaveStart; yield return(new WaitForSeconds(waitLength / 2)); initiateWave(waves[wavePointer]); nextWaveStarted = false; } }
IEnumerator SpawnWave(Wave _wave) { Debug.Log("Spawning Wave: " + _wave.waveName); state = waveState.SPAWNING; for (int i = 0; i < _wave.count; i++) { SpawnEnemy(_wave.enemy[Random.Range(0, _wave.enemy.Length)]); yield return(new WaitForSeconds(1f / _wave.rate)); } state = waveState.WAITING; yield break; }
public void checkRemainingEnemies() { // // ## Checks how many enemies are present in scene & sets state to waveComplete depending // remainingEnemies = GameObject.FindGameObjectsWithTag("Enemy"); if (remainingEnemies.Length == 0) { current = waveState.waveComplete; } }
// Update is called once per frame void Update() { if (state == waveState.DONE) { return; } if (state == waveState.WAITING) { if (!enemyIsAlive()) { // Test to see if there are any waves left if we killed all the enemies. if (nextWave + 1 >= waves.Length && !loop) { if (!lastLevel) { MessageBroadcaster.Instance.BroadcastAnnouncement("Wave " + waves.Length + " of " + waves.Length + " Defeated. Level Complete"); PlayerManager.instance.playerPortal.SetActive(true); } else { Debug.Log("hey there, I'm done spawning now"); PlayerManager.instance.GameWin(); state = waveState.DONE; } } else { //Begin new round waveCompleted(); } return; } else { return; } } if (waveCountdown <= 0) { if (state != waveState.SPAWNING) { StartCoroutine(SpawnWave(waves[nextWave])); } } else { waveCountdown -= Time.deltaTime; } }
void waveCompleted() { Debug.Log("Wave Complete"); MessageBroadcaster.Instance.BroadcastAnnouncement("Wave " + (nextWave + 1) + " of " + waves.Length + " Defeated"); state = waveState.COUNTING; waveCountdown = timeBetweenWaves; if (nextWave + 1 > waves.Length) { nextWave = 0; Debug.Log("All waves complete: Looping..."); } else { nextWave++; } }
public void initiateWave(waveData wave) { // // ## Calls spawn script from Spawners in scene // ## Sets current state to waveActive // waveLength = wave.waveLength; waveTimer = 0; spawners = GameObject.FindGameObjectsWithTag("Spawner"); for (int i = 0; i < spawners.Length; i++) { spawners[i].GetComponent <spawnerScript>().startWave(waves[wavePointer]); } current = waveState.waveActive; }
private void FixedUpdate() { switch (current) { case waveState.beforeWaveStart: timeRemaining.text = "Get ready"; break; case waveState.waveActive: // // ## Updates wave UI timer, calculates if time has run out & changes state accordingly // waveTimer += Time.deltaTime; if (waveTimer > waveLength) { current = waveState.waveFail; } else { checkRemainingEnemies(); float remaining = waveLength - waveTimer; string minutes = Mathf.Floor(remaining / 60).ToString("00"); string seconds = (remaining % 60).ToString("00"); timeRemaining.text = minutes + ":" + seconds; } break; case waveState.waveFail: timeRemaining.text = "Wave failed!"; break; case waveState.waveComplete: // // ## checks if this is the last wave - if not, waits for DownTime until starting the next // ## if none come next, game is complete - if generator is fixed, the game is won // ## if generator is still broken, game is lost // timeRemaining.text = "Wave complete!"; if (nextWaveStarted == false) { if (doors[wavePointer] != null) { doors[wavePointer].SetLocked(false); } StartCoroutine(waitForNextWave(waves[wavePointer].downtime)); nextWaveStarted = true; } break; case waveState.gameWon: timeRemaining.text = "Game won!"; break; case waveState.gameLost: timeRemaining.text = "FAILED"; break; } }