Example #1
0
        //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();
        }
Example #2
0
        public IEnumerator _EndTurn()
        {
            UIUnitAbilityButton.Hide();
            UIFactionAbilityButton.Hide();

            yield return(new WaitForSeconds(0.25f));

            GameControl.EndTurn();
        }
Example #3
0
        IEnumerator DelayEndTurn()
        {
            yield return(new WaitForSeconds(1f));

            while (!TurnControl.ClearToProceed())
            {
                yield return(null);
            }
            GameControl.EndTurn();
        }
Example #4
0
        //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();
            }
        }
Example #5
0
        //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();
        }