// Update is called once per frame public void Update() { if (RoundState == E_RoundState.E_WAITING_FOR_START) { return; } for (int i = EnemiesAlive.Count - 1; i >= 0; i--) { if (EnemiesAlive[i].IsAlive == true) { continue; } EnemiesAlive.RemoveAt(i); } if (RoundState != E_RoundState.E_IN_PROGRESS) { return; } if (EnemiesAlive.Count == 0) { RoundState = E_RoundState.E_FINISHED; } }
IEnumerator SpawnEnemiesInRounds() { RoundState = E_RoundState.E_SPAWNING_ENEMIES; for (int i = 0; i < SpawnRounds.Length; i++) { RoundInfo round = SpawnRounds[i]; float delay = round.SpawnDelay; while (delay > 0) { if (EnemiesAlive.Count == 0 || EnemiesAlive.Count <= round.MinEnemiesFomLastRound) { break; } yield return(new WaitForSeconds(0.5f)); delay -= 0.5f; } for (int ii = 0; ii < round.Spawns.Length; ii++) { RoundInfo.SpawnInfo spawnInfo = round.Spawns[ii]; yield return(new WaitForSeconds(spawnInfo.SpawnDelay)); SpawnPointEnemy spawnpoint = GetAvailableSpawnPoint(spawnInfo.SpawnPoint == null || spawnInfo.SpawnPoint.Length == 0 ? SpawnPoints : spawnInfo.SpawnPoint); if (spawnInfo.RotateToPlayer) { Vector3 dir = Player.Instance.Agent.Position - spawnpoint.Transform.position; dir.Normalize(); spawnpoint.Transform.forward = dir; } GameObject enemy = Mission.Instance.GetHuman(spawnInfo.EnemyType, spawnpoint.Transform); while (enemy == null) { yield return(new WaitForSeconds(0.2f)); enemy = Mission.Instance.GetHuman(spawnInfo.EnemyType, spawnpoint.Transform); } CombatEffectsManager.Instance.PlaySpawnEffect(spawnpoint.Transform.position, spawnpoint.Transform.forward); Agent agent = enemy.GetComponent("Agent") as Agent; agent.PrepareForStart(); Mission.Instance.CurrentGameZone.AddEnemy(agent); EnemiesAlive.Add(agent); yield return(new WaitForSeconds(0.1f)); } } RoundState = E_RoundState.E_IN_PROGRESS; }
IEnumerator SpawnEnemies() { RoundState = E_RoundState.E_SPAWNING_ENEMIES; yield return(new WaitForEndOfFrame()); for (int i = 0; i < SpawnPoints.Length; i++) { yield return(new WaitForSeconds(0.2f)); if (SpawnPoints[i].Difficulty > Game.Instance.GameDifficulty) { continue; } Mission.Instance.CurrentGameZone.StartCoroutine(SpawnEnemy(SpawnPoints[i])); yield return(new WaitForSeconds(UnityEngine.Random.Range(0.1f, 0.4f))); } yield return(new WaitForSeconds(4.0f)); RoundState = E_RoundState.E_IN_PROGRESS; }