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; } } }
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(); }
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; }
/// <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; // 如果沒有就跳出 } } }