From 97da432c35b8c7aaf9dd2c39e2aa4b1f55f36065 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 27 Jan 2021 16:15:06 +0800 Subject: +behaviour designer --- .../Runtime/Composites/Sequence.cs | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Client/Assets/Behavior Designer/Runtime/Composites/Sequence.cs (limited to 'Client/Assets/Behavior Designer/Runtime/Composites/Sequence.cs') 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 -- cgit v1.1-26-g67d0