Beispiel #1
0
 IEnumerator WaitForTurn(ITurn t)
 {
     ///Double null check because we are checking an interface
     while (!forceNext && ((t != null && !t.Equals(null)) && !t.HasEndedTurn() || TurnEventQueue.EventRunning))
     {
         // MDebug.Log("^turnSystem " + t.GetID() + " Events:" + TurnEventQueue.EventRunning.ToString() + "  hasEnded" + t.HasEndedTurn() + "\n" + TurnEventQueue.ToString2());
         yield return(null);
     }
 }
Beispiel #2
0
    IEnumerator RunTurns()
    {
        //Skip first frame to give time to register
        yield return(new WaitForSeconds(0.1f));

        SortListByTime();

        Current = GetNext();

        while (Current != null && !GameEndListener.GameEnded)
        {
            OnListUpdated.AttemptCall(Turnables);
            Current.TurnTimeUpdated += OnTurnPreview;
            Current.StartTurn();
            OnStartTurn.AttemptCall(Current);

            yield return(StartCoroutine(WaitForTurn(Current)));

            if (Current != null && !Current.Equals(null))
            {
                Current.TurnTimeUpdated -= OnTurnPreview;
                Current.EndTurn();
            }

            Current = null;

            currentTurn++;

            GlobalTurn(currentTurn);

            yield return(new WaitForSeconds(0.5f));

            NormalizeList();
            SortListByTime();

            Current = GetNext();

            forceNext = false;
        }
    }