Esempio n. 1
0
        /// <summary>
        /// 任务管线的执行函数
        /// </summary>
        public void Run()
        {
            //任务管线中无任务队列
            if (Tasks.Count == 0)
            {
                //EditorUtility.DisplayDialog("提示", "任务管线中无任务队列!", "OK");
                EndATBuildPipline();//重置相关属性
                return;
            }

            //上次执行任务如果失败,直接返回,管线终止
            if (LastTask == TaskStatus.Failure)
            {
                //EndATBuildPipline();//重置相关属性
                OnReverseTasks();
                return;
            }

            PiplineStatus = ATBuildPiplineStatus.Occupied;
            if (Tasks.Count > 0)
            {
                IBuildTask currentTask = Tasks.Peek();

                switch (currentTask.Status)
                {
                case TaskStatus.None:
                {        //只执行一次
                    currentTask.Status = TaskStatus.Start;
                    _currentTask       = currentTask;
                    currentTask.OnStatusChanged(currentTask.Status);
                    _lastTime = DateTime.Now;
                }
                break;

                case TaskStatus.Start:
                {        //开始任务
                    if (OnRePaintWindow())
                    {    //此处为了Repaint
                        currentTask.Status = TaskStatus.Running;
                        currentTask.OnReady();
                        currentTask.DoTask();
                    }
                }
                break;

                case TaskStatus.Running:
                {        //和刷新的帧数一样
                }
                break;

                case TaskStatus.Success:
                {
                    //TODO
                    currentTask.OnFinal();
                    currentTask = null;

                    IBuildTask task = Tasks.Dequeue();
                    ExcutedTasks.Add(task);
                    _currentTask = null;
                    _currentTime = new DateTime();
                    _lastTime    = new DateTime();
                }
                break;

                case TaskStatus.Failure:
                {
                    //TODO
                    //任务失败
                    currentTask.OnFinal();
                    currentTask = null;

                    LastTask     = TaskStatus.Failure;
                    _currentTime = new DateTime();
                    _lastTime    = new DateTime();
                }
                break;
                }
            }
        }