Ejemplo n.º 1
0
        public void CompleteTask(UITask task)
        {
            if (task.owner == null)
            {
                throw new Exception("Tasks can only be completed by their owner.");
            }

            if (task.owner != this)
            {
                throw new Exception("Tasks can only be completed by their owner.");
            }

            if ((task.state & k_CanBeEnded) != 0)
            {
                task.state = UITaskState.Completed;
                task.OnCompleted();
                thisFrame.Remove(task);
                task.owner = null;
            }
        }
Ejemplo n.º 2
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.º 3
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);
        }