123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- namespace BehaviorDesigner.Runtime.Tasks
- {
- [TaskDescription("The sequence task is similar to an \"and\" operation. It will return failure as soon as one of its child tasks return failure. " +
- "If a child task returns success then it will sequentially run the next task. If all child tasks return success then it will return success.")]
- [TaskIcon("{SkinColor}SequenceIcon.png")]
- public class Sequence : Composite
- {
- // The index of the child that is currently running or is about to run.
- private int currentChildIndex = 0;
- // The task status of the last child ran.
- private TaskStatus executionStatus = TaskStatus.Inactive;
- public override int CurrentChildIndex()
- {
- return currentChildIndex;
- }
- public override bool CanExecute()
- {
- // We can continue to execuate as long as we have children that haven't been executed and no child has returned failure.
- return currentChildIndex < children.Count && executionStatus != TaskStatus.Failure;
- }
- public override void OnChildExecuted(TaskStatus childStatus)
- {
- // Increase the child index and update the execution status after a child has finished running.
- currentChildIndex++;
- executionStatus = childStatus;
- }
- public override void OnConditionalAbort(int childIndex)
- {
- // Set the current child index to the index that caused the abort
- currentChildIndex = childIndex;
- executionStatus = TaskStatus.Inactive;
- }
- public override void OnEnd()
- {
- // All of the children have run. Reset the variables back to their starting values.
- executionStatus = TaskStatus.Inactive;
- currentChildIndex = 0;
- }
- }
- }
|