internal void OnUpdate() { UITask[] tasks = thisFrame.Array; float delta = Time.unscaledDeltaTime; int count = thisFrame.Count; for (int i = 0; i < count; i++) { UITask task = tasks[i]; UITaskState state = task.state; float time = delta; if (state == UITaskState.Pending) { task.OnInitialized(); task.StartTime = Time.unscaledTime; state = UITaskState.Running; time = 0; } else if (state == UITaskState.Restarting) { task.RestartTime = Time.unscaledTime; time = 0; } if ((state & (UITaskState.Running | UITaskState.Restarting)) != 0) { task.FrameCount++; task.ElapsedTime += time; UITaskResult result = task.Run(time); switch (result) { case UITaskResult.Running: task.state = UITaskState.Running; nextFrame.Add(task); break; case UITaskResult.Completed: task.state = UITaskState.Completed; task.OnCompleted(); break; case UITaskResult.Restarted: task.ResetCount++; task.state = UITaskState.Restarting; nextFrame.Add(task); break; case UITaskResult.Failed: task.state = UITaskState.Failed; task.OnFailed(); task.owner = null; break; case UITaskResult.Cancelled: task.state = UITaskState.Cancelled; task.OnCancelled(); task.owner = null; break; default: task.state = UITaskState.Cancelled; task.OnCancelled(); task.owner = null; break; } } } LightList <UITask> swap = nextFrame; nextFrame = thisFrame; thisFrame = swap; nextFrame.QuickClear(); }
public Task0(int targetRunCount, UITaskResult result = UITaskResult.Completed) { this.targetRunCount = targetRunCount; this.result = result; }
public override UITaskResult Run(float deltaTime) { TaskStatusPair[] pairs = taskStatusPairs.Array; int completedCount = 0; int failedCount = 0; for (int i = 0; i < taskStatusPairs.Count; i++) { TaskStatusPair pair = pairs[i]; UITaskState currentTaskState = pair.state; UITask task = pair.task; if (currentTaskState == UITaskState.Uninitialized) { currentTaskState = UITaskState.Pending; task.OnInitialized(); } if ((currentTaskState & (UITaskState.Pending | UITaskState.Running)) != 0) { UITaskResult result = task.Run(currentTaskState == UITaskState.Pending ? 0 : deltaTime); switch (result) { case UITaskResult.Running: break; case UITaskResult.Completed: task.OnCompleted(); break; case UITaskResult.Restarted: break; case UITaskResult.Failed: task.OnFailed(); break; case UITaskResult.Cancelled: task.OnCancelled(); break; case UITaskResult.Paused: task.OnPaused(); break; default: throw new ArgumentOutOfRangeException(); } } if (currentTaskState == UITaskState.Completed) { completedCount++; } if (currentTaskState == UITaskState.Failed) { break; } } if (failedCount > 0) { return(UITaskResult.Failed); } if (completedCount == taskStatusPairs.Count) { return(UITaskResult.Completed); } return(UITaskResult.Running); }