cgserver 7.10.2113 → 7.12.2113

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 (80) hide show
  1. package/package.json +3 -3
  2. package/src/Framework/AI/AiObject.ts +0 -12
  3. package/src/Framework/AI/Astar.ts +0 -157
  4. package/src/Framework/AI/BehaviorAI.ts +0 -382
  5. package/src/Framework/AI/Entity.ts +0 -37
  6. package/src/Framework/AI/Point.ts +0 -84
  7. package/src/Framework/AI/TriggerMgr.ts +0 -280
  8. package/src/Framework/Config/Config.ts +0 -61
  9. package/src/Framework/Config/FrameworkConfig.ts +0 -286
  10. package/src/Framework/Config/IServerConfig.ts +0 -28
  11. package/src/Framework/Config/_error_.ts +0 -32
  12. package/src/Framework/Core/Core.ts +0 -810
  13. package/src/Framework/Core/Timer.ts +0 -147
  14. package/src/Framework/Database/Decorator/AutoIncrement.ts +0 -9
  15. package/src/Framework/Database/Decorator/DBCache.ts +0 -74
  16. package/src/Framework/Database/Decorator/NotNull.ts +0 -9
  17. package/src/Framework/Database/Decorator/PrimaryKey.ts +0 -9
  18. package/src/Framework/Database/Decorator/Property.ts +0 -64
  19. package/src/Framework/Database/Decorator/Table.ts +0 -13
  20. package/src/Framework/Database/Decorator/Type.ts +0 -21
  21. package/src/Framework/Database/MSSqlManager.ts +0 -52
  22. package/src/Framework/Database/MongoBaseService.ts +0 -136
  23. package/src/Framework/Database/MongoManager.ts +0 -501
  24. package/src/Framework/Database/MysqlBaseService.ts +0 -345
  25. package/src/Framework/Database/MysqlManager.ts +0 -212
  26. package/src/Framework/Database/RedisManager.ts +0 -544
  27. package/src/Framework/Logic/CacheTool.ts +0 -85
  28. package/src/Framework/Logic/EventTool.ts +0 -31
  29. package/src/Framework/Logic/HttpTool.ts +0 -82
  30. package/src/Framework/Logic/Log.ts +0 -171
  31. package/src/Framework/Logic/SyncQueueTool.ts +0 -51
  32. package/src/Framework/Service/AccountService.ts +0 -508
  33. package/src/Framework/Service/MongoAccountService.ts +0 -456
  34. package/src/Framework/Service/MongoCacheService.ts +0 -48
  35. package/src/Framework/Service/MongoUserService.ts +0 -103
  36. package/src/Framework/Service/UserService.ts +0 -168
  37. package/src/Framework/Service/ini.ts +0 -33
  38. package/src/Framework/SocketServer/IClientWebSocket.ts +0 -50
  39. package/src/Framework/SocketServer/IRpc.ts +0 -12
  40. package/src/Framework/SocketServer/IRpcClientWebSocket.ts +0 -75
  41. package/src/Framework/SocketServer/IRpcServerWebSocket.ts +0 -76
  42. package/src/Framework/SocketServer/IServerWebSocket.ts +0 -88
  43. package/src/Framework/SocketServer/ISocketServer.ts +0 -243
  44. package/src/Framework/SocketServer/IWebSocket.ts +0 -243
  45. package/src/Framework/SocketServer/ProtoFilter/GoogleProtoFilter.ts +0 -68
  46. package/src/Framework/SocketServer/ProtoFilter/IProtoFilter.ts +0 -11
  47. package/src/Framework/SocketServer/ProtoFilter/JsonProtoFilter.ts +0 -34
  48. package/src/Framework/SocketServer/ProtoFilter/ProtoFactory.ts +0 -34
  49. package/src/Framework/ThirdParty/AlipayTool.ts +0 -224
  50. package/src/Framework/ThirdParty/Alisms.ts +0 -53
  51. package/src/Framework/ThirdParty/AppleTool.ts +0 -252
  52. package/src/Framework/ThirdParty/CgMq.ts +0 -153
  53. package/src/Framework/ThirdParty/EmailTool.ts +0 -37
  54. package/src/Framework/ThirdParty/OpenSocial.ts +0 -36
  55. package/src/Framework/ThirdParty/QQTool.ts +0 -124
  56. package/src/Framework/ThirdParty/QiniuTool.ts +0 -23
  57. package/src/Framework/ThirdParty/Rpc.ts +0 -75
  58. package/src/Framework/ThirdParty/WechatOATool.ts +0 -61
  59. package/src/Framework/ThirdParty/WechatTool.ts +0 -80
  60. package/src/Framework/WebServer/Controller/BaseController.ts +0 -140
  61. package/src/Framework/WebServer/Controller/BaseUserController.ts +0 -209
  62. package/src/Framework/WebServer/Controller/MongoBaseUserController.ts +0 -209
  63. package/src/Framework/WebServer/Decorator/AdminValidate.ts +0 -19
  64. package/src/Framework/WebServer/Decorator/AuthorityValidate.ts +0 -25
  65. package/src/Framework/WebServer/Decorator/CreatorValidate.ts +0 -19
  66. package/src/Framework/WebServer/Decorator/JsonAdminValidate.ts +0 -16
  67. package/src/Framework/WebServer/Decorator/JsonAuthorityValidate.d.ts +0 -2
  68. package/src/Framework/WebServer/Decorator/JsonAuthorityValidate.ts +0 -23
  69. package/src/Framework/WebServer/Decorator/JsonCreatorValidate.ts +0 -19
  70. package/src/Framework/WebServer/Decorator/SyncCall.ts +0 -20
  71. package/src/Framework/WebServer/Decorator/SyncCallServer.ts +0 -45
  72. package/src/Framework/WebServer/Engine/ControllerManager.ts +0 -134
  73. package/src/Framework/WebServer/Engine/Engine.ts +0 -186
  74. package/src/Framework/WebServer/Engine/RazorJs.ts +0 -720
  75. package/src/Framework/WebServer/Engine/Request.ts +0 -267
  76. package/src/Framework/WebServer/Engine/Response.ts +0 -123
  77. package/src/Framework/WebServer/IWebServer.ts +0 -61
  78. package/src/Framework/cgserver.ts +0 -112
  79. package/src/Framework/index.ts +0 -92
  80. package/src/test/test.ts +0 -12
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "cgserver",
3
- "version": "7.10.2113",
3
+ "version": "7.12.2113",
4
4
  "author": "trojan",
