Example #1
0
    private void UpdateQueuedStates()
    {
        bool  mustCalculateQueueTimes = true;
        float remainingTime           = -1f;

        var it = m_StateQueue.First;

        while (it != null)
        {
            if (mustCalculateQueueTimes)
            {
                remainingTime           = CalculateQueueTimes();
                mustCalculateQueueTimes = false;
            }

            QueuedState queuedState = it.Value;

            if (queuedState.fadeTime >= remainingTime)
            {
                Crossfade(queuedState.state.index, queuedState.fadeTime);
                mustCalculateQueueTimes = true;
                m_StateQueue.RemoveFirst();
                it = m_StateQueue.First;
            }
            else
            {
                it = it.Next;
            }
        }
    }
Example #2
0
 private void ClearQueuedStates()
 {
     using (var it = m_StateQueue.GetEnumerator()) {
         while (it.MoveNext())
         {
             QueuedState queuedState = it.Current;
             m_States.StopState(queuedState.state.index, true);
         }
     }
     m_StateQueue.Clear();
 }
Example #3
0
        public Message(int maxRetries)
        {
            PendingState    = new PendingState(this);
            QueuedState     = new QueuedState(this);
            InProgressState = new InProgressState(this);
            FailedState     = new FailedState(this);
            CompletedState  = new CompletedState(this);

            State = PendingState;

            MaxRetries = maxRetries;
            Retries    = -1;
        }
Example #4
0
    /// <summary>
    /// 更新Queue,檢查是否需要轉換到下一個state(fading)
    /// </summary>
    private void UpdateQueuedStates()
    {
        var it = m_StateQueue.First;

        while (it != null)
        {
            // 找當前state中最長的remainingTime
            float remainingTime = CalculateQueueTimes();

            QueuedState queuedState = it.Value;

            // 如果剩餘的時間小於fadeTime則直接fade過去。
            if (queuedState.fadeTime >= remainingTime)
            {
                Crossfade(queuedState.state.index, queuedState.fadeTime);
                m_StateQueue.RemoveFirst();
                it = m_StateQueue.First; // 繼續檢查下一個是否該進入fade
            }
            else
            {
                break; // 如果沒有就跳出
            }
        }
    }