Skip to content

Commit a8b514b

Browse files
committed
Parent task AddChild method ignores disabled nodes
1 parent cfec8af commit a8b514b

File tree

11 files changed

+77
-52
lines changed

11 files changed

+77
-52
lines changed

Assets/FluidBehaviorTree/Editor/Testing/BehaviorTree/BehaviorTreeTest.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class AwakeEvent : BehaviorTreeTests {
3232
[Test]
3333
public void Trigger_on_all_nodes_with_the_awake_interface () {
3434
var node = Substitute.For<INodeAwakeExample>();
35+
node.Enabled.Returns(true);
3536

3637
tree.AddNode(tree.Root, node);
3738
tree.Setup();
@@ -42,6 +43,7 @@ public void Trigger_on_all_nodes_with_the_awake_interface () {
4243
[Test]
4344
public void Calling_setup_again_should_not_refire_awake () {
4445
var node = Substitute.For<INodeAwakeExample>();
46+
node.Enabled.Returns(true);
4547

4648
tree.AddNode(tree.Root, node);
4749
tree.Setup();
@@ -57,6 +59,7 @@ public class AddNodeMethod : BehaviorTreeTests {
5759
[SetUp]
5860
public void SetDefaultAction () {
5961
action = Substitute.For<INodeAwakeExample>();
62+
action.Enabled.Returns(true);
6063
}
6164

6265
public class AddNodeMethodSuccess : AddNodeMethod {
@@ -103,9 +106,7 @@ public class TickMethod : BehaviorTreeTests {
103106

104107
[SetUp]
105108
public void SetDefaultAction () {
106-
action = Substitute.For<ITask>();
107-
action.Update().Returns(TaskStatus.Success);
108-
action.Enabled.Returns(true);
109+
action = A.TaskStub().Build();
109110

110111
tree.Root.AddChild(action);
111112
}

Assets/FluidBehaviorTree/Editor/Testing/Builders/TaskStubBuilder.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Adnc.FluidBT.Tasks;
22
using NSubstitute;
3+
using NSubstitute.ReturnsExtensions;
34

45
namespace Adnc.FluidBT.Testing {
56
public class TaskStubBuilder {
@@ -32,6 +33,8 @@ public ITask Build () {
3233

3334
if (_abortConditionSelf) {
3435
task.GetAbortCondition().Returns(task);
36+
} else {
37+
task.GetAbortCondition().ReturnsNull();
3538
}
3639

3740
return task;

Assets/FluidBehaviorTree/Editor/Testing/ParentTasks/CompositeBaseTest.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,40 @@ public void SetChildIndex (int index) {
1616
public void Set_composite () {
1717
_composite = new CompositeExample();
1818
}
19+
20+
public class AddChild : CompositeBaseTest {
21+
[Test]
22+
public void Adds_first_node_to_self_abort_if_condition () {
23+
var child = A.TaskStub().WithAbortConditionSelf(true).Build();
24+
25+
_composite.AbortType = AbortType.Self;
26+
_composite.AddChild(child);
27+
28+
Assert.AreEqual(child, _composite.SelfAbortTask);
29+
}
30+
31+
[Test]
32+
public void Does_not_add_first_node_as_self_abort_if_non_condition () {
33+
var child = A.TaskStub().Build();
34+
35+
_composite.AddChild(child);
36+
37+
Assert.AreEqual(null, _composite.SelfAbortTask);
38+
}
39+
40+
[Test]
41+
public void Does_not_add_disabled_nodes () {
42+
var child = A.TaskStub()
43+
.WithEnabled(false)
44+
.WithAbortConditionSelf(true)
45+
.Build();
46+
47+
_composite.AbortType = AbortType.Self;
48+
_composite.AddChild(child);
49+
50+
Assert.AreEqual(null, _composite.SelfAbortTask);
51+
}
52+
}
1953

2054
public class EndMethod : CompositeBaseTest {
2155
[Test]

Assets/FluidBehaviorTree/Editor/Testing/ParentTasks/SelectorTest.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ public void Stops_on_first_success_node () {
109109
}
110110
}
111111
}
112+
113+
public class ConditionalAbortSelf : UpdateMethod {
114+
public void Revaultes_first_condition_node_when_it_goes_from_failure_to_success () {
115+
}
116+
}
112117
}
113118
}
114119
}

Assets/FluidBehaviorTree/Editor/Testing/ParentTasks/TaskParentTest.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ protected override TaskStatus OnUpdate () {
2828
public class ResetMethod : TaskParentTest {
2929
[Test]
3030
public void Runs_reset_on_the_child_task () {
31-
var task = Substitute.For<ITask>();
31+
var task = A.TaskStub().Build();
3232
task.Enabled.Returns(true);
3333
taskParent.AddChild(task);
3434

@@ -39,8 +39,8 @@ public void Runs_reset_on_the_child_task () {
3939

4040
[Test]
4141
public void Runs_reset_on_multiple_child_tasks () {
42-
var taskA = Substitute.For<ITask>();
43-
var taskB = Substitute.For<ITask>();
42+
var taskA = A.TaskStub().Build();
43+
var taskB = A.TaskStub().Build();
4444
taskParent.AddChild(taskA);
4545
taskParent.AddChild(taskB);
4646

@@ -81,6 +81,17 @@ public void Ignores_overflowing_children () {
8181

8282
Assert.AreEqual(1, taskParent.children.Count);
8383
}
84+
85+
[Test]
86+
public void Does_not_add_disabled_children () {
87+
var child = A.TaskStub()
88+
.WithEnabled(false)
89+
.Build();
90+
91+
taskParent.AddChild(child);
92+
93+
Assert.AreEqual(0, taskParent.children.Count);
94+
}
8495
}
8596
}
8697
}

Assets/FluidBehaviorTree/Editor/Testing/ParentTasks/TaskRootTest.cs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ public void It_should_initialize () {
2020

2121
[Test]
2222
public void It_should_add_a_child () {
23-
root.AddChild(Substitute.For<ITask>());
23+
root.AddChild(A.TaskStub().Build());
2424

2525
Assert.AreEqual(1, root.children.Count);
2626
}
2727

2828
[Test]
2929
public void It_should_not_allow_two_children () {
30-
root.AddChild(Substitute.For<ITask>());
31-
root.AddChild(Substitute.For<ITask>());
30+
root.AddChild(A.TaskStub().Build());
31+
root.AddChild(A.TaskStub().Build());
3232

3333
Assert.AreEqual(1, root.children.Count);
3434
}
@@ -66,16 +66,6 @@ public void Return_success_if_no_child () {
6666
Assert.AreEqual(TaskStatus.Success, root.Update());
6767
}
6868

69-
[Test]
70-
public void Does_not_tick_a_disabled_child_node () {
71-
task.Enabled.Returns(false);
72-
task.Update().Returns(TaskStatus.Success);
73-
74-
root.Update();
75-
76-
task.DidNotReceive().Update();
77-
}
78-
7969
[Test]
8070
public void Does_tick_an_enabled_child_node () {
8171
root.Update();

Assets/FluidBehaviorTree/Editor/Testing/ParentTasks/TaskSequenceTest.cs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,30 +22,13 @@ public void SetupChild () {
2222
}
2323

2424
private ITask CreateTaskStub () {
25-
var task = Substitute.For<ITask>();
26-
task.Enabled.Returns(true);
27-
task.Update().Returns(TaskStatus.Success);
25+
var task = A.TaskStub().Build();
2826

2927
return task;
3028
}
3129

3230
public class UpdateMethod : TaskSequenceTest {
3331
public class UpdateMethodMisc : UpdateMethod {
34-
[Test]
35-
public void Skips_nodes_marked_disabled () {
36-
_childA.Enabled.Returns(false);
37-
38-
_sequence.Update();
39-
40-
_sequence.children.ForEach((child) => {
41-
if (child.Enabled) {
42-
child.Received(1).Update();
43-
} else {
44-
child.Received(0).Update();
45-
}
46-
});
47-
}
48-
4932
[Test]
5033
public void It_should_run_update_on_all_success_child_tasks () {
5134
_sequence.Update();

Assets/FluidBehaviorTree/Scripts/TaskParents/Composites/CompositeBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public abstract class CompositeBase : TaskParentBase {
88
public List<ITask> AbortLowerPriorities { get; } = new List<ITask>();
99

1010
public override ITaskParent AddChild (ITask child) {
11-
if (children.Count == 0) {
11+
if (children.Count == 0 && child.Enabled) {
1212
SelfAbortTask = child.GetAbortCondition();
1313
}
1414

Assets/FluidBehaviorTree/Scripts/TaskParents/Composites/Sequence.cs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,15 @@ protected override TaskStatus OnUpdate () {
2323
for (var i = ChildIndex; i < children.Count; i++) {
2424
var child = children[ChildIndex];
2525

26-
if (child.Enabled) {
27-
var status = child.Update();
28-
if (status != TaskStatus.Success) {
29-
return status;
30-
}
26+
var status = child.Update();
27+
if (status != TaskStatus.Success) {
28+
return status;
29+
}
3130

32-
if (child.IsLowerPriority) {
33-
var abortCondition = child.GetAbortCondition();
34-
if (abortCondition != null) {
35-
AbortLowerPriorities.Add(abortCondition);
36-
}
31+
if (child.IsLowerPriority) {
32+
var abortCondition = child.GetAbortCondition();
33+
if (abortCondition != null) {
34+
AbortLowerPriorities.Add(abortCondition);
3735
}
3836
}
3937

Assets/FluidBehaviorTree/Scripts/TaskParents/Root/TaskRoot.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ protected override TaskStatus OnUpdate () {
1010
}
1111

1212
var child = children[0];
13-
if (!child.Enabled) {
14-
return TaskStatus.Success;
15-
}
16-
1713
return child.Update();
1814
}
1915
}

0 commit comments

Comments
 (0)