public void RemoveTask(UITask task) { int index = taskStatusPairs.FindIndex(task, (t, item) => item == t.task); if (index != -1) { taskStatusPairs.RemoveAt(index); } }
public void PauseTask(UITask task) { int index = taskStatusPairs.FindIndex(task, (t, item) => item == t.task); if (index != -1) { task.OnPaused(); taskStatusPairs[index] = new TaskStatusPair(task, UITaskState.Paused); } }
public UITask AddTask(UITask task) { if (task.owner != null) { throw new Exception("Tasks can only be added to a task runner once."); } task.owner = this; task.state = UITaskState.Pending; thisFrame.Add(task); return(task); }
public void RestartTask(UITask task) { if (task.owner == null) { throw new Exception("Tasks can only be cancelled by their owner."); } if (task.owner != this) { throw new Exception("Tasks can only be cancelled by their owner."); } if (task.state != UITaskState.Pending && task.state != UITaskState.Restarting) { task.state = UITaskState.Restarting; task.OnRestarted(); task.ResetCount++; } }
public void CancelTask(UITask task) { if (task.owner == null) { throw new Exception("Tasks can only be cancelled by their owner."); } if (task.owner != this) { throw new Exception("Tasks can only be cancelled by their owner."); } if ((task.state & k_CanBeEnded) != 0) { task.state = UITaskState.Cancelled; task.OnCancelled(); thisFrame.Remove(task); task.owner = null; } }
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 TaskStatusPair(UITask task, UITaskState state) { this.task = task; this.state = state; }
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); }
public void AddTask(UITask task) { taskStatusPairs.Add(new TaskStatusPair(task, UITaskState.Uninitialized)); }