public IEnumerator StartAITurn() { yield return(new WaitForSeconds(1)); // Execute start turn field effects yield return(StartCoroutine(Battleground.Instance.UpdateNewTurnHazards(false))); // Apply all effects/dots on each enemy foreach (BaseUnit unit in _enemies) { unit.ExecuteStartTurnStatuses(); } // Check if they are all dead if (_enemies.Count < 1) { _turnManager.BattleWon(); yield break; } // cycle AI units List <BaseUnit> units = _partyManager.GetUnits(); for (int i = 0; i < _enemies.Count; i++) { EnemyUnit enemy = _enemies[i] as EnemyUnit; // Check if stunned and pass if so BaseStatus stun = enemy.SearchStatusLike(typeof(StunStatus)); if (stun != null) { Debug.Log(enemy.UnitName + " is skipping turn for stun"); continue; } // Pick a target for the card // TODO random for now, change later // BaseUnit[] target = { units[Random.Range(0, units.Count)] }; // Check if taunted, if not // Pick a target based on thread BaseStatus taunt = enemy.SearchStatusLike(typeof(TauntStatus)); BaseUnit[] target; if (taunt != null) { target = new BaseUnit[] { taunt.Owner } } ; else { target = new BaseUnit[] { _partyManager.PickUnitWithThreat() } }; // play the card enemy.GetNextCard().Play(target); yield return(new WaitForSeconds(1)); // TODO check animations and all effects for appropriate delay or add an event // Update the player units left units = _partyManager.GetUnits(); if (units.Count < 1) { _turnManager.BattleLost(); } } foreach (BaseUnit unit in _enemies) { unit.ExecuteEndTurnStatuses(); } // Execute end turn globals yield return(new WaitForSeconds(1)); GlobalsManager.Instance.ApplyEndTurn(false); yield return(new WaitForSeconds(1)); // End turn _turnManager.StartPlayerTurn(); }