示例#1
0
        public void DoTasks(float dT)
        {
            if (CurrentTask == null)
            {
                if (Tasks.Count > 0)
                {
                    if (GameScenes.MainGame.DebugKeyDown)
                    {
                    }
                    StartTask(Tasks.Dequeue());
                }
                return;
            }
            if (this.CurrentTask.Description != null)
            {
                this.Description = this.CurrentTask.Description;
                if (this.CurrentTask as Components.Tasks.ComplexTask != null && (this.CurrentTask as Components.Tasks.ComplexTask).CurrentTask != null)
                {
                    this.Description += ": " + (this.CurrentTask as Tasks.ComplexTask).CurrentTask.Description ?? "unspecified work";
                }
            }

            switch (CurrentTask.State)
            {
            case TaskState.Complete:
            {
                Console.Write(this.Name + " completed " + this.CurrentTask.Description + ".");
                CurrentTask.CompletedAction?.Invoke();
                CurrentTask = null;
                if (Tasks.Count > 0)
                {
                    StartTask(Tasks.Dequeue());
                }
                break;
            }

            case TaskState.InProgress:
            {
                CurrentTask.Progress(dT);
                break;
            }

            case TaskState.Suspended:
            {
                CurrentTask.State = TaskState.Enqueued;
                //
                CurrentTask.Actor = null;
                Console.Write(this.Name + " cancels " + this.CurrentTask.Description + ": " + CurrentTask.SuspendReason);
                //CurrentTask.SuspendReason = "";
                ParentMap.AvailableTasks.Add(CurrentTask);
                CurrentTask = null;
                break;
            }
            }
        }