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; } } }