cgserver 8.9.2 → 8.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +2 -0
  2. package/dist/lib/Framework/AI/AiObject.js +10 -10
  3. package/dist/lib/Framework/AI/Astar.js +133 -133
  4. package/dist/lib/Framework/AI/BehaviorAI.js +307 -307
  5. package/dist/lib/Framework/AI/Entity.js +33 -33
  6. package/dist/lib/Framework/AI/Point.js +68 -68
  7. package/dist/lib/Framework/AI/TriggerMgr.js +201 -201
  8. package/dist/lib/Framework/Config/Config.js +53 -53
  9. package/dist/lib/Framework/Config/DbConfig.js +14 -14
  10. package/dist/lib/Framework/Config/FrameworkConfig.js +207 -207
  11. package/dist/lib/Framework/Config/IServerConfig.js +26 -26
  12. package/dist/lib/Framework/Config/_error_.js +35 -35
  13. package/dist/lib/Framework/Core/Core.js +665 -639
  14. package/dist/lib/Framework/Core/Timer.js +116 -116
  15. package/dist/lib/Framework/Database/Decorator/AutoIncrement.js +11 -11
  16. package/dist/lib/Framework/Database/Decorator/DBCache.js +64 -64
  17. package/dist/lib/Framework/Database/Decorator/NotNull.js +11 -11
  18. package/dist/lib/Framework/Database/Decorator/PrimaryKey.js +11 -11
  19. package/dist/lib/Framework/Database/Decorator/Property.js +61 -61
  20. package/dist/lib/Framework/Database/Decorator/Table.js +15 -15
  21. package/dist/lib/Framework/Database/Decorator/Type.js +20 -20
  22. package/dist/lib/Framework/Database/MSSqlManager.js +53 -53
  23. package/dist/lib/Framework/Database/MongoBaseService.js +117 -117
  24. package/dist/lib/Framework/Database/MongoManager.js +467 -466
  25. package/dist/lib/Framework/Database/MysqlBaseService.js +281 -281
  26. package/dist/lib/Framework/Database/MysqlManager.js +179 -179
  27. package/dist/lib/Framework/Database/RedisManager.js +61 -61
  28. package/dist/lib/Framework/Decorator/AdminValidate.js +19 -19
  29. package/dist/lib/Framework/Decorator/AuthorityValidate.js +22 -22
  30. package/dist/lib/Framework/Decorator/CreatorValidate.js +19 -19
  31. package/dist/lib/Framework/Decorator/JsonAdminValidate.js +15 -15
  32. package/dist/lib/Framework/Decorator/JsonAuthorityValidate.js +20 -20
  33. package/dist/lib/Framework/Decorator/JsonCreatorValidate.js +19 -19
  34. package/dist/lib/Framework/Decorator/SyncCall.js +42 -42
  35. package/dist/lib/Framework/Decorator/SyncCallServer.js +77 -77
  36. package/dist/lib/Framework/Logic/CacheTool.js +73 -73
  37. package/dist/lib/Framework/Logic/EventTool.js +27 -27
  38. package/dist/lib/Framework/Logic/HttpTool.js +75 -75
  39. package/dist/lib/Framework/Logic/Log.js +140 -140
  40. package/dist/lib/Framework/Logic/SyncQueueTool.js +43 -43
  41. package/dist/lib/Framework/Service/MongoAccountService.js +367 -367
  42. package/dist/lib/Framework/Service/MongoCacheService.js +42 -42
  43. package/dist/lib/Framework/Service/MongoUserService.js +100 -100
  44. package/dist/lib/Framework/Service/MysqlAccountService.js +441 -441
  45. package/dist/lib/Framework/Service/MysqlUserService.js +171 -171
  46. package/dist/lib/Framework/Service/ini.js +36 -36
  47. package/dist/lib/Framework/SocketServer/IClientWebSocket.js +44 -44
  48. package/dist/lib/Framework/SocketServer/IRpc.js +12 -12
  49. package/dist/lib/Framework/SocketServer/IRpcClientWebSocket.js +63 -63
  50. package/dist/lib/Framework/SocketServer/IRpcServerWebSocket.js +63 -63
  51. package/dist/lib/Framework/SocketServer/IServerWebSocket.js +75 -75
  52. package/dist/lib/Framework/SocketServer/ISocketServer.js +205 -205
  53. package/dist/lib/Framework/SocketServer/IWebSocket.js +195 -195
  54. package/dist/lib/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.js +57 -57
  55. package/dist/lib/Framework/SocketServer/ProtoFilter/IProtoFilter.js +8 -8
  56. package/dist/lib/Framework/SocketServer/ProtoFilter/JsonProtoFilter.js +29 -29
  57. package/dist/lib/Framework/SocketServer/ProtoFilter/ProtoFactory.js +31 -31
  58. package/dist/lib/Framework/ThirdParty/AlipayTool.js +203 -203
  59. package/dist/lib/Framework/ThirdParty/Alisms.js +46 -46
  60. package/dist/lib/Framework/ThirdParty/AppleTool.js +234 -234
  61. package/dist/lib/Framework/ThirdParty/CgMq.js +132 -132
  62. package/dist/lib/Framework/ThirdParty/EmailTool.js +33 -33
  63. package/dist/lib/Framework/ThirdParty/OpenSocial.js +32 -32
  64. package/dist/lib/Framework/ThirdParty/QQTool.js +118 -118
  65. package/dist/lib/Framework/ThirdParty/QiniuTool.js +21 -21
  66. package/dist/lib/Framework/ThirdParty/Rpc.js +63 -63
  67. package/dist/lib/Framework/ThirdParty/WechatOATool.js +61 -61
  68. package/dist/lib/Framework/ThirdParty/WechatTool.js +74 -74
  69. package/dist/lib/Framework/WebServer/Controller/BaseController.js +112 -112
  70. package/dist/lib/Framework/WebServer/Controller/MongoBaseUserController.js +169 -169
  71. package/dist/lib/Framework/WebServer/Controller/MysqlBaseUserController.js +169 -169
  72. package/dist/lib/Framework/WebServer/Engine/ControllerManager.js +112 -112
  73. package/dist/lib/Framework/WebServer/Engine/Engine.js +152 -152
  74. package/dist/lib/Framework/WebServer/Engine/RazorJs.js +544 -544
  75. package/dist/lib/Framework/WebServer/Engine/Request.js +237 -237
  76. package/dist/lib/Framework/WebServer/Engine/Response.js +100 -100
  77. package/dist/lib/Framework/WebServer/IWebServer.js +59 -59
  78. package/dist/lib/Framework/cgserver.js +121 -121
  79. package/dist/lib/Framework/index.js +202 -201
  80. package/dist/lib/test/test.js +21 -21
  81. package/dist/types/Framework/AI/AiObject.d.ts +5 -5
  82. package/dist/types/Framework/AI/Astar.d.ts +38 -38
  83. package/dist/types/Framework/AI/BehaviorAI.d.ts +24 -24
  84. package/dist/types/Framework/AI/Entity.d.ts +12 -12
  85. package/dist/types/Framework/AI/Point.d.ts +17 -17
  86. package/dist/types/Framework/AI/TriggerMgr.d.ts +52 -52
  87. package/dist/types/Framework/Config/Config.d.ts +12 -12
  88. package/dist/types/Framework/Config/DbConfig.d.ts +10 -10
  89. package/dist/types/Framework/Config/FrameworkConfig.d.ts +203 -203
  90. package/dist/types/Framework/Config/IServerConfig.d.ts +9 -9
  91. package/dist/types/Framework/Config/_error_.d.ts +99 -99
  92. package/dist/types/Framework/Core/Core.d.ts +111 -108
  93. package/dist/types/Framework/Core/Timer.d.ts +16 -16
  94. package/dist/types/Framework/Database/Decorator/AutoIncrement.d.ts +1 -1
  95. package/dist/types/Framework/Database/Decorator/DBCache.d.ts +23 -23
  96. package/dist/types/Framework/Database/Decorator/NotNull.d.ts +1 -1
  97. package/dist/types/Framework/Database/Decorator/PrimaryKey.d.ts +1 -1
  98. package/dist/types/Framework/Database/Decorator/Property.d.ts +57 -57
  99. package/dist/types/Framework/Database/Decorator/Table.d.ts +1 -1
  100. package/dist/types/Framework/Database/Decorator/Type.d.ts +1 -1
  101. package/dist/types/Framework/Database/MSSqlManager.d.ts +27 -27
  102. package/dist/types/Framework/Database/MongoBaseService.d.ts +81 -81
  103. package/dist/types/Framework/Database/MongoManager.d.ts +155 -156
  104. package/dist/types/Framework/Database/MysqlBaseService.d.ts +34 -34
  105. package/dist/types/Framework/Database/MysqlManager.d.ts +53 -53
  106. package/dist/types/Framework/Database/RedisManager.d.ts +24 -24
  107. package/dist/types/Framework/Decorator/AdminValidate.d.ts +1 -1
  108. package/dist/types/Framework/Decorator/AuthorityValidate.d.ts +2 -2
  109. package/dist/types/Framework/Decorator/CreatorValidate.d.ts +1 -1
  110. package/dist/types/Framework/Decorator/JsonAdminValidate.d.ts +1 -1
  111. package/dist/types/Framework/Decorator/JsonAuthorityValidate.d.ts +2 -2
  112. package/dist/types/Framework/Decorator/JsonCreatorValidate.d.ts +1 -1
  113. package/dist/types/Framework/Decorator/SyncCall.d.ts +12 -12
  114. package/dist/types/Framework/Decorator/SyncCallServer.d.ts +14 -14
  115. package/dist/types/Framework/Logic/CacheTool.d.ts +27 -27
  116. package/dist/types/Framework/Logic/EventTool.d.ts +13 -13
  117. package/dist/types/Framework/Logic/HttpTool.d.ts +15 -15
  118. package/dist/types/Framework/Logic/Log.d.ts +25 -25
  119. package/dist/types/Framework/Logic/SyncQueueTool.d.ts +21 -21
  120. package/dist/types/Framework/Service/MongoAccountService.d.ts +69 -69
  121. package/dist/types/Framework/Service/MongoCacheService.d.ts +14 -14
  122. package/dist/types/Framework/Service/MongoUserService.d.ts +35 -35
  123. package/dist/types/Framework/Service/MysqlAccountService.d.ts +74 -74
  124. package/dist/types/Framework/Service/MysqlUserService.d.ts +33 -33
  125. package/dist/types/Framework/Service/ini.d.ts +29 -29
  126. package/dist/types/Framework/SocketServer/IClientWebSocket.d.ts +17 -17
  127. package/dist/types/Framework/SocketServer/IRpc.d.ts +8 -8
  128. package/dist/types/Framework/SocketServer/IRpcClientWebSocket.d.ts +16 -16
  129. package/dist/types/Framework/SocketServer/IRpcServerWebSocket.d.ts +16 -16
  130. package/dist/types/Framework/SocketServer/IServerWebSocket.d.ts +28 -28
  131. package/dist/types/Framework/SocketServer/ISocketServer.d.ts +45 -45
  132. package/dist/types/Framework/SocketServer/IWebSocket.d.ts +60 -60
  133. package/dist/types/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.d.ts +9 -9
  134. package/dist/types/Framework/SocketServer/ProtoFilter/IProtoFilter.d.ts +9 -9
  135. package/dist/types/Framework/SocketServer/ProtoFilter/JsonProtoFilter.d.ts +6 -6
  136. package/dist/types/Framework/SocketServer/ProtoFilter/ProtoFactory.d.ts +8 -8
  137. package/dist/types/Framework/ThirdParty/AlipayTool.d.ts +109 -109
  138. package/dist/types/Framework/ThirdParty/Alisms.d.ts +14 -14
  139. package/dist/types/Framework/ThirdParty/AppleTool.d.ts +131 -131
  140. package/dist/types/Framework/ThirdParty/CgMq.d.ts +51 -51
  141. package/dist/types/Framework/ThirdParty/EmailTool.d.ts +5 -5
  142. package/dist/types/Framework/ThirdParty/OpenSocial.d.ts +7 -7
  143. package/dist/types/Framework/ThirdParty/QQTool.d.ts +41 -41
  144. package/dist/types/Framework/ThirdParty/QiniuTool.d.ts +6 -6
  145. package/dist/types/Framework/ThirdParty/Rpc.d.ts +20 -20
  146. package/dist/types/Framework/ThirdParty/WechatOATool.d.ts +13 -13
  147. package/dist/types/Framework/ThirdParty/WechatTool.d.ts +20 -20
  148. package/dist/types/Framework/WebServer/Controller/BaseController.d.ts +33 -33
  149. package/dist/types/Framework/WebServer/Controller/MongoBaseUserController.d.ts +27 -27
  150. package/dist/types/Framework/WebServer/Controller/MysqlBaseUserController.d.ts +27 -27
  151. package/dist/types/Framework/WebServer/Engine/ControllerManager.d.ts +35 -35
  152. package/dist/types/Framework/WebServer/Engine/Engine.d.ts +22 -21
  153. package/dist/types/Framework/WebServer/Engine/RazorJs.d.ts +21 -21
  154. package/dist/types/Framework/WebServer/Engine/Request.d.ts +36 -35
  155. package/dist/types/Framework/WebServer/Engine/Response.d.ts +30 -30
  156. package/dist/types/Framework/WebServer/IWebServer.d.ts +20 -20
  157. package/dist/types/Framework/cgserver.d.ts +27 -27
  158. package/dist/types/Framework/index.d.ts +91 -91
  159. package/dist/types/test/test.d.ts +1 -1
  160. package/package.json +1 -1
  161. package/dist/lib/Framework/WebServer/Decorator/AdminValidate.js +0 -19
  162. package/dist/lib/Framework/WebServer/Decorator/AuthorityValidate.js +0 -22
  163. package/dist/lib/Framework/WebServer/Decorator/CreatorValidate.js +0 -19
  164. package/dist/lib/Framework/WebServer/Decorator/JsonAdminValidate.js +0 -15
  165. package/dist/lib/Framework/WebServer/Decorator/JsonAuthorityValidate.js +0 -20
  166. package/dist/lib/Framework/WebServer/Decorator/JsonCreatorValidate.js +0 -19
  167. package/dist/lib/Framework/WebServer/Decorator/SyncCall.js +0 -41
  168. package/dist/lib/Framework/WebServer/Decorator/SyncCallServer.js +0 -77
  169. package/dist/types/Framework/WebServer/Decorator/AdminValidate.d.ts +0 -1
  170. package/dist/types/Framework/WebServer/Decorator/AuthorityValidate.d.ts +0 -2
  171. package/dist/types/Framework/WebServer/Decorator/CreatorValidate.d.ts +0 -1
  172. package/dist/types/Framework/WebServer/Decorator/JsonAdminValidate.d.ts +0 -1
  173. package/dist/types/Framework/WebServer/Decorator/JsonAuthorityValidate.d.ts +0 -2
  174. package/dist/types/Framework/WebServer/Decorator/JsonCreatorValidate.d.ts +0 -1
  175. package/dist/types/Framework/WebServer/Decorator/SyncCall.d.ts +0 -12
  176. package/dist/types/Framework/WebServer/Decorator/SyncCallServer.d.ts +0 -14
