Beispiel #1
0
        public virtual void Progress(float dT)
        {
            if (CurrentTask == null)
            {
                if (Subtasks.Count > 0)
                {
                    CurrentTask       = (Subtasks.Dequeue());
                    CurrentTask.Actor = this.Actor;
                    CurrentTask.State = TaskState.InProgress;
                    CurrentTask.Initialize();
                }
                return;
            }
            switch (CurrentTask.State)
            {
            case TaskState.Enqueued:
            {
                CurrentTask.State = TaskState.InProgress;
                CurrentTask.Initialize();
                break;
            }

            case TaskState.Complete:
            {
                CurrentTask.CompletedAction?.Invoke();
                CurrentTask = null;
                if (Subtasks.Count > 0)
                {
                    CurrentTask       = (Subtasks.Dequeue());
                    CurrentTask.Actor = this.Actor;
                    CurrentTask.State = TaskState.InProgress;
                    CurrentTask.Initialize();
                }
                else
                {
                    this.State = TaskState.Complete;
                }
                break;
            }

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

            case TaskState.Suspended:
            {
                CurrentTask.State = TaskState.Enqueued;

                this.State         = TaskState.Suspended;
                this.SuspendReason = this.CurrentTask.SuspendReason;
                Console.Write(this.Actor.Name + " cancels " + this.CurrentTask.Description + ": " + CurrentTask.SuspendReason);
                break;
            }
            }
        }