示例#1
0
    public void EndOfPlanification(int aTeam)
    {
        Unit unit = FindNextUnit(aTeam, myPlayer1ActiveUnitIndex);

        if (unit == null)
        {
            if (aTeam == 1)
            {
                myPlayerMatch.SetActiveUnit(null);
            }
            else
            {
                myPlayer2Match.SetActiveUnit(null);
            }
            myPlayer1ActiveUnitIndex = 0;
            myMatchState             = Data.MatchState.RESOLUTION;
        }
        else
        {
            if (aTeam == 1)
            {
                myPlayerMatch.SetActiveUnit(unit);
            }
            else
            {
                myPlayer2Match.SetActiveUnit(unit);
            }
        }
    }
示例#2
0
    private IEnumerator GameState()
    {
        myMatchState          = Data.MatchState.PREPARATION;
        myMatchStateText.text = "PREPARATION";

        myInitiativeOrder = new Unit[myPlayer1Units.Count + myPlayer2Units.Count];
        for (int i = 0; i < myPlayer1Units.Count; i++)
        {
            myInitiativeOrder[i] = myPlayer1Units[i];
        }
        for (int i = 0; i < myPlayer2Units.Count; i++)
        {
            myInitiativeOrder[myPlayer1Units.Count + i] = myPlayer2Units[i];
        }

        for (int i = 0; i < myInitiativeOrder.Length; i++)
        {
            Unit temp = myInitiativeOrder[i];
            int  rand = Random.Range(0, myInitiativeOrder.Length);
            myInitiativeOrder[i]    = myInitiativeOrder[rand];
            myInitiativeOrder[rand] = temp;
        }

        for (int i = 0; i < myInitiativeOrder.Length; i++)
        {
            myInitiativeObject.GetChild(i).GetComponent <RawImage>().color      = myInitiativeOrder[i].GetTeam() == 1 ? Color.red : Color.blue;
            myInitiativeObject.GetChild(i).GetComponentInChildren <Text>().text = "Unit-" + myInitiativeOrder[i].GetIndex();
        }

        yield return(new WaitForSeconds(1));

        //turn loop
        while (myMatchState != Data.MatchState.ENDING)
        {
            for (int i = 0; i < myInitiativeOrder.Length; i++)
            {
                myInitiativeOrder[i].ResetBeforeTurn();
            }

            myMatchState          = Data.MatchState.PLANIFICATION;
            myMatchStateText.text = "PLANIFICATION PLAYER 1";

            //player 1 turn
            myPlayerMatch.SetCanPlay(true);
            myPlayerMatch.SetActiveUnit(FindNextUnit(1, 0));
            while (myMatchState == Data.MatchState.PLANIFICATION)
            {
                yield return(null);
            }
            myPlayerMatch.SetCanPlay(false);

            yield return(new WaitForSeconds(1));

            myMatchStateText.text = "PLANIFICATION PLAYER 2";
            myMatchState          = Data.MatchState.PLANIFICATION;

            //player 2 turn
            myPlayer2Match.SetCanPlay(true);
            myPlayer2Match.SetActiveUnit(FindNextUnit(2, 0));
            while (myMatchState == Data.MatchState.PLANIFICATION)
            {
                yield return(null);
            }
            myPlayer2Match.SetCanPlay(false);

            myMatchStateText.text = "RESOLUTION";
            yield return(new WaitForSeconds(1));

            bool   resolve  = true;
            Unit[] tempUnit = new Unit[myInitiativeOrder.Length];
            tempUnit[0] = myInitiativeOrder[0];
            int unitAdded = 0;

            bool inTurn = true;
            while (inTurn)
            {
                while (resolve)
                {
                    bool allResolved = true;
                    for (int i = 0; i < unitAdded + 1; i++)
                    {
                        if (!tempUnit[i].Resolve())
                        {
                            allResolved = false;
                        }
                    }
                    if (allResolved)
                    {
                        resolve = false;
                    }
                    yield return(null);
                }
                for (int i = 0; i < unitAdded + 1; i++)
                {
                    tempUnit[i].NextStep();
                }

                if (unitAdded < myInitiativeOrder.Length - 1)
                {
                    unitAdded++;
                    tempUnit[unitAdded] = myInitiativeOrder[unitAdded];
                    resolve             = true;
                }
                else
                {
                    bool allFinished = true;
                    for (int i = 0; i < unitAdded + 1; i++)
                    {
                        if (!tempUnit[i].GetMovementFinished())
                        {
                            resolve     = true;
                            allFinished = false;
                        }
                    }

                    if (allFinished)
                    {
                        resolve = false;
                        inTurn  = false;
                    }
                }
            }

            yield return(new WaitForSeconds(1));
        }
    }