IEnumerator RotateRoutine() { yield return(new WaitForSeconds(Random.Range(1f, 5f))); while (true) { while (unit != null && unit.InAction()) { yield return(new WaitForSeconds(Random.Range(1f, 3f))); } rotateSpeed = Random.Range(3, 6); float val = Random.Range(min, max); if (rotateAxis == _Axis.X) { targetRot = Quaternion.Euler(val, 0, 0); } else if (rotateAxis == _Axis.Y) { targetRot = Quaternion.Euler(0, val, 0); } else if (rotateAxis == _Axis.Z) { targetRot = Quaternion.Euler(0, 0, val); } yield return(new WaitForSeconds(Random.Range(3f, 6f))); } }
//AI routine to move a single unit IEnumerator _AIRoutineSingleUnit(UnitTB unit) { while (GameControlTB.IsActionInProgress()) { yield return(null); } yield return(new WaitForSeconds(1f)); unitInAction = true; instance.StartCoroutine(instance._MoveUnit(unit)); //wait a frame for the unit to start moving, set the inAction flag, etc.. yield return(null); while (unit.InAction() || GameControlTB.IsActionInProgress() || unitInAction) { yield return(null); } GameControlTB.OnEndTurn(); }
//AI routine to move a single unit IEnumerator _AIRoutineSingleUnit(UnitTB unit) { while(GameControlTB.IsActionInProgress()) yield return null; yield return new WaitForSeconds(1f); unitInAction=true; instance.StartCoroutine(instance._MoveUnit(unit)); //wait a frame for the unit to start moving, set the inAction flag, etc.. yield return null; while(unit.InAction() || GameControlTB.IsActionInProgress() || unitInAction){ yield return null; } GameControlTB.OnEndTurn(); }
//AI routine for faction based turn mode, AI will move all available unit for the faction //called by UnitControl in OnNextTurn IEnumerator _AIRoutine(int factionID) { while (GameControlTB.IsActionInProgress()) { yield return(null); } yield return(new WaitForSeconds(1f)); Faction faction = UnitControl.GetFactionInTurn(factionID); List <UnitTB> allUnit = faction.allUnitList; int counter = 0; if (GameControlTB.GetMoveOrder() == _MoveOrder.Free) { int count = allUnit.Count; //create a list (1, 2, 3..... ) to the size of the unit, this is for unit shuffling List <int> IDList = new List <int>(); for (int i = 0; i < count; i++) { IDList.Add(i); } for (int i = 0; i < count; i++) { //randomly select a unit to move int rand = UnityEngine.Random.Range(0, IDList.Count); /* * //if(counter%2==0) rand=0; * //else rand=IDList.Count-1; * * string label="rand: "+rand+" ("+IDList.Count+")"; * for(int nn=0; nn<IDList.Count; nn++){ * label+=" "+IDList[nn]; * } * Debug.Log(label); */ int ID = IDList[rand]; UnitTB unit = allUnit[ID]; //remove the unit from allUnit list so that it wont be selected again IDList.RemoveAt(rand); counter += 1; //move the unit unitInAction = true; StartCoroutine(_MoveUnit(unit)); //wait a frame for the unit to start moving, set the inAction flag, etc.. yield return(null); //wait while the unit is in action (making its move) //and while the game event is in progress (counter attack, death effect/animation, etc.) //and while the unit localUnitInactionFlag hasn't been cleared while (unit.InAction() || GameControlTB.IsActionInProgress() || unitInAction) { yield return(null); } //for counter-attack enabled, in case the unit is destroyed in after being countered if (unit.IsDestroyed()) { //label=""; for (int n = rand; n < IDList.Count; n++) { if (IDList[n] >= ID) { //label+=" "+IDList[n]; IDList[n] -= 1; } } //Debug.Log("unit destroyed "+label); } /* * label="rand: "+rand+" ("+IDList.Count+")"; * for(int nn=0; nn<IDList.Count; nn++){ * label+=" "+IDList[nn]; * } * Debug.Log(label); */ if (GameControlTB.battleEnded) { yield break; } } } else if (GameControlTB.GetMoveOrder() == _MoveOrder.FixedRandom || GameControlTB.GetMoveOrder() == _MoveOrder.FixedStatsBased) { for (int i = 0; i < allUnit.Count; i++) { UnitTB unit = allUnit[i]; //move the unit unitInAction = true; StartCoroutine(_MoveUnit(unit)); yield return(null); //wait while the unit is in action (making its move) //and while the game event is in progress (counter attack, death effect/animation, etc.) while (unit.InAction() || GameControlTB.IsActionInProgress() || unitInAction) { yield return(null); } if (GameControlTB.battleEnded) { yield break; } } } faction.allUnitMoved = true; yield return(new WaitForSeconds(0.5f)); EndTurn(); }