-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLogicState.cs
More file actions
178 lines (135 loc) · 4.01 KB
/
LogicState.cs
File metadata and controls
178 lines (135 loc) · 4.01 KB
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
using UnityEngine;
namespace LogicState
{
public class LogicState
{
private GameObject m_GameObject;
public GameObject gameObject
{
get {return m_GameObject;}
private set {m_GameObject=value;}
}
/// <summary>
/// 默认的状态持续时长是无限
/// </summary>
public float Duration
{
get {return m_Duration;}
set {m_Duration=value;}
}
public float StartTime
{
get { return m_StartTime; }
set {m_StartTime=value;}
}
public float EndTime
{
get { return StartTime+Duration; }
}
private ELogicState m_LogicStateEnum;
public ELogicState LogicStateEnum
{
get { return m_LogicStateEnum;}
private set { m_LogicStateEnum = value; }
}
public LogicState()
{
}
public LogicState(ELogicState stateEnum)
{
LogicStateEnum = stateEnum;
m_HashCode = (int)stateEnum;
}
public LogicState(ELogicState stateEnum,LogicStateManager parent)
{
gameObject = parent.gameObject;
m_Owner = parent == null ? null : parent;
LogicStateEnum = stateEnum;
m_HashCode = (int)stateEnum;
}
/// <summary>
/// 第一次创建此状态时调用
/// 为了防止高频创建和析构对象导致的性能问题 逻辑状态第一次创建实例后都会一直留在内存中
/// 只是通过对应的方法控制其状态的进入和退出
/// </summary>
virtual public void FirstCreated()
{
}
/// <summary>
/// 每个状态进入时先调用Init初始化成员变量,再调用OnStateIn,
/// 所以请在这里初始化成员变量到初始状态
/// </summary>
virtual public void Init()
{
}
/// <summary>
/// Init完后调用OnStateIn,此时已被设为激活状态
/// </summary>
virtual public void OnStateIn()
{
}
/// <summary>
/// 状态被激活后,每帧调用
/// </summary>
/// <param name="deltaTime"></param>
virtual public void Update(float deltaTime)
{
}
virtual public void FixedUpdate()
{
}
/// <summary>
/// 先调StateOut,再会掉UnInit,析构成员变量。
/// </summary>
virtual public void OnStateOut()
{
}
/// <summary>
/// 析构成员变量
/// </summary>
virtual public void UnInit()
{
}
public void SetActive(bool active)
{
m_Active = active;
}
public bool GetActive()
{
return m_Active;
}
/// <summary>
/// 设置状态所在的LogicStateManager
/// </summary>
/// <param name="owner"></param>
public void SetOwner(LogicStateManager owner)
{
m_Owner = owner;
}
/// <summary>
/// 获取状态所在的LogicStateManager
/// </summary>
/// <returns></returns>
public LogicStateManager GetOwner()
{
return m_Owner;
}
private bool m_Active = false;
protected LogicStateManager m_Owner = null;
private int m_HashCode = 0;
private float m_StartTime = Time.time;
private float m_Duration = float.PositiveInfinity;
public void SetHashCode(int hashCode)
{
m_HashCode = hashCode;
}
public override int GetHashCode()
{
return m_HashCode;
}
public override bool Equals(object obj)
{
return GetType().MetadataToken == obj.GetType().MetadataToken;
}
}
}