Skip to content

Commit 6737183

Browse files
committed
Merge branch 'feature/extensions-over-inheritance' into develop
2 parents e8f2a79 + 57b283b commit 6737183

14 files changed

+282
-301
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: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
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+
30+
return AddNodeWithPointer(parent);
31+
}
32+
33+
public BehaviorTreeBuilder Decorator (string name, Func<ITask, TaskStatus> logic) {
34+
var decorator = new DecoratorGeneric {
35+
updateLogic = logic,
36+
Name = name
37+
};
38+
39+
return AddNodeWithPointer(decorator);
40+
}
41+
42+
public BehaviorTreeBuilder AddNodeWithPointer (ITaskParent task) {
43+
AddNode(task);
44+
_pointers.Add(task);
45+
46+
return this;
47+
}
48+
49+
public BehaviorTreeBuilder Decorator (Func<ITask, TaskStatus> logic) {
50+
return Decorator("decorator", logic);
51+
}
52+
53+
public BehaviorTreeBuilder Inverter (string name = "inverter") {
54+
return ParentTask<Inverter>(name);
55+
}
56+
57+
public BehaviorTreeBuilder ReturnSuccess (string name = "return success") {
58+
return ParentTask<ReturnSuccess>(name);
59+
}
60+
61+
public BehaviorTreeBuilder ReturnFailure (string name = "return failure") {
62+
return ParentTask<ReturnFailure>(name);
63+
}
64+
65+
public BehaviorTreeBuilder Sequence (string name = "sequence") {
66+
return ParentTask<Sequence>(name);
67+
}
68+
69+
public BehaviorTreeBuilder Selector (string name = "selector") {
70+
return ParentTask<Selector>(name);
71+
}
72+
73+
public BehaviorTreeBuilder Parallel (string name = "parallel") {
74+
return ParentTask<Parallel>(name);
75+
}
76+
77+
public BehaviorTreeBuilder Do (string name, Func<TaskStatus> action) {
78+
return AddNode(new ActionGeneric {
79+
Name = name,
80+
updateLogic = action
81+
});
82+
}
83+
84+
public BehaviorTreeBuilder Do (Func<TaskStatus> action) {
85+
return Do("action", action);
86+
}
87+
88+
public BehaviorTreeBuilder Condition (string name, Func<bool> action) {
89+
return AddNode(new ConditionGeneric {
90+
Name = name,
91+
updateLogic = action
92+
});
93+
}
94+
95+
public BehaviorTreeBuilder Condition (Func<bool> action) {
96+
return Condition("condition", action);
97+
}
98+
99+
public BehaviorTreeBuilder RandomChance (string name, int chance, int outOf, int seed = 0) {
100+
return AddNode(new RandomChance {
101+
Name = name,
102+
chance = chance,
103+
outOf = outOf,
104+
seed = seed
105+
});
106+
}
107+
108+
public BehaviorTreeBuilder RandomChance (int chance, int outOf, int seed = 0) {
109+
return RandomChance("random chance", chance, outOf, seed);
110+
}
111+
112+
public BehaviorTreeBuilder Wait (string name, int turns = 1) {
113+
return AddNode(new Wait {
114+
Name = name,
115+
turns = turns
116+
});
117+
}
118+
119+
public BehaviorTreeBuilder Wait (int turns = 1) {
120+
return Wait("wait", turns);
121+
}
122+
123+
public BehaviorTreeBuilder AddNode (ITask node) {
124+
_tree.AddNode(PointerCurrent, node);
125+
return this;
126+
}
127+
128+
public BehaviorTreeBuilder Splice (BehaviorTree tree) {
129+
_tree.Splice(PointerCurrent, tree);
130+
131+
return this;
132+
}
133+
134+
public BehaviorTreeBuilder End () {
135+
_pointers.RemoveAt(_pointers.Count - 1);
136+
137+
return this;
138+
}
139+
140+
public BehaviorTree Build () {
141+
return _tree;
142+
}
143+
}
144+
}

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: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+
return builder.AddNode(new BehaviorTreeBuilderExtensionActionTest.ExtensionAction {
10+
Name = name,
11+
callback = callback,
12+
});
13+
}
14+
}
15+
16+
public class BehaviorTreeBuilderExtensionActionTest {
17+
public class ExtensionAction : ActionBase {
18+
public Action callback;
19+
20+
protected override TaskStatus OnUpdate () {
21+
callback();
22+
return TaskStatus.Success;
23+
}
24+
}
25+
26+
[Test]
27+
public void It_should_run_the_custom_action () {
28+
var result = false;
29+
var tree = new BehaviorTreeBuilder(null)
30+
.Sequence()
31+
.ExampleAction("test", () => result = true)
32+
.End()
33+
.Build();
34+
35+
tree.Tick();
36+
37+
Assert.IsTrue(result);
38+
}
39+
}
40+
}

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)