diff --git a/Assets/com.fluid.behavior-tree/Editor/BehaviorTree/Printer/VisualTask.cs b/Assets/com.fluid.behavior-tree/Editor/BehaviorTree/Printer/VisualTask.cs index d839410d..9e3d9d1a 100644 --- a/Assets/com.fluid.behavior-tree/Editor/BehaviorTree/Printer/VisualTask.cs +++ b/Assets/com.fluid.behavior-tree/Editor/BehaviorTree/Printer/VisualTask.cs @@ -25,7 +25,7 @@ public VisualTask (ITask task, IGraphContainer parentContainer) { AddBox(container); - if (task.Children != null) { + if (task.Children != null && task.Children.Count > 0) { var childContainer = new GraphContainerHorizontal(); foreach (var child in task.Children) { _children.Add(new VisualTask(child, childContainer)); diff --git a/Assets/com.fluid.behavior-tree/Runtime/BehaviorTree/Builder/BehaviorTreeBuilder.cs b/Assets/com.fluid.behavior-tree/Runtime/BehaviorTree/Builder/BehaviorTreeBuilder.cs index 8b1cb562..75724deb 100644 --- a/Assets/com.fluid.behavior-tree/Runtime/BehaviorTree/Builder/BehaviorTreeBuilder.cs +++ b/Assets/com.fluid.behavior-tree/Runtime/BehaviorTree/Builder/BehaviorTreeBuilder.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using CleverCrow.Fluid.BTs.Decorators; using CleverCrow.Fluid.BTs.TaskParents; @@ -179,7 +179,9 @@ public BehaviorTreeBuilder AddNode (ITask node) { } public BehaviorTreeBuilder Splice (BehaviorTree tree) { - _tree.Splice(PointerCurrent, tree); + if (tree != null && tree.Root != null) { + _tree.Splice(PointerCurrent, tree); + } return this; } diff --git a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/CompositeBase.cs b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/CompositeBase.cs index 3063b68d..fbb1d0a3 100644 --- a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/CompositeBase.cs +++ b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/CompositeBase.cs @@ -1,4 +1,4 @@ -namespace CleverCrow.Fluid.BTs.TaskParents.Composites { +namespace CleverCrow.Fluid.BTs.TaskParents.Composites { public abstract class CompositeBase : TaskParentBase { public int ChildIndex { get; protected set; } @@ -13,5 +13,9 @@ public override void Reset () { base.Reset(); } + + protected void NotifyChildEnd(int childEnding) { + Children[childEnding].End(); + } } } \ No newline at end of file diff --git a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/Selector.cs b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/Selector.cs index 0949bab2..93105623 100644 --- a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/Selector.cs +++ b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/Selector.cs @@ -1,4 +1,4 @@ -using CleverCrow.Fluid.BTs.Tasks; +using CleverCrow.Fluid.BTs.Tasks; namespace CleverCrow.Fluid.BTs.TaskParents.Composites { public class Selector : CompositeBase { @@ -10,9 +10,13 @@ protected override TaskStatus OnUpdate () { switch (child.Update()) { case TaskStatus.Success: + NotifyChildEnd(ChildIndex); return TaskStatus.Success; case TaskStatus.Continue: return TaskStatus.Continue; + case TaskStatus.Failure: + NotifyChildEnd(ChildIndex); + break; } ChildIndex++; diff --git a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/SelectorRandom.cs b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/SelectorRandom.cs index d86772d2..a67d0fa1 100644 --- a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/SelectorRandom.cs +++ b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/SelectorRandom.cs @@ -21,9 +21,13 @@ protected override TaskStatus OnUpdate () { switch (child.Update()) { case TaskStatus.Success: + NotifyChildEnd(ChildIndex); return TaskStatus.Success; case TaskStatus.Continue: return TaskStatus.Continue; + case TaskStatus.Failure: + NotifyChildEnd(ChildIndex); + break; } ChildIndex++; diff --git a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/Sequence.cs b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/Sequence.cs index aff2c919..ee0833a7 100644 --- a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/Sequence.cs +++ b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/Composites/Sequence.cs @@ -1,4 +1,4 @@ -using CleverCrow.Fluid.BTs.Tasks; +using CleverCrow.Fluid.BTs.Tasks; namespace CleverCrow.Fluid.BTs.TaskParents.Composites { public class Sequence : CompositeBase { @@ -9,8 +9,17 @@ protected override TaskStatus OnUpdate () { var child = Children[ChildIndex]; var status = child.Update(); - if (status != TaskStatus.Success) { - return status; + switch (status) { + case TaskStatus.Success: + NotifyChildEnd(ChildIndex); + break; + case TaskStatus.Failure: + NotifyChildEnd(ChildIndex); + return status; + case TaskStatus.Continue: + return status; + default: + break; } ChildIndex++; diff --git a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/TaskRoot.cs b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/TaskRoot.cs index 649c52b5..a56c314c 100644 --- a/Assets/com.fluid.behavior-tree/Runtime/TaskParents/TaskRoot.cs +++ b/Assets/com.fluid.behavior-tree/Runtime/TaskParents/TaskRoot.cs @@ -1,4 +1,4 @@ -using CleverCrow.Fluid.BTs.Tasks; +using CleverCrow.Fluid.BTs.Tasks; namespace CleverCrow.Fluid.BTs.TaskParents { public class TaskRoot : TaskParentBase { @@ -16,6 +16,8 @@ protected override TaskStatus OnUpdate () { } public override void End () { + var child = Children[0]; + child.End(); } } }