Skip to content

Commit 708bdda

Browse files
committed
Builder is now extended instead of being inherited for extension
1 parent e8f2a79 commit 708bdda

14 files changed

+240
-170
lines changed

Assets/FluidBehaviorTree/Scripts/BehaviorTree/BehaviorTreeBuilder.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.

Assets/FluidBehaviorTree/Scripts/BehaviorTree/BehaviorTreeBuilderBase.cs

Lines changed: 0 additions & 149 deletions
This file was deleted.

Assets/FluidBehaviorTree/Scripts/BehaviorTree/BehaviorTreeBuilderBase.cs.meta

Lines changed: 0 additions & 11 deletions
This file was deleted.

Assets/FluidBehaviorTree/Scripts/BehaviorTree/Builder.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Adnc.FluidBT.Decorators;
4+
using Adnc.FluidBT.TaskParents;
5+
using Adnc.FluidBT.TaskParents.Composites;
6+
using Adnc.FluidBT.Tasks;
7+
using Adnc.FluidBT.Tasks.Actions;
8+
using UnityEngine;
9+
10+
namespace Adnc.FluidBT.Trees {
11+
public class BehaviorTreeBuilder {
12+
private readonly BehaviorTree _tree;
13+
private readonly List<ITaskParent> _pointers = new List<ITaskParent>();
14+
15+
private ITaskParent PointerCurrent {
16+
get {
17+
if (_pointers.Count == 0) return null;
18+
return _pointers[_pointers.Count - 1];
19+
}
20+
}
21+
22+
public BehaviorTreeBuilder (GameObject owner) {
23+
_tree = new BehaviorTree(owner);
24+
_pointers.Add(_tree.Root);
25+
}
26+
27+
public BehaviorTreeBuilder ParentTask<P> (string name) where P : ITaskParent, new() {
28+
var parent = new P { Name = name };
29+
AddNode(parent);
30+
_pointers.Add(parent);
31+
32+
return this;
33+
}
34+
35+
public BehaviorTreeBuilder Decorator (string name, Func<ITask, TaskStatus> logic) {
36+
var decorator = new DecoratorGeneric {
37+
updateLogic = logic,
38+
Name = name
39+
};
40+
41+
AddNode(decorator);
42+
_pointers.Add(decorator);
43+
44+
return this;
45+
}
46+
47+
public BehaviorTreeBuilder Decorator (Func<ITask, TaskStatus> logic) {
48+
return Decorator("decorator", logic);
49+
}
50+
51+
public BehaviorTreeBuilder Inverter (string name = "inverter") {
52+
return ParentTask<Inverter>(name);
53+
}
54+
55+
public BehaviorTreeBuilder ReturnSuccess (string name = "return success") {
56+
return ParentTask<ReturnSuccess>(name);
57+
}
58+
59+
public BehaviorTreeBuilder ReturnFailure (string name = "return failure") {
60+
return ParentTask<ReturnFailure>(name);
61+
}
62+
63+
public BehaviorTreeBuilder Sequence (string name = "sequence") {
64+
return ParentTask<Sequence>(name);
65+
}
66+
67+
public BehaviorTreeBuilder Selector (string name = "selector") {
68+
return ParentTask<Selector>(name);
69+
}
70+
71+
public BehaviorTreeBuilder Parallel (string name = "parallel") {
72+
return ParentTask<Parallel>(name);
73+
}
74+
75+
public BehaviorTreeBuilder Do (string name, Func<TaskStatus> action) {
76+
return AddNode(new ActionGeneric {
77+
Name = name,
78+
updateLogic = action
79+
});
80+
}
81+
82+
public BehaviorTreeBuilder Do (Func<TaskStatus> action) {
83+
return Do("action", action);
84+
}
85+
86+
public BehaviorTreeBuilder Condition (string name, Func<bool> action) {
87+
return AddNode(new ConditionGeneric {
88+
Name = name,
89+
updateLogic = action
90+
});
91+
}
92+
93+
public BehaviorTreeBuilder Condition (Func<bool> action) {
94+
return Condition("condition", action);
95+
}
96+
97+
public BehaviorTreeBuilder RandomChance (string name, int chance, int outOf, int seed = 0) {
98+
return AddNode(new RandomChance {
99+
Name = name,
100+
chance = chance,
101+
outOf = outOf,
102+
seed = seed
103+
});
104+
}
105+
106+
public BehaviorTreeBuilder RandomChance (int chance, int outOf, int seed = 0) {
107+
return RandomChance("random chance", chance, outOf, seed);
108+
}
109+
110+
public BehaviorTreeBuilder Wait (string name, int turns = 1) {
111+
return AddNode(new Wait {
112+
Name = name,
113+
turns = turns
114+
});
115+
}
116+
117+
public BehaviorTreeBuilder Wait (int turns = 1) {
118+
return Wait("wait", turns);
119+
}
120+
121+
public BehaviorTreeBuilder AddNode (ITask node) {
122+
_tree.AddNode(PointerCurrent, node);
123+
return this;
124+
}
125+
126+
public BehaviorTreeBuilder Splice (BehaviorTree tree) {
127+
_tree.Splice(PointerCurrent, tree);
128+
129+
return this;
130+
}
131+
132+
public BehaviorTreeBuilder End () {
133+
_pointers.RemoveAt(_pointers.Count - 1);
134+
135+
return this;
136+
}
137+
138+
public BehaviorTree Build () {
139+
return _tree;
140+
}
141+
}
142+
}

Assets/FluidBehaviorTree/Scripts/BehaviorTree/Builder/Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System;
2+
using Adnc.FluidBT.Tasks;
3+
using Adnc.FluidBT.Tasks.Actions;
4+
using NUnit.Framework;
5+
6+
namespace Adnc.FluidBT.Trees.Testing {
7+
public static class BehaviorTreeExtensionActionExamples {
8+
public static BehaviorTreeBuilder ExampleAction (this BehaviorTreeBuilder builder, string name, Action callback) {
9+
builder.AddNode(new BehaviorTreeBuilderExtensionActionTest.ExtensionAction {
10+
Name = name,
11+
callback = callback,
12+
});
13+
14+
return builder;
15+
}
16+
}
17+
18+
public class BehaviorTreeBuilderExtensionActionTest {
19+
public class ExtensionAction : ActionBase {
20+
public Action callback;
21+
22+
protected override TaskStatus OnUpdate () {
23+
callback();
24+
return TaskStatus.Success;
25+
}
26+
}
27+
28+
[Test]
29+
public void It_should_run_the_custom_action () {
30+
var result = false;
31+
var tree = new BehaviorTreeBuilder(null)
32+
.Sequence()
33+
.ExampleAction("test", () => result = true)
34+
.End()
35+
.Build();
36+
37+
tree.Tick();
38+
39+
Assert.IsTrue(result);
40+
}
41+
}
42+
}

Assets/FluidBehaviorTree/Scripts/BehaviorTree/Builder/Editor/BehaviorTreeBuilderExtensionActionTest.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)