Ejemplo n.º 1
0
        public void RemoveTask(UITask task)
        {
            int index = taskStatusPairs.FindIndex(task, (t, item) => item == t.task);

            if (index != -1)
            {
                taskStatusPairs.RemoveAt(index);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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++;
            }
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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();
        }
Ejemplo n.º 7
0
 public TaskStatusPair(UITask task, UITaskState state)
 {
     this.task  = task;
     this.state = state;
 }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
 public void AddTask(UITask task)
 {
     taskStatusPairs.Add(new TaskStatusPair(task, UITaskState.Uninitialized));
 }