void OnEndTurnButton() { if (GameControlTB.IsActionInProgress()) { return; } if (GameControlTB.GetTurnMode() != _TurnMode.SingleUnitPerTurn) { if (GameControlTB.GetMoveOrder() == _MoveOrder.Free) { if (UnitControl.selectedUnit != null) { UnitControl.selectedUnit.moved = true; UnitControl.selectedUnit.attacked = true; UnitControl.MoveUnit(UnitControl.selectedUnit); } } } GameControlTB.OnEndTurn(); }
//buffer function for select when the selection is initiated by player, check turn mode condition before proceed public void ManualSelect() { //if not in target select phase for unitAbility if (!GridManager.IsInTargetTileSelectMode()) { if (!GameControlTB.AllowUnitSwitching()) { //Debug.Log("unit swtiching is lock"); return; } _MoveOrder moveOrder = GameControlTB.GetMoveOrder(); //if turn mode and turnOrder doesnt not support unit switching, return if (moveOrder != _MoveOrder.Free) { return; } _TurnMode turnMode = GameControlTB.GetTurnMode(); if (turnMode == _TurnMode.FactionSingleUnitPerTurnAll) { if (unit.MovedForTheRound()) { Debug.Log("unit has been moved"); return; } } else if (turnMode == _TurnMode.SingleUnitPerTurn) { //Debug.Log("turn mode not allow switching"); return; } } Select(); }
//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(); }