diff options
Diffstat (limited to 'Client/Assets/Behavior Designer/Runtime/Composites/Sequence.cs')
-rw-r--r-- | Client/Assets/Behavior Designer/Runtime/Composites/Sequence.cs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Client/Assets/Behavior Designer/Runtime/Composites/Sequence.cs b/Client/Assets/Behavior Designer/Runtime/Composites/Sequence.cs new file mode 100644 index 00000000..c82ce730 --- /dev/null +++ b/Client/Assets/Behavior Designer/Runtime/Composites/Sequence.cs @@ -0,0 +1,46 @@ +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.")]
+ [HelpURL("http://www.opsive.com/assets/BehaviorDesigner/documentation.php?id=25")]
+ [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;
+ }
+ }
+}
\ No newline at end of file |