Skip to content

Commit f4d8fbf

Browse files
committed
Merge branch 'feature/behavior-tree-builder' into develop
2 parents 260d694 + a1b909f commit f4d8fbf

18 files changed

+573
-74
lines changed

Assets/FluidBehaviorTree/Scripts/BehaviorTree/BehaviorTree.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@ public BehaviorTree (GameObject owner) {
1515
SyncNodes(Root);
1616
}
1717

18-
public void Tick () {
19-
if (Root.Update() != TaskStatus.Continue) {
18+
public TaskStatus Tick () {
19+
var status = Root.Update();
20+
if (status != TaskStatus.Continue) {
2021
TickCount++;
2122
}
23+
24+
return status;
2225
}
2326

2427
public void Reset () {
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
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> _pointer = new List<ITaskParent>();
14+
15+
private ITaskParent Pointer {
16+
get {
17+
if (_pointer.Count == 0) return null;
18+
return _pointer[_pointer.Count - 1];
19+
}
20+
}
21+
22+
public BehaviorTreeBuilder (GameObject owner) {
23+
_tree = new BehaviorTree(owner);
24+
_pointer.Add(_tree.Root);
25+
}
26+
27+
private BehaviorTreeBuilder ParentTask<T> (string name) where T : ITaskParent, new() {
28+
var parent = new T { Name = name };
29+
_tree.AddNode(Pointer, parent);
30+
_pointer.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+
_tree.AddNode(Pointer, decorator);
42+
_pointer.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+
_tree.AddNode(Pointer, new ActionGeneric {
77+
Name = name,
78+
updateLogic = action
79+
});
80+
81+
return this;
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+
_tree.AddNode(Pointer, new ConditionGeneric {
90+
Name = name,
91+
updateLogic = action
92+
});
93+
94+
return this;
95+
}
96+
97+
public BehaviorTreeBuilder Condition (Func<bool> action) {
98+
return Condition("condition", action);
99+
}
100+
101+
public BehaviorTreeBuilder End () {
102+
_pointer.RemoveAt(_pointer.Count - 1);
103+
104+
return this;
105+
}
106+
107+
public BehaviorTree Build () {
108+
return _tree;
109+
}
110+
}
111+
}

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

Lines changed: 11 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)