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+ }
0 commit comments