private void WaveCheck() { waveTimer -= Time.deltaTime; if (allowWave) { if (waveTimer != 0) { if (currentWave > 0) { Item random = possibleItems.items[UnityEngine.Random.Range(0, possibleItems.items.Length)]; Instantiate(random, waveRewardLocation.position, Quaternion.identity); waveTimer = timeUntilWave; } if (currentWave >= maxWaves) { Item random = possibleItems.items[UnityEngine.Random.Range(0, possibleItems.items.Length)]; OnStageReward(random, random, random); Destroy(gameObject); } } if (Input.GetKeyDown(KeyCode.E) || waveTimer <= 0) { OnWaveChange?.Invoke(diffcultyScale); currentWave++; waveTimer = 0; allowWave = false; } } }
IEnumerator SpawnEnemies() { yield return(new WaitForSeconds(waveInfo.secondsBeforeEnemiesSpawns)); foreach (Wave wave in waveInfo.waves) { OnWaveChange?.Invoke(true); waveText.text = string.Format("Wave {0}", (++waveCount).ToString()); //Add all enemies to spawn for current wave foreach (EnemyInfo enemy in wave.enemies) { int number = Random.Range(enemy.minNumber, enemy.maxNumber); for (int i = 0; i < number; i++) { enemiesToSpawn.Add(enemy); } } enemyCount = enemiesToSpawn.Count; //Spawn enemies for (int i = enemiesToSpawn.Count - 1; i >= 0; i--) { yield return(new WaitForSeconds(wave.secondsBetweenEnemies)); EnemyInfo enemy = enemiesToSpawn[Random.Range(0, enemiesToSpawn.Count)]; enemiesToSpawn.Remove(enemy); Transform spawnpoint = waveInfo.enemySpawnpoints[(int)enemy.enemySize]. transforms[Random.Range(0, waveInfo.enemySpawnpoints[(int)enemy.enemySize].transforms.Length)]; Enemy e = Instantiate(enemy.enemy, spawnpoint.position, spawnpoint.rotation).GetComponent <Enemy>(); aliveEnemies.Add(e); e.Agent.Warp(spawnpoint.position); e.OnEnemyDeath += EnemyDied; enemiesLeftText.text = string.Format("Enemies left: {0}/{1}", aliveEnemies.Count, enemyCount); } //Done spawning enemies //Wait until all enemies are dead or wave time is over float time = Time.time; yield return(new WaitUntil(() => aliveEnemies.Count == 0 || Time.time >= time + wave.secondsToKillAllEnemies)); //Killed all enemies on time if (aliveEnemies.Count == 0) { OnWaveChange?.Invoke(false); yield return(new WaitForSeconds(wave.secondsBetweenWavesSucceeded)); } else { yield return(new WaitUntil(() => aliveEnemies.Count == 0)); OnWaveChange?.Invoke(false); yield return(new WaitForSeconds(wave.secondsBetweenWavesFailed)); } } yield return(new WaitUntil(() => aliveEnemies.Count == 0)); IngamePanelManager.Instance?.Victory(); }