//move a single unit only IEnumerator SingleUnitRoutine(Unit unit) { GameControl.DisplayMessage("AI's Turn"); yield return(new WaitForSeconds(0.1f)); if (!unit.IsStunned()) { Faction faction = FactionManager.GetFaction(unit.factionID); _AIMode activeAIMode = !faction.useDefaultAIMode ? faction.aiMode : mode; while (unit.moveRemain > 0 || unit.CanAttack()) { StartCoroutine(MoveUnitRoutine(unit, activeAIMode)); while (movingUnit) { yield return(null); } if (unit == null) { break; } if (unit.attackRemain > 0 || unit.CanAttack()) { yield return(new WaitForSeconds(.1f)); } } //~ StartCoroutine(MoveUnitRoutine(unit, activeAIMode)); //~ while(movingUnit) yield return null; //~ yield return new WaitForSeconds(0.25f); } GameControl.EndTurn(); }
public IEnumerator _EndTurn() { UIUnitAbilityButton.Hide(); UIFactionAbilityButton.Hide(); yield return(new WaitForSeconds(0.25f)); GameControl.EndTurn(); }
IEnumerator DelayEndTurn() { yield return(new WaitForSeconds(1f)); while (!TurnControl.ClearToProceed()) { yield return(null); } GameControl.EndTurn(); }
//for when selected unit is destroyed during counter attack public IEnumerator AutoEndTurn() { while (!ClearToProceed()) { yield return(null); } yield return(new WaitForSeconds(0.5f)); if (GameControl.GetGamePhase() != _GamePhase.Over) { GameControl.EndTurn(); } }
//move the whole faction, unit by unit IEnumerator FactionRoutine(Faction faction) { GameControl.DisplayMessage("AI's Turn"); yield return(new WaitForSeconds(0.3f)); //create a new list so no unit will be skipped is one of them is somehow destroyed (by counter attack); List <Unit> unitList = new List <Unit>(faction.allUnitList); for (int i = 0; i < unitList.Count; i++) { AIDebug("Start moving unit " + unitList[i].gameObject.name); yield return(new WaitForSeconds(unitInterval)); if (unitList[i].IsStunned()) { continue; } _AIMode activeAIMode = !faction.useDefaultAIMode ? faction.aiMode : mode; while (unitList[i].moveRemain > 0 || unitList[i].CanAttack()) { AIDebug("Moving unit " + unitList[i].gameObject.name + " (move remain:" + (unitList[i].moveRemain > 0) + ", can attack:" + unitList[i].CanAttack() + ")"); StartCoroutine(MoveUnitRoutine(unitList[i], activeAIMode)); while (movingUnit) { yield return(null); } if (unitList[i] == null) { break; } if (unitList[i].moveRemain > 0 || unitList[i].CanAttack()) { yield return(new WaitForSeconds(.1f)); } } //~ StartCoroutine(MoveUnitRoutine(unitList[i], activeAIMode)); //~ while(movingUnit) yield return null; //~ yield return new WaitForSeconds(0.25f); if (GameControl.GetGamePhase() == _GamePhase.Over) { yield break; } } GameControl.EndTurn(); }