5
5
  "type": "commonjs",
6
6
  "description": "free for all.Websocket or Http",
7
- "main": "./dist/lib/index.js",
8
- "types": "./dist/types/index.d.ts",
7
+ "main": "./dist/lib/Framework/index.js",
8
+ "types": "./dist/types/Framework/index.d.ts",
9
9
  "scripts": {
10
10
  "test": "echo \"Error: no test specified\" && exit 1"
11
11
  },
@@ -1,12 +0,0 @@
1
- import { Trigger } from './TriggerMgr';
2
- export class AiObject
3
- {
4
- onTriggerIn(obj,trigger:Trigger)
5
- {
6
-
7
- }
8
- onTriggerOut(obj,trigger:Trigger)
9
- {
10
-
11
- }
12
- }
@@ -1,157 +0,0 @@
1
- import { Point } from './Point';
2
- export interface IAStarMap
3
- {
4
- width():number
5
- height():number
6
- canPass(point:Point):boolean
7
- canPass(x:number,y:number):boolean
8
- extraWeight(point:Point):number
9
- }
10
- export class Rect
11
- {
12
- x=0
13
- y=0
14
- width=0
15
- height=0
16
- }
17
- class AStarNode
18
- {
19
- ParentNode: AStarNode=null
20
- CurTilePos: Point=null
21
- G: number=0
22
- H: number=0
23
- constructor(node:AStarNode, tilePos)
24
- {
25
- this.ParentNode = node;
26
- this.CurTilePos = tilePos;
27
- if (this.ParentNode)
28
- {
29
- this.G = this.ParentNode.G + 10;
30
- }
31
- else
32
- {
33
- this.G = 0;
34
- }
35
- }
36
- F()
37
- {
38
- return this.G + this.H;
39
- }
40
- }
41
-
42
- export class AStar
43
- {
44
- protected _markList: Array<AStarNode>=null
45
- protected _markedList: Array<AStarNode>=null
46
- protected _routes: Array<Point>=null
47
- protected _maxTileWidth: number=0
48
- protected _maxTileHeight: number=0
49
- /**
50
- * 先y在x,p(x:1,y:2),data[2][1]
51
- */
52
- protected _mapData:IAStarMap=null
53
- getRoutes(srcTilePos:Point, tarTilePos:Point, mapData:IAStarMap)
54
- {
55
- if(srcTilePos.equals(tarTilePos))
56
- {
57
- return []
58
- }
59
- this._markList = []
60
- this._markedList = []
61
- this._routes = []
62
- this._mapData = mapData
63
- this._maxTileWidth = this._mapData.width()
64
- this._maxTileHeight = this._mapData.height()
65
- let tp = srcTilePos.sub(tarTilePos)
66
- let node = new AStarNode(null, srcTilePos)
67
- node.H = (Math.abs(tp.x) + Math.abs(tp.y)) * 10+mapData.extraWeight(tarTilePos)
68
- this._markList.push(node)
69
-
70
- node = this._routing(srcTilePos, tarTilePos)
71
- while (node)
72
- {
73
- this._routes.push(node.CurTilePos)
74
- node = node.ParentNode
75
- }
76
- this._routes.reverse()
77
- this._routes.shift()
78
- return this._routes
79
- }
80
- protected _routing(srcTilePos:Point, tarTilePos:Point)
81
- {
82
- if (this._markList.length <= 0)//已经没有节点,是死路根本无法到达
83
- {
84
- return null
85
- }
86
-
87
- let node = this._markList[0]
88
- let curIndex = 0
89
- for (let i = 0; i < this._markList.length; ++i)
90
- {
91
- if (node.F() > this._markList[i].F())
92
- {
93
- node = this._markList[i];
94
- curIndex = i;
95
- }
96
- if (this._markList[i].CurTilePos.equals(tarTilePos))//到达终点
97
- {
98
- return this._markList[i];
99
- }
100
- }
101
- this._markList.splice(curIndex,1)
102
- this._markedList.push(node);
103
-
104
- let tp = new Point(0, 0);
105
- //上
106
- tp.x = node.CurTilePos.x; tp.y = node.CurTilePos.y + 1;
107
- this._addToMark(tp, tarTilePos, node);
108
- //下
109
- tp = new Point(0, 0);
110
- tp.x = node.CurTilePos.x; tp.y = node.CurTilePos.y - 1;
111
- this._addToMark(tp, tarTilePos, node);
112
- //左
113
- tp = new Point(0, 0);
114
- tp.x = node.CurTilePos.x - 1; tp.y = node.CurTilePos.y;
115
- this._addToMark(tp, tarTilePos, node);
116
- //右
117
- tp = new Point(0, 0);
118
- tp.x = node.CurTilePos.x + 1; tp.y = node.CurTilePos.y;
119
- this._addToMark(tp, tarTilePos, node);
120
-
121
- return this._routing(srcTilePos, tarTilePos);
122
- }
123
- protected _isInMark(tilePos)
124
- {
125
- for (let i = 0; i < this._markList.length; ++i)
126
- {
127
- if (this._markList[i].CurTilePos.equals(tilePos))
128
- {
129
- return true;
130
- }
131
- }
132
- for (let i = 0; i < this._markedList.length; ++i)
133
- {
134
- if (this._markedList[i].CurTilePos.equals(tilePos))
135
- {
136
- return true;
137
- }
138
- }
139
- return false;
140
- }
141
- protected _addToMark(curTilePos:Point, tarTilePos:Point, parentAStarNode:AStarNode)
142
- {
143
- //无地图数据
144
- if (curTilePos.x < 0 || curTilePos.y < 0
145
- || !this._mapData.canPass(curTilePos))
146
- {
147
- return
148
- }
149
- if (!this._isInMark(curTilePos))//未曾添加
150
- {
151
- let newNode = new AStarNode(parentAStarNode, curTilePos)
152
- let temp_tp = parentAStarNode.CurTilePos.sub(tarTilePos)
153
- newNode.H = (Math.abs(temp_tp.x) + Math.abs(temp_tp.y)) * 10
154
- this._markList.push(newNode)
155
- }
156
- }
157
- }
@@ -1,382 +0,0 @@
1
- import { GLog } from './../Logic/Log';
2
- import { core } from '../Core/Core';
3
- import * as _ from "underscore";
4
-
5
- import { GTriggerMgr, EConditionType } from "./TriggerMgr"
6
- import { Point } from './Point';
7
-
8
- export class BehaviorAI
9
- {
10
- protected _obj: any
11
- protected _targetObjs: any[]
12
- protected _triggers: any[]
13
- protected _behavior_data: any
14
- protected _current_behavior:any
15
- protected _current_behavior_name: string=""
16
- protected _current_check: any[]
17
- protected _targetObj: any
18
- constructor(behavior_data, obj, targetObjs)
19
- {
20
- this._obj = obj
21
- this._behavior_data = behavior_data
22
-
23
- if (core.isArray(targetObjs))
24
- {
25
- this._targetObjs = targetObjs
26
- }
27
- else if (targetObjs)
28
- {
29
- this._targetObjs[0] = targetObjs
30
- }
31
- else
32
- {
33
- this._targetObjs = []
34
- }
35
-
36
- this._triggers = []
37
- let code = GTriggerMgr.addConditionTriggerEvent(EConditionType.Die, this.onTriggerDie.bind(this), { code: this._obj.getCode() })
38
- this._triggers.push({ type: EConditionType.Die, code: code })
39
- }
40
- //启动行为树AI
41
- start()
42
- {
43
- if (!this._behavior_data)
44
- {
45
- GLog.info("------------error------------this._behavior_data can not be null!");
46
- return;
47
- }
48
- this.goto(this._behavior_data.start);
49
- }
50
- //结束行为树AI
51
- end()
52
- {
53
- for (let i = 0, length = this._triggers.length; i < length; ++i)
54
- {
55
- GTriggerMgr.removeConditionTriggerEvent(this._triggers[i].type, this._triggers[i].code);
56
- }
57
- this._triggers = [];
58
- }
59
- //帧检查
60
- //支持多条件check
61
- update(dt)
62
- {
63
- if (this._current_check.length < 0)
64
- {
65
- return
66
- }
67
-
68
- for (let i = 0; i < this._current_check.length; ++i)
69
- {
70
- let current = this._current_check[i]
71
- //目前只支持同时存在一个update检查
72
- if (current.event_name == "target_insight")
73
- {
74
- let targetInfo = this._getNearestTarget()
75
- if (targetInfo)
76
- {
77
- let target = targetInfo.target
78
- let distance = targetInfo.distance
79
- if (distance <= this._behavior_data.insight)//视野发现敌人
80
- {
81
- this._current_check=this._current_check.splice(i,1)
82
- --i
83
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name])
84
- if (forceReturn)
85
- {
86
- return//防止goto修改this._current_check后,做了立刻check
87
- }
88
- }
89
- }
90
- }
91
- else if (current.event_name == "sure")
92
- {
93
- this._current_check=this._current_check.splice(i,1)
94
- --i;
95
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
96
- if (forceReturn)
97
- {
98
- return;//防止goto修改this._current_check后,做了立刻check
99
- }
100
- }
101
- else if (current.event_name == "near")
102
- {
103
- if (this._targetObj)
104
- {
105
- let objPos:Point = this._obj.getPosition();
106
- let tpos:Point = this._targetObj.getPosition();
107
- let distance = objPos.sub(tpos).length();//目标和自己的距离
108
- let dty = objPos.y - tpos.y;
109
- dty = dty >= 0 ? dty : -dty;
110
- if (distance <= current.distance && dty <= 10)//视野发现敌人
111
- {
112
- this._current_check=this._current_check.splice(i,1)
113
- --i;
114
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
115
- if (forceReturn)
116
- {
117
- return;//防止goto修改this._current_check后,做了立刻check
118
- }
119
- }
120
- }
121
- else
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], true);
126
- if (forceReturn)
127
- {
128
- return;//防止goto修改this._current_check后,做了立刻check
129
- }
130
- }
131
- }
132
- else if (current.event_name == "timeout")
133
- {
134
- current.time -= dt;
135
- if (current.time <= 0)
136
- {
137
- this._current_check=this._current_check.splice(i,1)
138
- --i;
139
- let forceReturn = this._doEvents(this._current_behavior.conditions[current.event_name]);
140
- if (forceReturn)
141
- {
142
- return;//防止goto修改this._current_check后,做了立刻check
143
- }
144
- }
145
- }
146
- }
147
- }
148
- //goto事件
149
- goto(behavior_name)
150
- {
151
- //GLog.info("=====goto behavior=" + behavior_name);
152
- if (this._behavior_data && this._behavior_data.name == behavior_name)
153
- {
154
- return//拒绝相同行为跳转
155
- }
156
- this._current_check = [];
157
- this._current_behavior = this._behavior_data.behaviors[behavior_name];
158
-
159
- //全局条件
160
- if (this._behavior_data.conditions)
161
- {
162
- this._checkConditions(this._behavior_data.conditions);
163
- }
164
- //行为条件
165
- if (this._current_behavior.conditions)
166
- {
167
- this._checkConditions(this._current_behavior.conditions);
168
- }
169
-
170
- if (this._current_behavior.animation)
171
- {
172
- if (!this._current_behavior.conditions.animation_done)
173
- {
174
- this._obj.behaviorAnimation(this._current_behavior.animation.name, this._current_behavior.animation.loop);
175
- }
176
- else
177
- {
178
- let self = this;
179
- this._obj.behaviorAnimation(this._current_behavior.animation.name, this._current_behavior.animation.loop, function ()
180
- {
181
- self._doEvents(self._current_behavior.conditions.animation_done)
182
- });
183
- }
184
- }
185
- else
186
- {
187
- GLog.info("---------warning--------_goto->behavior_name=" + behavior_name + ".animaiton not exist!");
188
- }
189
- }
190
- //检查有没有已经达到的条件,又的话就执行他的相关事件
191
- _checkConditions(conditions)
192
- {
193
- if (!conditions)
194
- {
195
- return;
196
- }
197
- for (let key in conditions)
198
- {
199
- switch (key)
200
- {
201
- case "target_insight":
202
- {
203
- this._current_check.push({ event_name: key });
204
- }
205
- break;
206
- case "timeout":
207
- {
208
- this._current_check.push({ event_name: key, time: conditions[key].time });
209
- }
210
- break;
211
- case "sure":
212
- {
213
- this._current_check.push({ event_name: key });//下次update执行
214
- }
215
- break;
216
- case "near":
217
- {
218
- this._targetObj = null;
219
- this._current_check.push({ event_name: key, distance: conditions[key].distance });
220
- let targetInfo = this._getNearestTarget();
221
- if (targetInfo)
222
- {
223
- if (this._behavior_data.name == "sm")
224
- GLog.info("distance" + targetInfo.distance);
225
- this._targetObj = targetInfo.target;
226
- }
227
- }
228
- break;
229
- default:
230
- break;
231
- }
232
- }
233
- }
234
- //执行事件
235
- _doEvents(events, fail:boolean=false)
236
- {
237
- if (!events)
238
- {
239
- return false;
240
- }
241
- if (fail && events.failto)
242
- {
243
- this.goto(events.failto);
244
- return true;
245
- }
246
- let forceReturn = false;
247
- for (let key in events)
248
- {
249
- switch (key)
250
- {
251
- case "goto":
252
- {
253
- this.goto(events[key]);
254
- forceReturn = true;
255
- }
256
- break;
257
- case "walk_any":
258
- {
259
- if (this._obj.behaviorWalkAny)
260
- {
261
- this._obj.behaviorWalkAny();
262
- }
263
- }
264
- break;
265
- case "persue":
266
- {
267
- if (this._obj.behaviorPersue && this._targetObj)
268
- {
269
- this._obj.behaviorPersue(this._targetObj);
270
- }
271
- }
272
- break;
273
- case "call":
274
- {
275
- if (events[key].fun && this._obj[events[key].fun])
276
- {
277
- this._obj[events[key].fun](events[key].params);
278
- }
279
- }
280
- break;
281
- case "random":
282
- {
283
- let r = _.random(0,100);//百分率
284
- let rate = 0;
285
- let done = false;
286
- //最后一条不参与检测
287
- for (let i = 0, length = events[key].length; i < length - 1; ++i)
288
- {
289
- rate += events[key][i].rate;
290
- if (r <= rate)
291
- {
292
- forceReturn = this._doEvents(events[key][i].events);
293
- done = true;
294
- break;
295
- }
296
- }
297
- //如果前面都没有成功,必须保证最后一条得到执行
298
- if (!done)
299
- {
300
- forceReturn = this._doEvents(events[key][events[key].length - 1].events);
301
- }
302
- }
303
- default:
304
- break;
305
- }
306
- }
307
- return forceReturn;
308
- }
309
-
310
-
311
-
312
- //角色死亡触发
313
- onTriggerDie(userDM)
314
- {
315
- if (!userDM)
316
- {
317
- return
318
- }
319
- if (this._obj.getCode() === userDM.code)
320
- {
321
- this.goto("die")
322
- this.end()
323
- return
324
- }
325
- for (let i = 0, length = this._targetObjs.length; i < length; ++i)
326
- {
327
- if (this._targetObjs[i].getCode() === userDM.code)
328
- {
329
- this._targetObjs=this._targetObjs.splice(i,1)
330
- if (this._targetObj.getCode() === userDM.code)
331
- {
332
- this._targetObj = null
333
- }
334
- return
335
- }
336
- }
337
-
338
- return
339
- }
340
- //获取最近的target
341
- _getNearestTarget()
342
- {
343
- let targetNum = this._targetObjs.length;
344
- if (targetNum <= 0)
345
- {
346
- return null
347
- }
348
-
349
- let objPos:Point = this._obj.getPosition()
350
-
351
- if (targetNum == 1)
352
- {
353
- return { target: this._targetObjs[0], distance: objPos.sub(this._targetObjs[0].getPosition()).length() }
354
- }
355
-
356
- let minIndex = 0;
357
- let mindis = objPos.sub(this._targetObjs[0].getPosition()).length()
358
- for (let i = 1; i < targetNum; ++i)
359
- {
360
- let dis = objPos.sub(this._targetObjs[i].getPosition()).length()
361
- if (mindis > dis)
362
- {
363
- mindis = dis
364
- minIndex = i
365
- }
366
- }
367
- return { target: this._targetObjs[minIndex], distance: mindis }
368
- }
369
- //添加target
370
- addTarget(target)
371
- {
372
- if (!target)
373
- {
374
- return
375
- }
376
- this._targetObjs.push(target)
377
- }
378
- getTargets()
379
- {
380
- return this._targetObjs
381
- }
382
- }
@@ -1,37 +0,0 @@
1
- import { Point } from './Point';
2
- //世界物体,具有坐标可移动等特性
3
- export class Entity
4
- {
5
- protected _id=-1
6
- public get id()
7
- {
8
- return this._id
9
- }
10
- protected _world_pos:Point=new Point()
11
- public get worldPos()
12
- {
13
- return this._world_pos
14
- }
15
- public set worldPos(value:Point)
16
- {
17
- this._world_pos=value
18
- }
19
- protected _cell:Point=new Point()
20
- public get cellPos()
21
- {
22
- return this._cell
23
- }
24
- public set cellPos(value:Point)
25
- {
26
- this._cell=value
27
- }
28
- initPos(pos:Point)
29
- {
30
- //不能直接赋值,因为是引用
31
- this._world_pos.x=pos.x+0.5
32
- this._world_pos.y=pos.y+0.5
33
-
34
- this._cell.x=pos.x
35
- this._cell.y=pos.y
36
- }
37
- }
@@ -1,84 +0,0 @@
1
- export class Point
2
- {
3
- x=0
4
- y=0
5
- constructor(x:number=0,y:number=0)
6
- {
7
- this.x=x
8
- this.y=y
9
- }
10
- sub(pt:Point)
11
- {
12
- return new Point(this.x-pt.x,this.y-pt.y)
13
- }
14
- subSelf(pt:Point)
15
- {
16
- this.x-=pt.x
17
- this.y-=pt.y
18
- }
19
- add(pt:Point)
20
- {
21
- return new Point(this.x+pt.x,this.y+pt.y)
22
- }
23
- addSelf(pt:Point)
24
- {
25
- this.x+=pt.x
26
- this.y+=pt.y
27
- }
28
- equals(pt:Point)
29
- {
30
- return this.x==pt.x&&this.y==pt.y
31
- }
32
- fuzzyEqual(pt:Point,w:number)
33
- {
34
- let dtx=Math.abs(this.x-pt.x)
35
- if(dtx>=w)
36
- {
37
- return false
38
- }
39
- let dty=Math.abs(this.y-pt.y)
40
- if(dty>=w)
41
- {
42
- return false
43
- }
44
- return true
45
- }
46
- length()
47
- {
48
- return Math.sqrt(this.x*this.x+this.y*this.y)
49
- }
50
- mul(n:number)
51
- {
52
- return new Point(this.x*n,this.y*n)
53
- }
54
- mulSelf(n:number)
55
- {
56
- this.x*=n
57
- this.y*=n
58
- }
59
- toI()
60
- {
61
- return new Point(Math.floor(this.x),Math.floor(this.y))
62
- }
63
- normalize()
64
- {
65
-
66
- let len = this.length()
67
- if(len==0)
68
- {
69
- return new Point()
70
- }
71
- return new Point(this.x/len,this.y/len)
72
- }
73
- normalizeSelf()
74
- {
75
-
76
- let len = this.length()
77
- if(len==0)
78
- {
79
- return
80
- }
81
- this.x/=len
82
- this.y/=len
83
- }
84
- }