@@ -1,307 +1,307 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BehaviorAI = void 0;
4
- const Log_1 = require("./../Logic/Log");
5
- const Core_1 = require("../Core/Core");
6
- const _ = require("underscore");
7
- const TriggerMgr_1 = require("./TriggerMgr");
8
- class BehaviorAI {
9
- _obj;
10
- _targetObjs;
11
- _triggers;
12
- _behavior_data;
13
- _current_behavior;
14
- _current_behavior_name = "";
15
- _current_check;
16
- _targetObj;
17
- constructor(behavior_data, obj, targetObjs) {
18
- this._obj = obj;
19
- this._behavior_data = behavior_data;
20
- if (Core_1.core.isArray(targetObjs)) {
21
- this._targetObjs = targetObjs;
22
- }
23
- else if (targetObjs) {
24
- this._targetObjs[0] = targetObjs;
25
- }
26
- else {
27
- this._targetObjs = [];
28
- }
29
- this._triggers = [];
30
- let code = TriggerMgr_1.GTriggerMgr.addConditionTriggerEvent(TriggerMgr_1.EConditionType.Die, this.onTriggerDie.bind(this), { code: this._obj.getCode() });
31
- this._triggers.push({ type: TriggerMgr_1.EConditionType.Die, code: code });
32
- }
33
- //启动行为树AI
34
- start() {
35
- if (!this._behavior_data) {
36
- Log_1.GLog.info("------------error------------this._behavior_data can not be null!");
37
- return;
38
- }
39
- this.goto(this._behavior_data.start);
40
- }
41
- //结束行为树AI
42
- end() {
43
- for (let i = 0, length = this._triggers.length; i < length; ++i) {
44
- TriggerMgr_1.GTriggerMgr.removeConditionTriggerEvent(this._triggers[i].type, this._triggers[i].code);
45
- }
46
- this._triggers = [];
47
- }
48
- //帧检查
49
- //支持多条件check
50
- update(dt) {
51
- if (this._current_check.length < 0) {
52
- return;
53
- }
54
- for (let i = 0; i < this._current_check.length; ++i) {
55
- let current = this._current_check[i];
56
- //目前只支持同时存在一个update检查
57
- if (current.event_name == "target_insight") {
58
- let targetInfo = this._getNearestTarget();
59
- if (targetInfo) {
60
- let target = targetInfo.target;
61
- let distance = targetInfo.distance;
62
- if (distance <= this._behavior_data.insight) //视野发现敌人
63
- {
64
- this._current_check = this._current_check.splice(i, 1);
65
- --i;
66
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
67
- if (forceReturn) {
68
- return; //防止goto修改this._current_check后,做了立刻check
69
- }
70
- }
71
- }
72
- }
73
- else if (current.event_name == "sure") {
74
- this._current_check = this._current_check.splice(i, 1);
75
- --i;
76
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
77
- if (forceReturn) {
78
- return; //防止goto修改this._current_check后,做了立刻check
79
- }
80
- }
81
- else if (current.event_name == "near") {
82
- if (this._targetObj) {
83
- let objPos = this._obj.getPosition();
84
- let tpos = this._targetObj.getPosition();
85
- let distance = objPos.sub(tpos).length(); //目标和自己的距离
86
- let dty = objPos.y - tpos.y;
87
- dty = dty >= 0 ? dty : -dty;
88
- if (distance <= current.distance && dty <= 10) //视野发现敌人
89
- {
90
- this._current_check = this._current_check.splice(i, 1);
91
- --i;
92
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
93
- if (forceReturn) {
94
- return; //防止goto修改this._current_check后,做了立刻check
95
- }
96
- }
97
- }
98
- else {
99
- this._current_check = this._current_check.splice(i, 1);
100
- --i;
101
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name], true);
102
- if (forceReturn) {
103
- return; //防止goto修改this._current_check后,做了立刻check
104
- }
105
- }
106
- }
107
- else if (current.event_name == "timeout") {
108
- current.time -= dt;
109
- if (current.time <= 0) {
110
- this._current_check = this._current_check.splice(i, 1);
111
- --i;
112
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
113
- if (forceReturn) {
114
- return; //防止goto修改this._current_check后,做了立刻check
115
- }
116
- }
117
- }
118
- }
119
- }
120
- //goto事件
121
- goto(behavior_name) {
122
- //GLog.info("=====goto behavior=" + behavior_name);
123
- if (this._behavior_data && this._behavior_data.name == behavior_name) {
124
- return; //拒绝相同行为跳转
125
- }
126
- this._current_check = [];
127
- this._current_behavior = this._behavior_data.behaviors[behavior_name];
128
- //全局条件
129
- if (this._behavior_data.conditions) {
130
- this._checkConditions(this._behavior_data.conditions);
131
- }
132
- //行为条件
133
- if (this._current_behavior.conditions) {
134
- this._checkConditions(this._current_behavior.conditions);
135
- }
136
- if (this._current_behavior.animation) {
137
- if (!this._current_behavior.conditions.animation_done) {
138
- this._obj.behaviorAnimation(this._current_behavior.animation.name, this._current_behavior.animation.loop);
139
- }
140
- else {
141
- let self = this;
142
- this._obj.behaviorAnimation(this._current_behavior.animation.name, this._current_behavior.animation.loop, function () {
143
- self._doEvents(self._current_behavior.conditions.animation_done);
144
- });
145
- }
146
- }
147
- else {
148
- Log_1.GLog.info("---------warning--------_goto->behavior_name=" + behavior_name + ".animaiton not exist!");
149
- }
150
- }
151
- //检查有没有已经达到的条件,又的话就执行他的相关事件
152
- _checkConditions(conditions) {
153
- if (!conditions) {
154
- return;
155
- }
156
- for (let key in conditions) {
157
- switch (key) {
158
- case "target_insight":
159
- {
160
- this._current_check.push({ event_name: key });
161
- }
162
- break;
163
- case "timeout":
164
- {
165
- this._current_check.push({ event_name: key, time: conditions[key].time });
166
- }
167
- break;
168
- case "sure":
169
- {
170
- this._current_check.push({ event_name: key }); //下次update执行
171
- }
172
- break;
173
- case "near":
174
- {
175
- this._targetObj = null;
176
- this._current_check.push({ event_name: key, distance: conditions[key].distance });
177
- let targetInfo = this._getNearestTarget();
178
- if (targetInfo) {
179
- if (this._behavior_data.name == "sm")
180
- Log_1.GLog.info("distance" + targetInfo.distance);
181
- this._targetObj = targetInfo.target;
182
- }
183
- }
184
- break;
185
- default:
186
- break;
187
- }
188
- }
189
- }
190
- //执行事件
191
- _doEvents(events, fail = false) {
192
- if (!events) {
193
- return false;
194
- }
195
- if (fail && events.failto) {
196
- this.goto(events.failto);
197
- return true;
198
- }
199
- let forceReturn = false;
200
- for (let key in events) {
201
- switch (key) {
202
- case "goto":
203
- {
204
- this.goto(events[key]);
205
- forceReturn = true;
206
- }
207
- break;
208
- case "walk_any":
209
- {
210
- if (this._obj.behaviorWalkAny) {
211
- this._obj.behaviorWalkAny();
212
- }
213
- }
214
- break;
215
- case "persue":
216
- {
217
- if (this._obj.behaviorPersue && this._targetObj) {
218
- this._obj.behaviorPersue(this._targetObj);
219
- }
220
- }
221
- break;
222
- case "call":
223
- {
224
- if (events[key].fun && this._obj[events[key].fun]) {
225
- this._obj[events[key].fun](events[key].params);
226
- }
227
- }
228
- break;
229
- case "random":
230
- {
231
- let r = _.random(0, 100); //百分率
232
- let rate = 0;
233
- let done = false;
234
- //最后一条不参与检测
235
- for (let i = 0, length = events[key].length; i < length - 1; ++i) {
236
- rate += events[key][i].rate;
237
- if (r <= rate) {
238
- forceReturn = this._doEvents(events[key][i].events);
239
- done = true;
240
- break;
241
- }
242
- }
243
- //如果前面都没有成功,必须保证最后一条得到执行
244
- if (!done) {
245
- forceReturn = this._doEvents(events[key][events[key].length - 1].events);
246
- }
247
- }
248
- default:
249
- break;
250
- }
251
- }
252
- return forceReturn;
253
- }
254
- //角色死亡触发
255
- onTriggerDie(userDM) {
256
- if (!userDM) {
257
- return;
258
- }
259
- if (this._obj.getCode() === userDM.code) {
260
- this.goto("die");
261
- this.end();
262
- return;
263
- }
264
- for (let i = 0, length = this._targetObjs.length; i < length; ++i) {
265
- if (this._targetObjs[i].getCode() === userDM.code) {
266
- this._targetObjs = this._targetObjs.splice(i, 1);
267
- if (this._targetObj.getCode() === userDM.code) {
268
- this._targetObj = null;
269
- }
270
- return;
271
- }
272
- }
273
- return;
274
- }
275
- //获取最近的target
276
- _getNearestTarget() {
277
- let targetNum = this._targetObjs.length;
278
- if (targetNum <= 0) {
279
- return null;
280
- }
281
- let objPos = this._obj.getPosition();
282
- if (targetNum == 1) {
283
- return { target: this._targetObjs[0], distance: objPos.sub(this._targetObjs[0].getPosition()).length() };
284
- }
285
- let minIndex = 0;
286
- let mindis = objPos.sub(this._targetObjs[0].getPosition()).length();
287
- for (let i = 1; i < targetNum; ++i) {
288
- let dis = objPos.sub(this._targetObjs[i].getPosition()).length();
289
- if (mindis > dis) {
290
- mindis = dis;
291
- minIndex = i;
292
- }
293
- }
294
- return { target: this._targetObjs[minIndex], distance: mindis };
295
- }
296
- //添加target
297
- addTarget(target) {
298
- if (!target) {
299
- return;
300
- }
301
- this._targetObjs.push(target);
302
- }
303
- getTargets() {
304
- return this._targetObjs;
305
- }
306
- }
307
- exports.BehaviorAI = BehaviorAI;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BehaviorAI = void 0;
4
+ const Log_1 = require("./../Logic/Log");
5
+ const Core_1 = require("../Core/Core");
6
+ const _ = require("underscore");
7
+ const TriggerMgr_1 = require("./TriggerMgr");
8
+ class BehaviorAI {
9
+ _obj;
10
+ _targetObjs;
11
+ _triggers;
12
+ _behavior_data;
13
+ _current_behavior;
14
+ _current_behavior_name = "";
15
+ _current_check;
16
+ _targetObj;
17
+ constructor(behavior_data, obj, targetObjs) {
18
+ this._obj = obj;
19
+ this._behavior_data = behavior_data;
20
+ if (Core_1.core.isArray(targetObjs)) {
21
+ this._targetObjs = targetObjs;
22
+ }
23
+ else if (targetObjs) {
24
+ this._targetObjs[0] = targetObjs;
25
+ }
26
+ else {
27
+ this._targetObjs = [];
28
+ }
29
+ this._triggers = [];
30
+ let code = TriggerMgr_1.GTriggerMgr.addConditionTriggerEvent(TriggerMgr_1.EConditionType.Die, this.onTriggerDie.bind(this), { code: this._obj.getCode() });
31
+ this._triggers.push({ type: TriggerMgr_1.EConditionType.Die, code: code });
32
+ }
33
+ //启动行为树AI
34
+ start() {
35
+ if (!this._behavior_data) {
36
+ Log_1.GLog.info("------------error------------this._behavior_data can not be null!");
37
+ return;
38
+ }
39
+ this.goto(this._behavior_data.start);
40
+ }
41
+ //结束行为树AI
42
+ end() {
43
+ for (let i = 0, length = this._triggers.length; i < length; ++i) {
44
+ TriggerMgr_1.GTriggerMgr.removeConditionTriggerEvent(this._triggers[i].type, this._triggers[i].code);
45
+ }
46
+ this._triggers = [];
47
+ }
48
+ //帧检查
49
+ //支持多条件check
50
+ update(dt) {
51
+ if (this._current_check.length < 0) {
52
+ return;
53
+ }
54
+ for (let i = 0; i < this._current_check.length; ++i) {
55
+ let current = this._current_check[i];
56
+ //目前只支持同时存在一个update检查
57
+ if (current.event_name == "target_insight") {
58
+ let targetInfo = this._getNearestTarget();
59
+ if (targetInfo) {
60
+ let target = targetInfo.target;
61
+ let distance = targetInfo.distance;
62
+ if (distance <= this._behavior_data.insight) //视野发现敌人
63
+ {
64
+ this._current_check = this._current_check.splice(i, 1);
65
+ --i;
66
+ let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
67
+ if (forceReturn) {
68
+ return; //防止goto修改this._current_check后,做了立刻check
69
+ }
70
+ }
71
+ }
72
+ }
73
+ else if (current.event_name == "sure") {
74
+ this._current_check = this._current_check.splice(i, 1);
75
+ --i;
76
+ let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
77
+ if (forceReturn) {
78
+ return; //防止goto修改this._current_check后,做了立刻check
79
+ }
80
+ }
81
+ else if (current.event_name == "near") {
82
+ if (this._targetObj) {
83
+ let objPos = this._obj.getPosition();
84
+ let tpos = this._targetObj.getPosition();
85
+ let distance = objPos.sub(tpos).length(); //目标和自己的距离
86
+ let dty = objPos.y - tpos.y;
87
+ dty = dty >= 0 ? dty : -dty;
88
+ if (distance <= current.distance && dty <= 10) //视野发现敌人
89
+ {
90
+ this._current_check = this._current_check.splice(i, 1);
91
+ --i;
92
+ let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
93
+ if (forceReturn) {
94
+ return; //防止goto修改this._current_check后,做了立刻check
95
+ }
96
+ }
97
+ }
98
+ else {
99
+ this._current_check = this._current_check.splice(i, 1);
100
+ --i;
101
+ let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name], true);
102
+ if (forceReturn) {
103
+ return; //防止goto修改this._current_check后,做了立刻check
104
+ }
105
+ }
106
+ }
107
+ else if (current.event_name == "timeout") {
108
+ current.time -= dt;
109
+ if (current.time <= 0) {
110
+ this._current_check = this._current_check.splice(i, 1);
111
+ --i;
112
+ let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
113
+ if (forceReturn) {
114
+ return; //防止goto修改this._current_check后,做了立刻check
115
+ }
116
+ }
117
+ }
118
+ }
119
+ }
120
+ //goto事件
121
+ goto(behavior_name) {
122
+ //GLog.info("=====goto behavior=" + behavior_name);
123
+ if (this._behavior_data && this._behavior_data.name == behavior_name) {
124
+ return; //拒绝相同行为跳转
125
+ }
126
+ this._current_check = [];
127
+ this._current_behavior = this._behavior_data.behaviors[behavior_name];
128
+ //全局条件
129
+ if (this._behavior_data.conditions) {
130
+ this._checkConditions(this._behavior_data.conditions);
131
+ }
132
+ //行为条件
133
+ if (this._current_behavior.conditions) {
134
+ this._checkConditions(this._current_behavior.conditions);
135
+ }
136
+ if (this._current_behavior.animation) {
137
+ if (!this._current_behavior.conditions.animation_done) {
138
+ this._obj.behaviorAnimation(this._current_behavior.animation.name, this._current_behavior.animation.loop);
139
+ }
140
+ else {
141
+ let self = this;
142
+ this._obj.behaviorAnimation(this._current_behavior.animation.name, this._current_behavior.animation.loop, function () {
143
+ self._doEvents(self._current_behavior.conditions.animation_done);
144
+ });
145
+ }
146
+ }
147
+ else {
148
+ Log_1.GLog.info("---------warning--------_goto->behavior_name=" + behavior_name + ".animaiton not exist!");
149
+ }
150
+ }
151
+ //检查有没有已经达到的条件,又的话就执行他的相关事件
152
+ _checkConditions(conditions) {
153
+ if (!conditions) {
154
+ return;
155
+ }
156
+ for (let key in conditions) {
157
+ switch (key) {
158
+ case "target_insight":
159
+ {
160
+ this._current_check.push({ event_name: key });
161
+ }
162
+ break;
163
+ case "timeout":
164
+ {
165
+ this._current_check.push({ event_name: key, time: conditions[key].time });
166
+ }
167
+ break;
168
+ case "sure":
169
+ {
170
+ this._current_check.push({ event_name: key }); //下次update执行
171
+ }
172
+ break;
173
+ case "near":
174
+ {
175
+ this._targetObj = null;
176
+ this._current_check.push({ event_name: key, distance: conditions[key].distance });
177
+ let targetInfo = this._getNearestTarget();
178
+ if (targetInfo) {
179
+ if (this._behavior_data.name == "sm")
180
+ Log_1.GLog.info("distance" + targetInfo.distance);
181
+ this._targetObj = targetInfo.target;
182
+ }
183
+ }
184
+ break;
185
+ default:
186
+ break;
187
+ }
188
+ }
189
+ }
190
+ //执行事件
191
+ _doEvents(events, fail = false) {
192
+ if (!events) {
193
+ return false;
194
+ }
195
+ if (fail && events.failto) {
196
+ this.goto(events.failto);
197
+ return true;
198
+ }
199
+ let forceReturn = false;
200
+ for (let key in events) {
201
+ switch (key) {
202
+ case "goto":
203
+ {
204
+ this.goto(events[key]);
205
+ forceReturn = true;
206
+ }
207
+ break;
208
+ case "walk_any":
209
+ {
210
+ if (this._obj.behaviorWalkAny) {
211
+ this._obj.behaviorWalkAny();
212
+ }
213
+ }
214
+ break;
215
+ case "persue":
216
+ {
217
+ if (this._obj.behaviorPersue && this._targetObj) {
218
+ this._obj.behaviorPersue(this._targetObj);
219
+ }
220
+ }
221
+ break;
222
+ case "call":
223
+ {
224
+ if (events[key].fun && this._obj[events[key].fun]) {
225
+ this._obj[events[key].fun](events[key].params);
226
+ }
227
+ }
228
+ break;
229
+ case "random":
230
+ {
231
+ let r = _.random(0, 100); //百分率
232
+ let rate = 0;
233
+ let done = false;
234
+ //最后一条不参与检测
235
+ for (let i = 0, length = events[key].length; i < length - 1; ++i) {
236
+ rate += events[key][i].rate;
237
+ if (r <= rate) {
238
+ forceReturn = this._doEvents(events[key][i].events);
239
+ done = true;
240
+ break;
241
+ }
242
+ }
243
+ //如果前面都没有成功,必须保证最后一条得到执行
244
+ if (!done) {
245
+ forceReturn = this._doEvents(events[key][events[key].length - 1].events);
246
+ }
247
+ }
248
+ default:
249
+ break;
250
+ }
251
+ }
252
+ return forceReturn;
253
+ }
254
+ //角色死亡触发
255
+ onTriggerDie(userDM) {
256
+ if (!userDM) {
257
+ return;
258
+ }
259
+ if (this._obj.getCode() === userDM.code) {
260
+ this.goto("die");
261
+ this.end();
262
+ return;
263
+ }
264
+ for (let i = 0, length = this._targetObjs.length; i < length; ++i) {
265
+ if (this._targetObjs[i].getCode() === userDM.code) {
266
+ this._targetObjs = this._targetObjs.splice(i, 1);
267
+ if (this._targetObj.getCode() === userDM.code) {
268
+ this._targetObj = null;
269
+ }
270
+ return;
271
+ }
272
+ }
273
+ return;
274
+ }
275
+ //获取最近的target
276
+ _getNearestTarget() {
277
+ let targetNum = this._targetObjs.length;
278
+ if (targetNum <= 0) {
279
+ return null;
280
+ }
281
+ let objPos = this._obj.getPosition();
282
+ if (targetNum == 1) {
283
+ return { target: this._targetObjs[0], distance: objPos.sub(this._targetObjs[0].getPosition()).length() };
284
+ }
285
+ let minIndex = 0;
286
+ let mindis = objPos.sub(this._targetObjs[0].getPosition()).length();
287
+ for (let i = 1; i < targetNum; ++i) {
288
+ let dis = objPos.sub(this._targetObjs[i].getPosition()).length();
289
+ if (mindis > dis) {
290
+ mindis = dis;
291
+ minIndex = i;
292
+ }
293
+ }
294
+ return { target: this._targetObjs[minIndex], distance: mindis };
295
+ }
296
+ //添加target
297
+ addTarget(target) {
298
+ if (!target) {
299
+ return;
300
+ }
301
+ this._targetObjs.push(target);
302
+ }
303
+ getTargets() {
304
+ return this._targetObjs;
305
+ }
306
+ }
307
+ exports.BehaviorAI = BehaviorAI;