cgserver 12.0.8 → 12.2.0

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