blob: 90ff0c1ce873e34f8e09e096126520e2425cbf9a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 简单的有限状态机实现
namespace LiteBehaviorTree
{
public class BehaviorTree : MonoBehaviour
{
}
public enum Status
{
Failed,
Running,
Success
}
public abstract class BehaviorNode
{
/// <summary>
/// 节点名,如果不重写,默认是节点类型名
/// </summary>
public virtual string name { get; }
/// <summary>
/// 节点颜色,用于Profiler
/// </summary>
public virtual Color color { get; }
/// <summary>
/// 节点图标,用于Profiler
/// </summary>
public virtual string icon { get; }
/// <summary>
/// 父节点,根节点为null
/// </summary>
protected BehaviorNode m_Parent;
/// <summary>
/// 子节点
/// </summary>
protected List<BehaviorNode> m_Children;
/// <summary>
/// 节点状态
/// </summary>
protected Status m_Status;
/// <summary>
/// 当前状态的上一个状态
/// </summary>
protected Status m_LastResult;
/// <summary>
/// 下次执行的时间
/// </summary>
protected float m_NextUpdateTime;
/// <summary>
/// 结束时回调
/// </summary>
public System.Action onStop;
public virtual string ToString()
{
return "<BehaviorNode>";
}
/// <summary>
/// 休眠
/// </summary>
/// <param name="timeInSec"></param>
public void Sleep(float timeInSec)
{
}
public int GetSleepTime()
{
return 0;
}
public virtual void Visit()
{
}
public virtual void Step()
{
}
public virtual void Reset()
{
}
public virtual void Stop()
{
}
}
public abstract class CompositeNode : BehaviorNode
{
}
public abstract class DecoratorNode : BehaviorNode
{
}
public abstract class ActionNode : BehaviorNode
{
protected System.Action action;
public override void Visit()
{
action();
m_Status = Status.Success;
}
}
public abstract class ConditionNode : BehaviorNode
{
protected System.Func<bool> checker;
public override void Visit()
{
if (checker())
{
m_Status = Status.Success;
}
else
{
m_Status = Status.Failed;
}
}
}
////////////////// Default Composites //////////////////
////////////////// Default Decorators //////////////////
////////////////// Default Conditions //////////////////
////////////////// Default Actions //////////////////
}
|