Esempio n. 1
0
    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)));
        }
    }
Esempio n. 2
0
    //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();
    }
Esempio n. 3
0
    //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();
    }
Esempio n. 4
0
    //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();
    }