@daneren2005/shared-memory-physics 1.8.0 → 1.9.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.
- package/README.md +110 -2
- package/dist/components/navigation-component-constants.d.ts +11 -0
- package/dist/components/navigation-component.d.ts +31 -0
- package/dist/components/registry.d.ts +9 -0
- package/dist/index.d.ts +24 -2
- package/dist/index.js +1011 -310
- package/dist/index.js.map +1 -1
- package/dist/pathfinding/follow-path.d.ts +9 -0
- package/dist/pathfinding/grid-a-star.d.ts +29 -0
- package/dist/pathfinding/line-of-sight.d.ts +2 -0
- package/dist/pathfinding/min-heap.d.ts +14 -0
- package/dist/pathfinding/nav-grid.d.ts +42 -0
- package/dist/pathfinding/navigation-state.d.ts +20 -0
- package/dist/pathfinding/path-blockers.d.ts +29 -0
- package/dist/pathfinding/path-search.d.ts +27 -0
- package/dist/pathfinding/pathfinding-system.d.ts +27 -0
- package/dist/pathfinding/pathfinding-update.d.ts +36 -0
- package/dist/pathfinding/smooth-path.d.ts +3 -0
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -137,7 +137,7 @@ var k = class extends t {
|
|
|
137
137
|
}, n = e.angle;
|
|
138
138
|
return n !== 0 && (t.angle = n), t;
|
|
139
139
|
}
|
|
140
|
-
}, j = 0,
|
|
140
|
+
}, j = 0, ee = 1, te = 2, ne = 3, re = class extends t {
|
|
141
141
|
get velocityX() {
|
|
142
142
|
return this.block[0];
|
|
143
143
|
}
|
|
@@ -154,9 +154,9 @@ var k = class extends t {
|
|
|
154
154
|
return this.block[2];
|
|
155
155
|
}
|
|
156
156
|
set damping(e) {
|
|
157
|
-
|
|
157
|
+
N(e), this.block[2] = e;
|
|
158
158
|
}
|
|
159
|
-
},
|
|
159
|
+
}, M = {
|
|
160
160
|
type: Float32Array,
|
|
161
161
|
size: 3,
|
|
162
162
|
loadProperties: [
|
|
@@ -166,14 +166,14 @@ var k = class extends t {
|
|
|
166
166
|
],
|
|
167
167
|
toBlock(e) {
|
|
168
168
|
let t = e.damping ?? 0;
|
|
169
|
-
return
|
|
169
|
+
return N(t), [
|
|
170
170
|
e.velocityX ?? 0,
|
|
171
171
|
e.velocityY ?? 0,
|
|
172
172
|
t
|
|
173
173
|
];
|
|
174
174
|
},
|
|
175
175
|
attach(e, t, n) {
|
|
176
|
-
return new
|
|
176
|
+
return new re(t.getBlock(n), n);
|
|
177
177
|
},
|
|
178
178
|
save(e) {
|
|
179
179
|
return {
|
|
@@ -183,31 +183,31 @@ var k = class extends t {
|
|
|
183
183
|
};
|
|
184
184
|
}
|
|
185
185
|
};
|
|
186
|
-
function
|
|
186
|
+
function N(e) {
|
|
187
187
|
if (!Number.isFinite(e) || e < 0) throw Error("Damping must be a finite number of at least zero");
|
|
188
188
|
}
|
|
189
189
|
//#endregion
|
|
190
190
|
//#region src/components/dynamics-component-constants.ts
|
|
191
|
-
var
|
|
191
|
+
var ie = 0, ae = 1, oe = 2, se = 3, ce = class extends t {
|
|
192
192
|
get accelerationX() {
|
|
193
193
|
return this.block[0];
|
|
194
194
|
}
|
|
195
195
|
set accelerationX(e) {
|
|
196
|
-
|
|
196
|
+
de(e, "Acceleration"), this.block[0] = e;
|
|
197
197
|
}
|
|
198
198
|
get accelerationY() {
|
|
199
199
|
return this.block[1];
|
|
200
200
|
}
|
|
201
201
|
set accelerationY(e) {
|
|
202
|
-
|
|
202
|
+
de(e, "Acceleration"), this.block[1] = e;
|
|
203
203
|
}
|
|
204
204
|
get mass() {
|
|
205
205
|
return 1 / this.block[2];
|
|
206
206
|
}
|
|
207
207
|
set mass(e) {
|
|
208
|
-
|
|
208
|
+
ue(e), this.block[2] = 1 / e;
|
|
209
209
|
}
|
|
210
|
-
},
|
|
210
|
+
}, le = {
|
|
211
211
|
type: Float32Array,
|
|
212
212
|
size: 3,
|
|
213
213
|
loadProperties: [
|
|
@@ -217,14 +217,14 @@ var te = 0, ne = 1, re = 2, ie = 3, ae = class extends t {
|
|
|
217
217
|
],
|
|
218
218
|
toBlock(e) {
|
|
219
219
|
let t = e.accelerationX ?? 0, n = e.accelerationY ?? 0, r = e.mass ?? 1;
|
|
220
|
-
return
|
|
220
|
+
return de(t, "Acceleration"), de(n, "Acceleration"), ue(r), [
|
|
221
221
|
t,
|
|
222
222
|
n,
|
|
223
223
|
1 / r
|
|
224
224
|
];
|
|
225
225
|
},
|
|
226
226
|
attach(e, t, n) {
|
|
227
|
-
return new
|
|
227
|
+
return new ce(t.getBlock(n), n);
|
|
228
228
|
},
|
|
229
229
|
save(e) {
|
|
230
230
|
return {
|
|
@@ -234,42 +234,42 @@ var te = 0, ne = 1, re = 2, ie = 3, ae = class extends t {
|
|
|
234
234
|
};
|
|
235
235
|
}
|
|
236
236
|
};
|
|
237
|
-
function
|
|
237
|
+
function ue(e) {
|
|
238
238
|
if (!Number.isFinite(e) || e <= 0) throw Error("Mass must be a finite number greater than zero");
|
|
239
239
|
}
|
|
240
|
-
function
|
|
240
|
+
function de(e, t) {
|
|
241
241
|
if (!Number.isFinite(e)) throw Error(`${t} must be a finite number`);
|
|
242
242
|
}
|
|
243
243
|
//#endregion
|
|
244
244
|
//#region src/components/body-component-constants.ts
|
|
245
|
-
var
|
|
245
|
+
var fe = 1, pe = 2, me = 3, he = 4, ge = 1, _e = 4294967295, ve = 0, ye = 1, be = 2, xe = 3, Se = 7, Ce = 8, we = 16, Te = 32, Ee = 64, De = [
|
|
246
246
|
1,
|
|
247
247
|
2,
|
|
248
248
|
3,
|
|
249
249
|
4
|
|
250
250
|
];
|
|
251
|
-
function
|
|
251
|
+
function Oe(e, t, n, r) {
|
|
252
252
|
return (t & n) !== 0 && (r & e) !== 0;
|
|
253
253
|
}
|
|
254
|
-
function
|
|
254
|
+
function P(e) {
|
|
255
255
|
return e[0] & 7;
|
|
256
256
|
}
|
|
257
|
-
function
|
|
257
|
+
function F(e) {
|
|
258
258
|
return !!(e[0] & 8);
|
|
259
259
|
}
|
|
260
|
-
function
|
|
260
|
+
function ke(e) {
|
|
261
261
|
return !!(e[0] & 16);
|
|
262
262
|
}
|
|
263
|
-
function
|
|
263
|
+
function Ae(e) {
|
|
264
264
|
return !!(e[0] & 64);
|
|
265
265
|
}
|
|
266
|
-
function
|
|
266
|
+
function je(e) {
|
|
267
267
|
return !!(e[0] & 32);
|
|
268
268
|
}
|
|
269
|
-
function
|
|
269
|
+
function Me(e) {
|
|
270
270
|
e[0] |= 32;
|
|
271
271
|
}
|
|
272
|
-
var
|
|
272
|
+
var Ne = class extends t {
|
|
273
273
|
get shape() {
|
|
274
274
|
return this.block[0] & 7;
|
|
275
275
|
}
|
|
@@ -306,7 +306,7 @@ var Ae = class extends t {
|
|
|
306
306
|
set blocksPath(e) {
|
|
307
307
|
this.block[0] = e ? this.block[0] | 64 : this.block[0] & -65;
|
|
308
308
|
}
|
|
309
|
-
},
|
|
309
|
+
}, Pe = {
|
|
310
310
|
type: Uint32Array,
|
|
311
311
|
size: 3,
|
|
312
312
|
loadProperties: [
|
|
@@ -323,36 +323,36 @@ var Ae = class extends t {
|
|
|
323
323
|
],
|
|
324
324
|
toBlock(e) {
|
|
325
325
|
return [
|
|
326
|
-
|
|
326
|
+
Fe(e),
|
|
327
327
|
e.collideCategory ?? 1,
|
|
328
328
|
e.collideMask ?? 4294967295
|
|
329
329
|
];
|
|
330
330
|
},
|
|
331
331
|
attach(e, t, n) {
|
|
332
|
-
return new
|
|
332
|
+
return new Ne(t.getBlock(n), n);
|
|
333
333
|
}
|
|
334
334
|
};
|
|
335
|
-
function
|
|
336
|
-
let t =
|
|
335
|
+
function Fe(e) {
|
|
336
|
+
let t = Ie(e);
|
|
337
337
|
return e.sensor && (t |= 8), e.continuousCollisionDetection && (t |= 16), e.blocksPath && (t |= 64), t;
|
|
338
338
|
}
|
|
339
|
-
function
|
|
339
|
+
function Ie(e) {
|
|
340
340
|
let t = e.shape;
|
|
341
341
|
if (t === void 0) return e.vertices === void 0 ? e.radius === void 0 ? 1 : 2 : 4;
|
|
342
|
-
if (!
|
|
342
|
+
if (!De.includes(t)) throw Error(`Unknown body shape: ${t}`);
|
|
343
343
|
if (t === 4 && e.vertices === void 0) throw Error("A polygon body requires vertices");
|
|
344
344
|
return t;
|
|
345
345
|
}
|
|
346
346
|
//#endregion
|
|
347
347
|
//#region src/components/bounciness-component-constants.ts
|
|
348
|
-
var
|
|
348
|
+
var Le = 0, Re = 1, ze = class extends t {
|
|
349
349
|
get bounciness() {
|
|
350
350
|
return this.block[0];
|
|
351
351
|
}
|
|
352
352
|
set bounciness(e) {
|
|
353
353
|
this.block[0] = e;
|
|
354
354
|
}
|
|
355
|
-
},
|
|
355
|
+
}, Be = {
|
|
356
356
|
type: Float32Array,
|
|
357
357
|
size: 1,
|
|
358
358
|
loadProperties: ["bounciness"],
|
|
@@ -360,9 +360,9 @@ var Pe = 0, Fe = 1, Ie = class extends t {
|
|
|
360
360
|
return [e.bounciness ?? 0];
|
|
361
361
|
},
|
|
362
362
|
attach(e, t, n) {
|
|
363
|
-
return new
|
|
363
|
+
return new ze(t.getBlock(n), n);
|
|
364
364
|
}
|
|
365
|
-
},
|
|
365
|
+
}, Ve = 0, He = 1, Ue = 2, We = 3, Ge = 4, Ke = 5, qe = 6, Je = 7, Ye = 8, Xe = 9, Ze = 10, Qe = 11, $e = 12, et = 13, tt = 14, nt = 15, rt = 16, it = 17, at = class extends t {
|
|
366
366
|
get x() {
|
|
367
367
|
return this.block[0];
|
|
368
368
|
}
|
|
@@ -441,7 +441,7 @@ var Pe = 0, Fe = 1, Ie = class extends t {
|
|
|
441
441
|
set remainingDuration(e) {
|
|
442
442
|
this.block[7] = e;
|
|
443
443
|
}
|
|
444
|
-
},
|
|
444
|
+
}, ot = {
|
|
445
445
|
type: Float32Array,
|
|
446
446
|
size: 17,
|
|
447
447
|
loadProperties: ["interpolate"],
|
|
@@ -468,149 +468,236 @@ var Pe = 0, Fe = 1, Ie = class extends t {
|
|
|
468
468
|
];
|
|
469
469
|
},
|
|
470
470
|
attach(e, t, n) {
|
|
471
|
-
return new
|
|
471
|
+
return new at(t.getBlock(n), n);
|
|
472
|
+
}
|
|
473
|
+
}, st = 0, ct = 1, lt = 2, ut = 3, dt = 4, ft = 5, pt = 6, mt = 7, ht = 8, gt = 32, _t = 72, I = {
|
|
474
|
+
Found: 1,
|
|
475
|
+
Incomplete: 2,
|
|
476
|
+
Unreachable: 3
|
|
477
|
+
}, vt = class extends t {
|
|
478
|
+
get active() {
|
|
479
|
+
return this.block[5] !== 0;
|
|
480
|
+
}
|
|
481
|
+
get goalX() {
|
|
482
|
+
return i(this.block, 6);
|
|
483
|
+
}
|
|
484
|
+
get goalY() {
|
|
485
|
+
return i(this.block, 7);
|
|
486
|
+
}
|
|
487
|
+
get pending() {
|
|
488
|
+
return Tt(this.block);
|
|
489
|
+
}
|
|
490
|
+
get outcome() {
|
|
491
|
+
return this.block[2];
|
|
492
|
+
}
|
|
493
|
+
get waypointIndex() {
|
|
494
|
+
return this.block[3];
|
|
495
|
+
}
|
|
496
|
+
get waypoints() {
|
|
497
|
+
return Array.from({ length: this.block[4] }, (e, t) => Ot(this.block, t));
|
|
498
|
+
}
|
|
499
|
+
navigateTo(e, t) {
|
|
500
|
+
bt(this.block, e, t);
|
|
501
|
+
}
|
|
502
|
+
stop() {
|
|
503
|
+
St(this.block);
|
|
504
|
+
}
|
|
505
|
+
}, yt = {
|
|
506
|
+
type: Int32Array,
|
|
507
|
+
size: 72,
|
|
508
|
+
loadProperties: ["navigate"],
|
|
509
|
+
toBlock: () => Array.from({ length: 72 }, () => 0),
|
|
510
|
+
attach(e, t, n) {
|
|
511
|
+
return new vt(t.getBlock(n), n);
|
|
472
512
|
}
|
|
473
|
-
}
|
|
513
|
+
};
|
|
514
|
+
function bt(e, t, n) {
|
|
515
|
+
xt(e, t, n), e[5] = 1, wt(e);
|
|
516
|
+
}
|
|
517
|
+
function xt(e, t, n) {
|
|
518
|
+
a(e, 6, t), a(e, 7, n);
|
|
519
|
+
}
|
|
520
|
+
function St(e) {
|
|
521
|
+
e[5] = 0;
|
|
522
|
+
}
|
|
523
|
+
function Ct(e) {
|
|
524
|
+
return e[5] !== 0;
|
|
525
|
+
}
|
|
526
|
+
function wt(e) {
|
|
527
|
+
Atomics.add(e, 0, 1);
|
|
528
|
+
}
|
|
529
|
+
function Tt(e) {
|
|
530
|
+
return Atomics.load(e, 0) !== Atomics.load(e, 1);
|
|
531
|
+
}
|
|
532
|
+
function Et(e) {
|
|
533
|
+
return !Tt(e) && e[2] === I.Unreachable;
|
|
534
|
+
}
|
|
535
|
+
function Dt(e) {
|
|
536
|
+
return {
|
|
537
|
+
x: i(e, 6),
|
|
538
|
+
y: i(e, 7)
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
function Ot(e, t) {
|
|
542
|
+
return {
|
|
543
|
+
x: L(e, t),
|
|
544
|
+
y: kt(e, t)
|
|
545
|
+
};
|
|
546
|
+
}
|
|
547
|
+
function L(e, t) {
|
|
548
|
+
return i(e, 8 + t * 2);
|
|
549
|
+
}
|
|
550
|
+
function kt(e, t) {
|
|
551
|
+
return i(e, 8 + t * 2 + 1);
|
|
552
|
+
}
|
|
553
|
+
function At(e, t, n) {
|
|
554
|
+
let r = n.length > 32, i = r ? 32 : n.length;
|
|
555
|
+
for (let t = 0; t < i; t++) a(e, 8 + t * 2, n[t].x), a(e, 8 + t * 2 + 1, n[t].y);
|
|
556
|
+
e[4] = i, e[3] = 0, e[2] = r ? I.Incomplete : t;
|
|
557
|
+
}
|
|
558
|
+
//#endregion
|
|
559
|
+
//#region src/components/registry.ts
|
|
560
|
+
var jt = {
|
|
474
561
|
transform: A,
|
|
475
|
-
velocity:
|
|
476
|
-
body:
|
|
562
|
+
velocity: M,
|
|
563
|
+
body: Pe,
|
|
477
564
|
polygon: T,
|
|
478
|
-
bounciness:
|
|
479
|
-
dynamics:
|
|
480
|
-
interpolation:
|
|
481
|
-
},
|
|
565
|
+
bounciness: Be,
|
|
566
|
+
dynamics: le,
|
|
567
|
+
interpolation: ot
|
|
568
|
+
}, Mt = { navigation: yt }, R = {
|
|
482
569
|
x: 0,
|
|
483
570
|
y: 0
|
|
484
|
-
},
|
|
571
|
+
}, z = {
|
|
485
572
|
x: 0,
|
|
486
573
|
y: 0
|
|
487
574
|
};
|
|
488
|
-
function
|
|
575
|
+
function B(e, t) {
|
|
489
576
|
return Math.abs(e - t) / 2;
|
|
490
577
|
}
|
|
491
|
-
function
|
|
578
|
+
function V(e, t, n) {
|
|
492
579
|
return t > e ? n + Math.PI / 2 : n;
|
|
493
580
|
}
|
|
494
|
-
function
|
|
581
|
+
function Nt(e, t, n) {
|
|
495
582
|
return e === 2 ? t / 2 : e === 3 ? Math.min(t, n) / 2 : 0;
|
|
496
583
|
}
|
|
497
|
-
function
|
|
584
|
+
function Pt(e, t, n) {
|
|
498
585
|
return e === 2 ? t <= 0 : t <= 0 || n <= 0;
|
|
499
586
|
}
|
|
500
|
-
function
|
|
501
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(
|
|
587
|
+
function H(e, t, n, r) {
|
|
588
|
+
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(V(t, n, r))) * B(t, n) + Math.min(t, n) / 2 : Wt(t, n, r);
|
|
502
589
|
}
|
|
503
|
-
function
|
|
504
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(
|
|
590
|
+
function U(e, t, n, r) {
|
|
591
|
+
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(V(t, n, r))) * B(t, n) + Math.min(t, n) / 2 : Gt(t, n, r);
|
|
505
592
|
}
|
|
506
|
-
function
|
|
507
|
-
if (
|
|
593
|
+
function Ft(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
594
|
+
if (Pt(e, r, i) || Pt(o, l, u)) return !1;
|
|
508
595
|
let f = e !== 1, p = o !== 1;
|
|
509
|
-
if (!f && !p) return
|
|
510
|
-
if (f && !p) return
|
|
511
|
-
let m =
|
|
512
|
-
if (!f) return
|
|
513
|
-
let y =
|
|
514
|
-
return
|
|
596
|
+
if (!f && !p) return Kt(t, n, r, i, a, s, c, l, u, d);
|
|
597
|
+
if (f && !p) return Ft(o, s, c, l, u, d, e, t, n, r, i, a);
|
|
598
|
+
let m = It(o, l, u), h = V(l, u, d), g = Math.cos(h) * m, _ = Math.sin(h) * m, v = Nt(o, l, u);
|
|
599
|
+
if (!f) return Jt(s - g, c - _, s + g, c + _, t, n, r, i, a) < v * v;
|
|
600
|
+
let y = It(e, r, i), b = V(r, i, a), x = Math.cos(b) * y, S = Math.sin(b) * y, C = Nt(e, r, i) + v;
|
|
601
|
+
return qt(t - x, n - S, t + x, n + S, s - g, c - _, s + g, c + _) < C * C;
|
|
515
602
|
}
|
|
516
|
-
function
|
|
517
|
-
return e === 3 ?
|
|
603
|
+
function It(e, t, n) {
|
|
604
|
+
return e === 3 ? B(t, n) : 0;
|
|
518
605
|
}
|
|
519
|
-
function
|
|
606
|
+
function Lt(e, t, n, r, i, a, o, s, c, l, u, d, f) {
|
|
520
607
|
let p = e !== 1, m = o !== 1;
|
|
521
|
-
return !p && !m ?
|
|
608
|
+
return !p && !m ? Rt(t, n, r, i, a, s, c, l, u, d, f) : p && m ? zt(e, t, n, r, i, a, o, s, c, l, u, d, f) : p ? Bt(s, c, l, u, d, e, t, n, r, i, a, f) : Bt(t, n, r, i, a, o, s, c, l, u, d, f) ? (f.x = -f.x, f.y = -f.y, !0) : !1;
|
|
522
609
|
}
|
|
523
|
-
function
|
|
524
|
-
let d = Math.cos(i), f = Math.sin(i), p = Math.cos(l), m = Math.sin(l), h = n / 2, g = r / 2, _ = s / 2, v = c / 2, y = e - a, b = t - o, x =
|
|
610
|
+
function Rt(e, t, n, r, i, a, o, s, c, l, u) {
|
|
611
|
+
let d = Math.cos(i), f = Math.sin(i), p = Math.cos(l), m = Math.sin(l), h = n / 2, g = r / 2, _ = s / 2, v = c / 2, y = e - a, b = t - o, x = W(d, f, y, b, h, g, d, f, _, v, p, m);
|
|
525
612
|
u.x = d, u.y = f;
|
|
526
|
-
let S =
|
|
527
|
-
return S < x && (x = S, u.x = -f, u.y = d), S =
|
|
613
|
+
let S = W(-f, d, y, b, h, g, d, f, _, v, p, m);
|
|
614
|
+
return S < x && (x = S, u.x = -f, u.y = d), S = W(p, m, y, b, h, g, d, f, _, v, p, m), S < x && (x = S, u.x = p, u.y = m), S = W(-m, p, y, b, h, g, d, f, _, v, p, m), S < x && (u.x = -m, u.y = p), Ht(y, b, u), !0;
|
|
528
615
|
}
|
|
529
|
-
function
|
|
530
|
-
let p =
|
|
531
|
-
return x > 0 ? (f.x =
|
|
616
|
+
function zt(e, t, n, r, i, a, o, s, c, l, u, d, f) {
|
|
617
|
+
let p = It(e, r, i), m = V(r, i, a), h = Math.cos(m) * p, g = Math.sin(m) * p, _ = It(o, l, u), v = V(l, u, d), y = Math.cos(v) * _, b = Math.sin(v) * _, x = Math.sqrt(qt(t - h, n - g, t + h, n + g, s - y, c - b, s + y, c + b, R));
|
|
618
|
+
return x > 0 ? (f.x = R.x / x, f.y = R.y / x, !0) : Ut(t - s, n - c, f);
|
|
532
619
|
}
|
|
533
|
-
function
|
|
534
|
-
let f =
|
|
535
|
-
if (g > 0) return d.x =
|
|
536
|
-
let _ = Math.cos(i), v = Math.sin(i), y = o - e, b = s - t, x = y * _ + b * v, S = -y * v + b * _, C = m * _ + h * v, w = -m * v + h * _, T =
|
|
620
|
+
function Bt(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
621
|
+
let f = It(a, c, l), p = V(c, l, u), m = Math.cos(p) * f, h = Math.sin(p) * f, g = Math.sqrt(Jt(o - m, s - h, o + m, s + h, e, t, n, r, i, R));
|
|
622
|
+
if (g > 0) return d.x = R.x / g, d.y = R.y / g, !0;
|
|
623
|
+
let _ = Math.cos(i), v = Math.sin(i), y = o - e, b = s - t, x = y * _ + b * v, S = -y * v + b * _, C = m * _ + h * v, w = -m * v + h * _, T = Nt(a, c, l), E = n / 2, D = r / 2, O = Vt(1, 0, x, S, C, w, T, E, D);
|
|
537
624
|
d.x = 1, d.y = 0;
|
|
538
|
-
let k =
|
|
539
|
-
k < O && (O = k, d.x = 0, d.y = 1),
|
|
625
|
+
let k = Vt(0, 1, x, S, C, w, T, E, D);
|
|
626
|
+
k < O && (O = k, d.x = 0, d.y = 1), Ut(-w, C, z) && (k = Vt(z.x, z.y, x, S, C, w, T, E, D), k < O && (d.x = z.x, d.y = z.y)), Ht(x, S, d);
|
|
540
627
|
let A = d.x, j = d.y;
|
|
541
628
|
return d.x = A * _ - j * v, d.y = A * v + j * _, !0;
|
|
542
629
|
}
|
|
543
|
-
function
|
|
630
|
+
function Vt(e, t, n, r, i, a, o, s, c) {
|
|
544
631
|
return s * Math.abs(e) + c * Math.abs(t) + (Math.abs(i * e + a * t) + o) - Math.abs(n * e + r * t);
|
|
545
632
|
}
|
|
546
|
-
function
|
|
633
|
+
function Ht(e, t, n) {
|
|
547
634
|
e * n.x + t * n.y < 0 && (n.x = -n.x, n.y = -n.y);
|
|
548
635
|
}
|
|
549
|
-
function
|
|
636
|
+
function Ut(e, t, n) {
|
|
550
637
|
let r = Math.sqrt(e * e + t * t);
|
|
551
638
|
return r !== 0 && (n.x = e / r, n.y = t / r, !0);
|
|
552
639
|
}
|
|
553
|
-
function
|
|
640
|
+
function Wt(e, t, n) {
|
|
554
641
|
return (Math.abs(Math.cos(n)) * e + Math.abs(Math.sin(n)) * t) / 2;
|
|
555
642
|
}
|
|
556
|
-
function
|
|
643
|
+
function Gt(e, t, n) {
|
|
557
644
|
return (Math.abs(Math.sin(n)) * e + Math.abs(Math.cos(n)) * t) / 2;
|
|
558
645
|
}
|
|
559
|
-
function
|
|
646
|
+
function Kt(e, t, n, r, i, a, o, s, c, l) {
|
|
560
647
|
if (n <= 0 || r <= 0 || s <= 0 || c <= 0) return !1;
|
|
561
648
|
let u = Math.cos(i), d = Math.sin(i), f = Math.cos(l), p = Math.sin(l), m = n / 2, h = r / 2, g = s / 2, _ = c / 2, v = a - e, y = o - t;
|
|
562
|
-
return
|
|
649
|
+
return W(u, d, v, y, m, h, u, d, g, _, f, p) > 0 && W(-d, u, v, y, m, h, u, d, g, _, f, p) > 0 && W(f, p, v, y, m, h, u, d, g, _, f, p) > 0 && W(-p, f, v, y, m, h, u, d, g, _, f, p) > 0;
|
|
563
650
|
}
|
|
564
|
-
function
|
|
651
|
+
function W(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
565
652
|
return i * Math.abs(o * e + s * t) + a * Math.abs(-s * e + o * t) + (c * Math.abs(u * e + d * t) + l * Math.abs(-d * e + u * t)) - Math.abs(n * e + r * t);
|
|
566
653
|
}
|
|
567
|
-
function
|
|
654
|
+
function qt(e, t, n, r, i, a, o, s, c) {
|
|
568
655
|
let l = n - e, u = r - t, d = o - i, f = s - a, p = e - i, m = t - a, h = l * l + u * u, g = d * d + f * f, _ = d * p + f * m, v = 0, y = 0;
|
|
569
656
|
if (h <= 0 && g <= 0) return c && (c.x = p, c.y = m), p * p + m * m;
|
|
570
|
-
if (h <= 0) y =
|
|
657
|
+
if (h <= 0) y = q(_ / g);
|
|
571
658
|
else {
|
|
572
659
|
let e = l * p + u * m;
|
|
573
|
-
if (g <= 0) v =
|
|
660
|
+
if (g <= 0) v = q(-e / h);
|
|
574
661
|
else {
|
|
575
662
|
let t = l * d + u * f, n = h * g - t * t;
|
|
576
|
-
n !== 0 && (v =
|
|
663
|
+
n !== 0 && (v = q((t * _ - e * g) / n)), y = (t * v + _) / g, y < 0 ? (y = 0, v = q(-e / h)) : y > 1 && (y = 1, v = q((t - e) / h));
|
|
577
664
|
}
|
|
578
665
|
}
|
|
579
666
|
let b = e + l * v - (i + d * y), x = t + u * v - (a + f * y);
|
|
580
667
|
return c && (c.x = b, c.y = x), b * b + x * x;
|
|
581
668
|
}
|
|
582
|
-
function
|
|
669
|
+
function Jt(e, t, n, r, i, a, o, s, c, l) {
|
|
583
670
|
let u = Math.cos(c), d = Math.sin(c), f = o / 2, p = s / 2, m = e - i, h = t - a, g = n - i, _ = r - a, v = m * u + h * d, y = -m * d + h * u, b = g * u + _ * d, x = -g * d + _ * u;
|
|
584
|
-
if (!
|
|
585
|
-
if (!l) return Math.min(
|
|
586
|
-
let S =
|
|
587
|
-
S =
|
|
671
|
+
if (!Yt(v, y, b, x, f, p)) return l && (l.x = 0, l.y = 0), 0;
|
|
672
|
+
if (!l) return Math.min(Xt(v, y, f, p), Xt(b, x, f, p), K(-f, -p, v, y, b, x), K(f, -p, v, y, b, x), K(f, p, v, y, b, x), K(-f, p, v, y, b, x));
|
|
673
|
+
let S = Xt(v, y, f, p, l);
|
|
674
|
+
S = G(S, Xt(b, x, f, p, z), z, l, !1), S = G(S, K(-f, -p, v, y, b, x, z), z, l, !0), S = G(S, K(f, -p, v, y, b, x, z), z, l, !0), S = G(S, K(f, p, v, y, b, x, z), z, l, !0), S = G(S, K(-f, p, v, y, b, x, z), z, l, !0);
|
|
588
675
|
let C = l.x, w = l.y;
|
|
589
676
|
return l.x = C * u - w * d, l.y = C * d + w * u, S;
|
|
590
677
|
}
|
|
591
|
-
function
|
|
678
|
+
function G(e, t, n, r, i) {
|
|
592
679
|
return t >= e ? e : (r.x = i ? -n.x : n.x, r.y = i ? -n.y : n.y, t);
|
|
593
680
|
}
|
|
594
|
-
function
|
|
595
|
-
let s = i - n, c = a - r, l = s * s + c * c, u = l > 0 ?
|
|
681
|
+
function K(e, t, n, r, i, a, o) {
|
|
682
|
+
let s = i - n, c = a - r, l = s * s + c * c, u = l > 0 ? q(((e - n) * s + (t - r) * c) / l) : 0, d = e - (n + s * u), f = t - (r + c * u);
|
|
596
683
|
return o && (o.x = d, o.y = f), d * d + f * f;
|
|
597
684
|
}
|
|
598
|
-
function
|
|
685
|
+
function Yt(e, t, n, r, i, a) {
|
|
599
686
|
if (Math.max(e, n) < -i || Math.min(e, n) > i || Math.max(t, r) < -a || Math.min(t, r) > a) return !0;
|
|
600
687
|
let o = -(r - t), s = n - e;
|
|
601
688
|
return Math.abs(o * e + s * t) > i * Math.abs(o) + a * Math.abs(s);
|
|
602
689
|
}
|
|
603
|
-
function
|
|
690
|
+
function Xt(e, t, n, r, i) {
|
|
604
691
|
let a = Math.abs(e) - n, o = Math.abs(t) - r, s = a > 0 ? a : 0, c = o > 0 ? o : 0;
|
|
605
692
|
return i && (i.x = e < 0 ? -s : s, i.y = t < 0 ? -c : c), s * s + c * c;
|
|
606
693
|
}
|
|
607
|
-
function
|
|
694
|
+
function q(e) {
|
|
608
695
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
609
696
|
}
|
|
610
697
|
//#endregion
|
|
611
698
|
//#region src/systems/spatial-bounds.ts
|
|
612
|
-
function
|
|
613
|
-
let t = e.transform, n = e.body ?
|
|
699
|
+
function J(e) {
|
|
700
|
+
let t = e.transform, n = e.body ? P(e.body) : 1, r = t[2], i = t[3], a = t[4], o = H(n, r, i, a), s = U(n, r, i, a), c = t[0], l = t[1];
|
|
614
701
|
return {
|
|
615
702
|
minX: c - o,
|
|
616
703
|
minY: l - s,
|
|
@@ -618,15 +705,15 @@ function Y(e) {
|
|
|
618
705
|
maxY: l + s
|
|
619
706
|
};
|
|
620
707
|
}
|
|
621
|
-
function
|
|
708
|
+
function Zt(e, t, n, r, i) {
|
|
622
709
|
return e.minX <= r && e.maxX >= t && e.minY <= i && e.maxY >= n;
|
|
623
710
|
}
|
|
624
|
-
function
|
|
711
|
+
function Qt(e, t) {
|
|
625
712
|
return t > e ? t - e : Math.max(1, Math.abs(e)) * 2 ** -52;
|
|
626
713
|
}
|
|
627
714
|
//#endregion
|
|
628
715
|
//#region src/world.ts
|
|
629
|
-
var
|
|
716
|
+
var $t = class extends e {
|
|
630
717
|
spatialMap;
|
|
631
718
|
spatialIds = /* @__PURE__ */ new Set();
|
|
632
719
|
constructor(e, t = {}) {
|
|
@@ -649,7 +736,7 @@ var Tt = class extends e {
|
|
|
649
736
|
this.spatialIds.delete(t.eid), this.spatialMap.remove(t.eid);
|
|
650
737
|
return;
|
|
651
738
|
}
|
|
652
|
-
let i =
|
|
739
|
+
let i = J({
|
|
653
740
|
transform: r,
|
|
654
741
|
body: n.body?.block
|
|
655
742
|
});
|
|
@@ -657,12 +744,12 @@ var Tt = class extends e {
|
|
|
657
744
|
}
|
|
658
745
|
searchSpatial(e, t, n, r, i) {
|
|
659
746
|
if (n < e || r < t) return [];
|
|
660
|
-
let a = [], o = Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(r) ? this.spatialMap.search(e, t,
|
|
747
|
+
let a = [], o = Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(r) ? this.spatialMap.search(e, t, Qt(e, n), Qt(t, r)) : this.spatialIds;
|
|
661
748
|
for (let s of o) {
|
|
662
749
|
let o = this.getEntityByEid(s);
|
|
663
750
|
if (!o || i && !i(o)) continue;
|
|
664
751
|
let c = o.components, l = c.transform?.block;
|
|
665
|
-
l &&
|
|
752
|
+
l && Zt(J({
|
|
666
753
|
transform: l,
|
|
667
754
|
body: c.body?.block
|
|
668
755
|
}), e, t, n, r) && a.push(o);
|
|
@@ -684,60 +771,60 @@ var Tt = class extends e {
|
|
|
684
771
|
return t ? [t] : [];
|
|
685
772
|
});
|
|
686
773
|
}
|
|
687
|
-
},
|
|
774
|
+
}, en = {
|
|
688
775
|
min: 0,
|
|
689
776
|
max: 0
|
|
690
|
-
},
|
|
777
|
+
}, tn = {
|
|
691
778
|
min: 0,
|
|
692
779
|
max: 0
|
|
693
|
-
},
|
|
780
|
+
}, Y = {
|
|
694
781
|
overlap: !0,
|
|
695
782
|
depth: Infinity,
|
|
696
783
|
x: 0,
|
|
697
784
|
y: 0
|
|
698
785
|
};
|
|
699
|
-
function
|
|
700
|
-
return
|
|
786
|
+
function nn(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
|
|
787
|
+
return an(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !1);
|
|
701
788
|
}
|
|
702
|
-
function
|
|
703
|
-
return
|
|
789
|
+
function rn(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
|
|
790
|
+
return Y.depth = Infinity, !an(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !0) || Y.depth === Infinity ? !1 : (m.x = Y.x, m.y = Y.y, !0);
|
|
704
791
|
}
|
|
705
|
-
function
|
|
706
|
-
return !(e === 4 && (!t || !
|
|
792
|
+
function an(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
|
|
793
|
+
return !(e === 4 && (!t || !on(t, n, r, i, a, o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || s === 4 && (!c || !on(c, l, u, d, f, p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || e === 1 && !sn(o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || s === 1 && !sn(p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || mn(e) && c && !cn(e, n, r, i, a, o, c, l, u, d, f, p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || mn(s) && t && !cn(s, l, u, d, f, p, t, n, r, i, a, o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m));
|
|
707
794
|
}
|
|
708
|
-
function
|
|
795
|
+
function on(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b) {
|
|
709
796
|
let x = e[0], S = Math.cos(a), C = Math.sin(a);
|
|
710
797
|
for (let a = 0; a < x; a++) {
|
|
711
|
-
let w = (a + 1) % x, T =
|
|
712
|
-
if (!
|
|
798
|
+
let w = (a + 1) % x, T = dn(e, a, t, r, i, S, C), E = fn(e, a, n, r, i, S, C), D = dn(e, w, t, r, i, S, C);
|
|
799
|
+
if (!ln(E - fn(e, w, n, r, i, S, C), D - T, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b)) return !1;
|
|
713
800
|
}
|
|
714
801
|
return !0;
|
|
715
802
|
}
|
|
716
|
-
function
|
|
803
|
+
function sn(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) {
|
|
717
804
|
let g = Math.cos(e), _ = Math.sin(e);
|
|
718
|
-
return
|
|
805
|
+
return ln(g, _, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) && ln(-_, g, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h);
|
|
719
806
|
}
|
|
720
|
-
function
|
|
721
|
-
let D = e === 3 ?
|
|
722
|
-
for (let e = 0; e <
|
|
723
|
-
let t =
|
|
724
|
-
if (!
|
|
807
|
+
function cn(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E) {
|
|
808
|
+
let D = e === 3 ? B(r, i) : 0, O = V(r, i, a), k = Math.cos(O) * D, A = Math.sin(O) * D, j = t - k, ee = n - A, te = t + k, ne = n + A, re = o[0], M = Math.cos(d), N = Math.sin(d);
|
|
809
|
+
for (let e = 0; e < re; e++) {
|
|
810
|
+
let t = dn(o, e, s, l, u, M, N), n = fn(o, e, c, l, u, M, N), r = pn(j, ee, te, ne, t, n), i = j + (te - j) * r, a = ee + (ne - ee) * r;
|
|
811
|
+
if (!ln(t - i, n - a, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E)) return !1;
|
|
725
812
|
}
|
|
726
813
|
return !0;
|
|
727
814
|
}
|
|
728
|
-
function
|
|
815
|
+
function ln(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
729
816
|
let _ = Math.hypot(e, t);
|
|
730
817
|
if (_ === 0) return !0;
|
|
731
|
-
e /= _, t /= _,
|
|
732
|
-
let v =
|
|
818
|
+
e /= _, t /= _, un(n, r, i, a, o, s, c, e, t, en), un(l, u, d, f, p, m, h, e, t, tn);
|
|
819
|
+
let v = en.max - tn.min, y = tn.max - en.min;
|
|
733
820
|
if (!g && (v <= 0 || y <= 0)) return !1;
|
|
734
821
|
if (g) {
|
|
735
822
|
let n, r;
|
|
736
|
-
v <= 0 ? (n = -v, r = -1) : y <= 0 ? (n = -y, r = 1) : v < y ? (n = v, r = -1) : (n = y, r = 1), n <
|
|
823
|
+
v <= 0 ? (n = -v, r = -1) : y <= 0 ? (n = -y, r = 1) : v < y ? (n = v, r = -1) : (n = y, r = 1), n < Y.depth && (Y.depth = n, Y.x = e * r, Y.y = t * r);
|
|
737
824
|
}
|
|
738
825
|
return !0;
|
|
739
826
|
}
|
|
740
|
-
function
|
|
827
|
+
function un(e, t, n, r, i, a, o, s, c, l) {
|
|
741
828
|
let u = n * s + r * c;
|
|
742
829
|
if (e === 2) {
|
|
743
830
|
let e = i / 2;
|
|
@@ -745,7 +832,7 @@ function Ft(e, t, n, r, i, a, o, s, c, l) {
|
|
|
745
832
|
return;
|
|
746
833
|
}
|
|
747
834
|
if (e === 3) {
|
|
748
|
-
let e =
|
|
835
|
+
let e = B(i, a), t = V(i, a, o), n = Math.abs(s * Math.cos(t) + c * Math.sin(t)) * e + Math.min(i, a) / 2;
|
|
749
836
|
l.min = u - n, l.max = u + n;
|
|
750
837
|
return;
|
|
751
838
|
}
|
|
@@ -761,28 +848,28 @@ function Ft(e, t, n, r, i, a, o, s, c, l) {
|
|
|
761
848
|
let d = t[0], f = Math.cos(o), p = Math.sin(o);
|
|
762
849
|
l.min = Infinity, l.max = -Infinity;
|
|
763
850
|
for (let e = 0; e < d; e++) {
|
|
764
|
-
let o =
|
|
851
|
+
let o = dn(t, e, n, i, a, f, p), u = fn(t, e, r, i, a, f, p), d = o * s + u * c;
|
|
765
852
|
l.min = Math.min(l.min, d), l.max = Math.max(l.max, d);
|
|
766
853
|
}
|
|
767
854
|
}
|
|
768
|
-
function
|
|
855
|
+
function dn(e, t, n, r, i, a, o) {
|
|
769
856
|
let s = 1 + t * 2;
|
|
770
857
|
return n + e[s] * r * a - e[s + 1] * i * o;
|
|
771
858
|
}
|
|
772
|
-
function
|
|
859
|
+
function fn(e, t, n, r, i, a, o) {
|
|
773
860
|
let s = 1 + t * 2;
|
|
774
861
|
return n + e[s] * r * o + e[s + 1] * i * a;
|
|
775
862
|
}
|
|
776
|
-
function
|
|
863
|
+
function pn(e, t, n, r, i, a) {
|
|
777
864
|
let o = n - e, s = r - t, c = o * o + s * s;
|
|
778
865
|
return c === 0 ? 0 : Math.min(1, Math.max(0, ((i - e) * o + (a - t) * s) / c));
|
|
779
866
|
}
|
|
780
|
-
function
|
|
867
|
+
function mn(e) {
|
|
781
868
|
return e === 2 || e === 3;
|
|
782
869
|
}
|
|
783
870
|
//#endregion
|
|
784
871
|
//#region src/actions/dynamics-commands.ts
|
|
785
|
-
function
|
|
872
|
+
function hn() {
|
|
786
873
|
return {
|
|
787
874
|
forceX: 0,
|
|
788
875
|
forceY: 0,
|
|
@@ -792,7 +879,7 @@ function Bt() {
|
|
|
792
879
|
}
|
|
793
880
|
//#endregion
|
|
794
881
|
//#region src/actions/find-dynamics-command.ts
|
|
795
|
-
function
|
|
882
|
+
function gn(e, t) {
|
|
796
883
|
if (!e) return;
|
|
797
884
|
let n = 0, r = e.length - 1;
|
|
798
885
|
for (; n <= r;) {
|
|
@@ -803,7 +890,7 @@ function Vt(e, t) {
|
|
|
803
890
|
}
|
|
804
891
|
//#endregion
|
|
805
892
|
//#region src/actions/find-dynamics-command-offset.ts
|
|
806
|
-
function
|
|
893
|
+
function _n(e, t) {
|
|
807
894
|
let n = 0, r = e.length / 8 - 1;
|
|
808
895
|
for (; n <= r;) {
|
|
809
896
|
let i = n + r >>> 1, a = i * 8, o = e[a + 0];
|
|
@@ -814,10 +901,10 @@ function Ht(e, t) {
|
|
|
814
901
|
}
|
|
815
902
|
//#endregion
|
|
816
903
|
//#region src/systems/collision.ts
|
|
817
|
-
var
|
|
904
|
+
var vn = 1e-4, yn = 24, X = [], bn = 2 ** 26, xn = {
|
|
818
905
|
fraction: 1,
|
|
819
|
-
blocking:
|
|
820
|
-
},
|
|
906
|
+
blocking: X
|
|
907
|
+
}, Sn = class {
|
|
821
908
|
buckets = [];
|
|
822
909
|
hasBounciness = !1;
|
|
823
910
|
resolved = /* @__PURE__ */ new Set();
|
|
@@ -828,18 +915,18 @@ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
|
|
|
828
915
|
if (!o || !s) continue;
|
|
829
916
|
let c = s[1];
|
|
830
917
|
if (c === 0) continue;
|
|
831
|
-
let l =
|
|
832
|
-
if (
|
|
833
|
-
let f = o[4], p =
|
|
918
|
+
let l = P(s), u = o[2], d = o[3];
|
|
919
|
+
if (Pt(l, u, d)) continue;
|
|
920
|
+
let f = o[4], p = H(l, u, d, f), m = U(l, u, d, f);
|
|
834
921
|
e.bounciness && (this.hasBounciness = !0);
|
|
835
|
-
let h = e.velocity, g = e.dynamics, _ =
|
|
836
|
-
|
|
922
|
+
let h = e.velocity, g = e.dynamics, _ = gn(a, n.entityId), v = i ? _n(i, n.entityId) : -1, y = g?.[2] ?? 1, b = v < 0 ? _?.forceX ?? 0 : i[v + 1], x = v < 0 ? _?.forceY ?? 0 : i[v + 2], S = v < 0 ? _?.impulseX ?? 0 : i[v + 3], C = v < 0 ? _?.impulseY ?? 0 : i[v + 4], w = v < 0 ? 0 : i[v + 5], T = v < 0 ? _?.velocityX : w & 1 ? i[v + 6] : void 0, E = v < 0 ? _?.velocityY : w & 2 ? i[v + 7] : void 0, D = h?.[0] ?? 0, O = h?.[1] ?? 0, k = D + (g?.[0] ?? 0) * t + b * y * t + S * y, A = O + (g?.[1] ?? 0) * t + x * y * t + C * y, j = T ?? k, ee = E ?? A, te = Math.max(Math.abs(D), Math.abs(j)) * t, ne = Math.max(Math.abs(O), Math.abs(ee)) * t, re = o[0], M = o[1], N = r.get(c);
|
|
923
|
+
N || (N = {
|
|
837
924
|
entries: [],
|
|
838
925
|
bounds: []
|
|
839
|
-
}, r.set(c,
|
|
926
|
+
}, r.set(c, N)), N.entries.push({
|
|
840
927
|
entityId: n.entityId,
|
|
841
928
|
components: e
|
|
842
|
-
}),
|
|
929
|
+
}), N.bounds.push(re - p - te, M - m - ne, re + p + te, M + m + ne);
|
|
843
930
|
}
|
|
844
931
|
for (let [e, { entries: t, bounds: n }] of r) {
|
|
845
932
|
let r = new s(t.length);
|
|
@@ -852,26 +939,26 @@ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
|
|
|
852
939
|
}
|
|
853
940
|
}
|
|
854
941
|
claimContact(e, t) {
|
|
855
|
-
let n = e < t ? e *
|
|
942
|
+
let n = e < t ? e * bn + t : t * bn + e;
|
|
856
943
|
return !this.resolved.has(n) && (this.resolved.add(n), !0);
|
|
857
944
|
}
|
|
858
945
|
forEachOverlapping(e, t, n = 0, r = 0) {
|
|
859
|
-
let i =
|
|
946
|
+
let i = Tn(e);
|
|
860
947
|
if (!i) return;
|
|
861
948
|
let { x: a, y: o, halfWidth: s, halfHeight: c } = i;
|
|
862
949
|
if (i.ccd && (n !== 0 || r !== 0)) {
|
|
863
950
|
let e = a - n, l = o - r, u = Math.min(e, a) - s, d = Math.min(l, o) - c, f = Math.max(e, a) + s, p = Math.max(l, o) + c;
|
|
864
951
|
this.forEachCandidate(i, u, d, f, p, (a) => {
|
|
865
|
-
|
|
952
|
+
En(i, e, l, n, r, a) && t(a);
|
|
866
953
|
});
|
|
867
954
|
return;
|
|
868
955
|
}
|
|
869
956
|
this.forEachCandidate(i, a - s, o - c, a + s, o + c, (e) => {
|
|
870
|
-
|
|
957
|
+
Z(i, a, o, e) && t(e);
|
|
871
958
|
});
|
|
872
959
|
}
|
|
873
960
|
contactPoint(e, t, n, r) {
|
|
874
|
-
let i = e.components.transform, a = i[0], o = i[1], s = Math.sqrt(n * n + r * r), c =
|
|
961
|
+
let i = e.components.transform, a = i[0], o = i[1], s = Math.sqrt(n * n + r * r), c = Tn(e);
|
|
875
962
|
if (!c || s === 0) return {
|
|
876
963
|
x: a,
|
|
877
964
|
y: o
|
|
@@ -884,33 +971,33 @@ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
|
|
|
884
971
|
};
|
|
885
972
|
}
|
|
886
973
|
contactNormal(e, t, n, r, i) {
|
|
887
|
-
let a =
|
|
974
|
+
let a = Tn(e);
|
|
888
975
|
if (!a) return !1;
|
|
889
976
|
let o = n === 0 && r === 0 ? {
|
|
890
977
|
x: a.x,
|
|
891
978
|
y: a.y
|
|
892
979
|
} : this.contactPoint(e, t, n, r);
|
|
893
|
-
return
|
|
980
|
+
return Cn(a, o.x, o.y, t, i);
|
|
894
981
|
}
|
|
895
982
|
sweep(e, t, n) {
|
|
896
|
-
let r = Math.sqrt(t * t + n * n), i =
|
|
983
|
+
let r = Math.sqrt(t * t + n * n), i = Tn(e);
|
|
897
984
|
if (!i || r === 0) return {
|
|
898
985
|
fraction: 1,
|
|
899
|
-
blocking:
|
|
986
|
+
blocking: X
|
|
900
987
|
};
|
|
901
988
|
if (i.ccd) return this.sweepContinuous(i, t, n, r);
|
|
902
989
|
let a = this.gatherCandidates(i, t, n);
|
|
903
990
|
return a.length === 0 ? {
|
|
904
991
|
fraction: 1,
|
|
905
|
-
blocking:
|
|
992
|
+
blocking: X
|
|
906
993
|
} : this.refine(i, a, t, n, r);
|
|
907
994
|
}
|
|
908
995
|
resolveMove(e, t, n, r) {
|
|
909
|
-
let i = Math.sqrt(t * t + n * n), a =
|
|
996
|
+
let i = Math.sqrt(t * t + n * n), a = Tn(e);
|
|
910
997
|
if (!a || i === 0) return {
|
|
911
998
|
moveX: t,
|
|
912
999
|
moveY: n,
|
|
913
|
-
blocking:
|
|
1000
|
+
blocking: X
|
|
914
1001
|
};
|
|
915
1002
|
if (a.ccd) {
|
|
916
1003
|
let e = this.sweepContinuous(a, t, n, i);
|
|
@@ -924,20 +1011,20 @@ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
|
|
|
924
1011
|
if (o.length === 0) return {
|
|
925
1012
|
moveX: t,
|
|
926
1013
|
moveY: n,
|
|
927
|
-
blocking:
|
|
1014
|
+
blocking: X
|
|
928
1015
|
};
|
|
929
1016
|
if (r && t !== 0 && n !== 0) {
|
|
930
1017
|
let e = this.gatherCandidates(a, t, 0), r = this.gatherCandidates(a, 0, n);
|
|
931
1018
|
if (e.length === 0 && r.length === 0) return Math.abs(t) >= Math.abs(n) ? {
|
|
932
1019
|
moveX: t,
|
|
933
1020
|
moveY: 0,
|
|
934
|
-
blocking:
|
|
1021
|
+
blocking: X
|
|
935
1022
|
} : {
|
|
936
1023
|
moveX: 0,
|
|
937
1024
|
moveY: n,
|
|
938
|
-
blocking:
|
|
1025
|
+
blocking: X
|
|
939
1026
|
};
|
|
940
|
-
let i = e.length === 0 ?
|
|
1027
|
+
let i = e.length === 0 ? xn : this.refine(a, e, t, 0, Math.abs(t)), o = r.length === 0 ? xn : this.refine(a, r, 0, n, Math.abs(n)), s = t * i.fraction, c = n * o.fraction;
|
|
941
1028
|
if (s !== 0 && c !== 0) {
|
|
942
1029
|
let e = this.gatherCandidates(a, s, c);
|
|
943
1030
|
if (e.length > 0) {
|
|
@@ -952,7 +1039,7 @@ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
|
|
|
952
1039
|
return {
|
|
953
1040
|
moveX: s,
|
|
954
1041
|
moveY: c,
|
|
955
|
-
blocking:
|
|
1042
|
+
blocking: wn(i.blocking, o.blocking)
|
|
956
1043
|
};
|
|
957
1044
|
}
|
|
958
1045
|
let s = this.refine(a, o, t, n, i);
|
|
@@ -967,19 +1054,19 @@ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
|
|
|
967
1054
|
if (e.sensor) return [];
|
|
968
1055
|
let s = r + t, c = i + n, l = [];
|
|
969
1056
|
return this.forEachCandidate(e, s - a, c - o, s + a, c + o, (t) => {
|
|
970
|
-
|
|
1057
|
+
Z(e, s, c, t) && (F(t.components.body) || Z(e, r, i, t) || l.push(t));
|
|
971
1058
|
}), l;
|
|
972
1059
|
}
|
|
973
1060
|
refine(e, t, n, r, i) {
|
|
974
|
-
let { x: a, y: o } = e, s = 0, c = 1, l =
|
|
975
|
-
for (let i = 0; i <
|
|
1061
|
+
let { x: a, y: o } = e, s = 0, c = 1, l = vn / i;
|
|
1062
|
+
for (let i = 0; i < yn && c - s > l; i++) {
|
|
976
1063
|
let i = (s + c) / 2;
|
|
977
1064
|
this.blockedAt(e, t, n, r, i) ? c = i : s = i;
|
|
978
1065
|
}
|
|
979
1066
|
let u = [], d = a + n * c, f = o + r * c;
|
|
980
|
-
for (let n of t)
|
|
1067
|
+
for (let n of t) Z(e, d, f, n) && u.push(n);
|
|
981
1068
|
return {
|
|
982
|
-
fraction: s * i >
|
|
1069
|
+
fraction: s * i > vn ? s : 0,
|
|
983
1070
|
blocking: u
|
|
984
1071
|
};
|
|
985
1072
|
}
|
|
@@ -987,22 +1074,22 @@ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
|
|
|
987
1074
|
if (e.sensor) return [];
|
|
988
1075
|
let { x: r, y: i, halfWidth: a, halfHeight: o } = e, s = r + t, c = i + n, l = [];
|
|
989
1076
|
return this.forEachCandidate(e, Math.min(r, s) - a, Math.min(i, c) - o, Math.max(r, s) + a, Math.max(i, c) + o, (a) => {
|
|
990
|
-
|
|
1077
|
+
F(a.components.body) || Z(e, r, i, a) || En(e, r, i, t, n, a) && l.push(a);
|
|
991
1078
|
}), l;
|
|
992
1079
|
}
|
|
993
1080
|
sweepContinuous(e, t, n, r) {
|
|
994
1081
|
let i = this.gatherContinuousCandidates(e, t, n);
|
|
995
1082
|
if (i.length === 0) return {
|
|
996
1083
|
fraction: 1,
|
|
997
|
-
blocking:
|
|
1084
|
+
blocking: X
|
|
998
1085
|
};
|
|
999
|
-
let a = 1, o = [], s =
|
|
1086
|
+
let a = 1, o = [], s = vn / r;
|
|
1000
1087
|
for (let c of i) {
|
|
1001
1088
|
let i = this.entryFraction(e, c, t, n, r);
|
|
1002
1089
|
i < a - s ? (a = i, o = [c]) : i <= a + s && o.push(c);
|
|
1003
1090
|
}
|
|
1004
1091
|
return {
|
|
1005
|
-
fraction: a * r >
|
|
1092
|
+
fraction: a * r > vn ? a : 0,
|
|
1006
1093
|
blocking: o
|
|
1007
1094
|
};
|
|
1008
1095
|
}
|
|
@@ -1010,50 +1097,50 @@ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
|
|
|
1010
1097
|
let a;
|
|
1011
1098
|
if (this.blockedAtOne(e, t, n, r, 1)) a = 1;
|
|
1012
1099
|
else {
|
|
1013
|
-
let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l =
|
|
1100
|
+
let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l = Dn((s * n + c * r) / (i * i));
|
|
1014
1101
|
if (!this.blockedAtOne(e, t, n, r, l)) return l;
|
|
1015
1102
|
a = l;
|
|
1016
1103
|
}
|
|
1017
|
-
let o = 0, s =
|
|
1018
|
-
for (let i = 0; i <
|
|
1104
|
+
let o = 0, s = vn / i;
|
|
1105
|
+
for (let i = 0; i < yn && a - o > s; i++) {
|
|
1019
1106
|
let i = (o + a) / 2;
|
|
1020
1107
|
this.blockedAtOne(e, t, n, r, i) ? a = i : o = i;
|
|
1021
1108
|
}
|
|
1022
1109
|
return o;
|
|
1023
1110
|
}
|
|
1024
1111
|
blockedAtOne(e, t, n, r, i) {
|
|
1025
|
-
return
|
|
1112
|
+
return Z(e, Math.fround(e.x + n * i), Math.fround(e.y + r * i), t);
|
|
1026
1113
|
}
|
|
1027
1114
|
blockedAt(e, t, n, r, i) {
|
|
1028
1115
|
let a = Math.fround(e.x + n * i), o = Math.fround(e.y + r * i);
|
|
1029
|
-
for (let n of t) if (
|
|
1116
|
+
for (let n of t) if (Z(e, a, o, n)) return !0;
|
|
1030
1117
|
return !1;
|
|
1031
1118
|
}
|
|
1032
1119
|
forEachCandidate(e, t, r, i, a, o) {
|
|
1033
1120
|
for (let s of this.buckets) if ((e.mask & s.category) !== 0) for (let c of s.index.search(t, r, i, a)) {
|
|
1034
1121
|
let t = s.entries[c];
|
|
1035
|
-
t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[n] !== 1 && (
|
|
1122
|
+
t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[n] !== 1 && (je(t.components.body) || o(t));
|
|
1036
1123
|
}
|
|
1037
1124
|
}
|
|
1038
1125
|
};
|
|
1039
|
-
function
|
|
1040
|
-
let a = r.components.transform, o =
|
|
1041
|
-
return e.shape === 4 || o === 4 ?
|
|
1126
|
+
function Cn(e, t, n, r, i) {
|
|
1127
|
+
let a = r.components.transform, o = P(r.components.body), s = a[0], c = a[1], l = a[2], u = a[3], d = a[4];
|
|
1128
|
+
return e.shape === 4 || o === 4 ? rn(e.shape, e.polygon, t, n, e.width, e.height, e.angle, o, r.components.polygon, s, c, l, u, d, i) : Lt(e.shape, t, n, e.width, e.height, e.angle, o, s, c, l, u, d, i);
|
|
1042
1129
|
}
|
|
1043
|
-
function
|
|
1130
|
+
function wn(e, t) {
|
|
1044
1131
|
if (e.length === 0) return t;
|
|
1045
1132
|
if (t.length === 0) return e;
|
|
1046
1133
|
let n = [...e];
|
|
1047
1134
|
for (let e of t) n.some((t) => t.entityId === e.entityId) || n.push(e);
|
|
1048
1135
|
return n;
|
|
1049
1136
|
}
|
|
1050
|
-
function
|
|
1137
|
+
function Tn(e) {
|
|
1051
1138
|
let t = e.components.body;
|
|
1052
1139
|
if (!t) return;
|
|
1053
1140
|
let n = t[2];
|
|
1054
1141
|
if (n === 0) return;
|
|
1055
|
-
let r = e.components.transform, i =
|
|
1056
|
-
if (
|
|
1142
|
+
let r = e.components.transform, i = P(t), a = r[2], o = r[3];
|
|
1143
|
+
if (Pt(i, a, o)) return;
|
|
1057
1144
|
let s = r[4], c = e.components.polygon;
|
|
1058
1145
|
if (i !== 4 || c) return {
|
|
1059
1146
|
entityId: e.entityId,
|
|
@@ -1064,36 +1151,36 @@ function Xt(e) {
|
|
|
1064
1151
|
width: a,
|
|
1065
1152
|
height: o,
|
|
1066
1153
|
angle: s,
|
|
1067
|
-
halfWidth:
|
|
1068
|
-
halfHeight:
|
|
1154
|
+
halfWidth: H(i, a, o, s),
|
|
1155
|
+
halfHeight: U(i, a, o, s),
|
|
1069
1156
|
category: t[1],
|
|
1070
1157
|
mask: n,
|
|
1071
|
-
sensor:
|
|
1072
|
-
ccd:
|
|
1158
|
+
sensor: F(t),
|
|
1159
|
+
ccd: ke(t)
|
|
1073
1160
|
};
|
|
1074
1161
|
}
|
|
1075
|
-
function
|
|
1076
|
-
let o = t + r, s = n + i, c = a.components.transform, l =
|
|
1162
|
+
function En(e, t, n, r, i, a) {
|
|
1163
|
+
let o = t + r, s = n + i, c = a.components.transform, l = P(a.components.body), u = c[0], d = c[1], f = c[2], p = c[3], m = c[4];
|
|
1077
1164
|
if (e.shape === 1 || e.shape === 4) {
|
|
1078
1165
|
let c = Math.cos(e.angle), h = Math.sin(e.angle), g = r * c + i * h, _ = -r * h + i * c;
|
|
1079
|
-
return
|
|
1166
|
+
return On(1, void 0, (t + o) / 2, (n + s) / 2, e.width + Math.abs(g), e.height + Math.abs(_), e.angle, l, a.components.polygon, u, d, f, p, m);
|
|
1080
1167
|
}
|
|
1081
|
-
let h =
|
|
1082
|
-
return
|
|
1168
|
+
let h = Nt(e.shape, e.width, e.height), g = Math.sqrt(r * r + i * i), _ = g > 0 ? Math.atan2(i, r) : e.angle;
|
|
1169
|
+
return On(3, void 0, (t + o) / 2, (n + s) / 2, g + h * 2, h * 2, _, l, a.components.polygon, u, d, f, p, m) ? !0 : On(e.shape, e.polygon, o, s, e.width, e.height, e.angle, l, a.components.polygon, u, d, f, p, m);
|
|
1083
1170
|
}
|
|
1084
|
-
function
|
|
1171
|
+
function Dn(e) {
|
|
1085
1172
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
1086
1173
|
}
|
|
1087
|
-
function
|
|
1174
|
+
function Z(e, t, n, r) {
|
|
1088
1175
|
let i = r.components.transform;
|
|
1089
|
-
return
|
|
1176
|
+
return On(e.shape, e.polygon, t, n, e.width, e.height, e.angle, P(r.components.body), r.components.polygon, i[0], i[1], i[2], i[3], i[4]);
|
|
1090
1177
|
}
|
|
1091
|
-
function
|
|
1092
|
-
return e !== 4 && s !== 4 ?
|
|
1178
|
+
function On(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
|
|
1179
|
+
return e !== 4 && s !== 4 ? Ft(e, n, r, i, a, o, s, l, u, d, f, p) : nn(e, t, n, r, i, a, o, s, c, l, u, d, f, p);
|
|
1093
1180
|
}
|
|
1094
1181
|
//#endregion
|
|
1095
1182
|
//#region src/systems/spatial-index.ts
|
|
1096
|
-
var
|
|
1183
|
+
var kn = class {
|
|
1097
1184
|
entries = [];
|
|
1098
1185
|
index;
|
|
1099
1186
|
constructor(e) {
|
|
@@ -1101,7 +1188,7 @@ var en = class {
|
|
|
1101
1188
|
for (let n of e) {
|
|
1102
1189
|
let e = n.components, r = e.transform;
|
|
1103
1190
|
if (!r) continue;
|
|
1104
|
-
let i = e.body, a = i ?
|
|
1191
|
+
let i = e.body, a = i ? P(i) : 1, o = r[2], s = r[3], c = r[4], l = r[0], u = r[1], d = H(a, o, s, c), f = U(a, o, s, c);
|
|
1105
1192
|
this.entries.push({
|
|
1106
1193
|
entityId: n.entityId,
|
|
1107
1194
|
components: e
|
|
@@ -1136,44 +1223,44 @@ var en = class {
|
|
|
1136
1223
|
};
|
|
1137
1224
|
//#endregion
|
|
1138
1225
|
//#region src/actions/get-spatial-map.ts
|
|
1139
|
-
function
|
|
1226
|
+
function An(e) {
|
|
1140
1227
|
if (e.spatialMap) return e.spatialMap;
|
|
1141
1228
|
if (!e.heap || !e.spatialMapMemory) throw Error("Spatial system world is missing its shared MemoryHeap or spatial map");
|
|
1142
1229
|
return e.spatialMap = new o(e.heap, e.spatialMapMemory), e.spatialMap;
|
|
1143
1230
|
}
|
|
1144
1231
|
//#endregion
|
|
1145
1232
|
//#region src/actions/update-spatial-map.ts
|
|
1146
|
-
function
|
|
1233
|
+
function Q(e, t, n) {
|
|
1147
1234
|
if (!e.spatialMap && (!e.heap || !e.spatialMapMemory)) return;
|
|
1148
|
-
let r =
|
|
1235
|
+
let r = An(e), i = J(n);
|
|
1149
1236
|
r.update(t, i.minX, i.minY, i.maxX - i.minX, i.maxY - i.minY);
|
|
1150
1237
|
}
|
|
1151
1238
|
//#endregion
|
|
1152
1239
|
//#region src/actions/set-entity-position.ts
|
|
1153
|
-
function
|
|
1240
|
+
function jn(e, t, n) {
|
|
1154
1241
|
let r = t.components.transform;
|
|
1155
1242
|
if (!(r instanceof Float32Array)) return;
|
|
1156
1243
|
a(r, 0, n.x), a(r, 1, n.y);
|
|
1157
1244
|
let i = t.components.body;
|
|
1158
|
-
|
|
1245
|
+
Q(e, t.entityId, {
|
|
1159
1246
|
transform: r,
|
|
1160
1247
|
...i instanceof Uint32Array ? { body: i } : {}
|
|
1161
1248
|
});
|
|
1162
1249
|
}
|
|
1163
1250
|
//#endregion
|
|
1164
1251
|
//#region src/actions/add-physical-world-data.ts
|
|
1165
|
-
function
|
|
1252
|
+
function Mn(e, t) {
|
|
1166
1253
|
t.spatialMapMemory = e.spatialMap.getSharedMemory();
|
|
1167
1254
|
}
|
|
1168
1255
|
//#endregion
|
|
1169
1256
|
//#region src/actions/snap-entity.ts
|
|
1170
|
-
function
|
|
1257
|
+
function Nn(e) {
|
|
1171
1258
|
let { transform: t, interpolation: n } = e.components;
|
|
1172
1259
|
t && n && (n.targetX = n.x = t.x, n.targetY = n.y = t.y, n.previousX = t.x, n.previousY = t.y, n.remainingDuration = 0, n.syncedStepDuration = 0, n.syncedDuration = n.totalDuration);
|
|
1173
1260
|
}
|
|
1174
1261
|
//#endregion
|
|
1175
1262
|
//#region src/actions/start-spawn-interpolation.ts
|
|
1176
|
-
function
|
|
1263
|
+
function Pn(e, t) {
|
|
1177
1264
|
let { transform: n, velocity: r, interpolation: i } = e.components;
|
|
1178
1265
|
if (!n || !r || !i) return;
|
|
1179
1266
|
let a = 1 - (t.stepFraction < 0 ? 0 : t.stepFraction > 1 ? 1 : t.stepFraction), o = t.stepMs / 1e3, s = n.x, c = n.y, l = r.velocityX * o * a, u = r.velocityY * o * a;
|
|
@@ -1181,22 +1268,22 @@ function on(e, t) {
|
|
|
1181
1268
|
}
|
|
1182
1269
|
//#endregion
|
|
1183
1270
|
//#region src/actions/integrate-dynamics.ts
|
|
1184
|
-
function
|
|
1185
|
-
let i = e.dynamicsCommands, a = i instanceof Float64Array ? i : void 0, o =
|
|
1271
|
+
function Fn(e, t, n, r) {
|
|
1272
|
+
let i = e.dynamicsCommands, a = i instanceof Float64Array ? i : void 0, o = gn(i && !(i instanceof Float64Array) ? i : void 0, t), s = a ? _n(a, t) : -1, c = n[2];
|
|
1186
1273
|
if (!r && !o && s < 0 && c === 0) return;
|
|
1187
1274
|
let l = e.elapsedTime / 1e3, u = r?.[2] ?? 1, d = s < 0 ? o?.forceX ?? 0 : a[s + 1], f = s < 0 ? o?.forceY ?? 0 : a[s + 2], p = s < 0 ? o?.impulseX ?? 0 : a[s + 3], m = s < 0 ? o?.impulseY ?? 0 : a[s + 4], h = s < 0 ? 0 : a[s + 5], g = s < 0 ? o?.velocityX : h & 1 ? a[s + 6] : void 0, _ = s < 0 ? o?.velocityY : h & 2 ? a[s + 7] : void 0, v = c > 0 ? 1 / (1 + c * l) : 1, y = (n[0] + (r?.[0] ?? 0) * l + d * u * l + p * u) * v, b = (n[1] + (r?.[1] ?? 0) * l + f * u * l + m * u) * v;
|
|
1188
1275
|
n[0] = g ?? y, n[1] = _ ?? b;
|
|
1189
1276
|
}
|
|
1190
1277
|
//#endregion
|
|
1191
1278
|
//#region src/systems/bounce.ts
|
|
1192
|
-
var
|
|
1279
|
+
var In = {
|
|
1193
1280
|
x: 0,
|
|
1194
1281
|
y: 0
|
|
1195
1282
|
};
|
|
1196
|
-
function
|
|
1197
|
-
(
|
|
1283
|
+
function Ln(e, t, n = !1) {
|
|
1284
|
+
(Bn(e, n) || Bn(t, n)) && Vn(e, t) && Hn(e, t, In) && (zn(e, In.x, In.y, n), zn(t, -In.x, -In.y, n));
|
|
1198
1285
|
}
|
|
1199
|
-
function
|
|
1286
|
+
function Rn(e, t, n) {
|
|
1200
1287
|
let r = e.components.bounciness, i = e.components.velocity;
|
|
1201
1288
|
if (!r || !i) return;
|
|
1202
1289
|
let a = i[0], o = i[1], s = a * t + o * n;
|
|
@@ -1204,9 +1291,9 @@ function un(e, t, n) {
|
|
|
1204
1291
|
let c = (1 + r[0]) * s;
|
|
1205
1292
|
i[0] = a - c * t, i[1] = o - c * n;
|
|
1206
1293
|
}
|
|
1207
|
-
function
|
|
1294
|
+
function zn(e, t, n, r) {
|
|
1208
1295
|
if (e.components.bounciness) {
|
|
1209
|
-
|
|
1296
|
+
Rn(e, t, n);
|
|
1210
1297
|
return;
|
|
1211
1298
|
}
|
|
1212
1299
|
let i = e.components.velocity;
|
|
@@ -1214,30 +1301,30 @@ function dn(e, t, n, r) {
|
|
|
1214
1301
|
let a = i[0], o = i[1], s = a * t + o * n;
|
|
1215
1302
|
s < 0 && (i[0] = a - s * t, i[1] = o - s * n);
|
|
1216
1303
|
}
|
|
1217
|
-
function
|
|
1304
|
+
function Bn(e, t) {
|
|
1218
1305
|
return e.components.velocity !== void 0 && (t || e.components.bounciness !== void 0);
|
|
1219
1306
|
}
|
|
1220
|
-
function
|
|
1221
|
-
return !
|
|
1307
|
+
function Vn(e, t) {
|
|
1308
|
+
return !Wn(e.components.body) && !Wn(t.components.body);
|
|
1222
1309
|
}
|
|
1223
|
-
function
|
|
1224
|
-
let r = e.components.transform, i = t.components.transform, a =
|
|
1225
|
-
return a === 4 || o === 4 ?
|
|
1310
|
+
function Hn(e, t, n) {
|
|
1311
|
+
let r = e.components.transform, i = t.components.transform, a = Un(e.components.body), o = Un(t.components.body);
|
|
1312
|
+
return a === 4 || o === 4 ? rn(a, e.components.polygon, r[0], r[1], r[2], r[3], r[4], o, t.components.polygon, i[0], i[1], i[2], i[3], i[4], n) : Lt(a, r[0], r[1], r[2], r[3], r[4], o, i[0], i[1], i[2], i[3], i[4], n);
|
|
1226
1313
|
}
|
|
1227
|
-
function
|
|
1228
|
-
return e ?
|
|
1314
|
+
function Un(e) {
|
|
1315
|
+
return e ? P(e) : 1;
|
|
1229
1316
|
}
|
|
1230
|
-
function
|
|
1231
|
-
return e !== void 0 &&
|
|
1317
|
+
function Wn(e) {
|
|
1318
|
+
return e !== void 0 && F(e);
|
|
1232
1319
|
}
|
|
1233
1320
|
//#endregion
|
|
1234
1321
|
//#region src/actions/combine-dynamics-commands.ts
|
|
1235
|
-
function
|
|
1322
|
+
function Gn(e, t) {
|
|
1236
1323
|
if (e.size === 0) return t;
|
|
1237
1324
|
let n = /* @__PURE__ */ new Map();
|
|
1238
1325
|
for (let [t, r] of e) n.set(t, { ...r });
|
|
1239
|
-
return
|
|
1240
|
-
let r = n.get(e) ??
|
|
1326
|
+
return Kn(t, (e, t) => {
|
|
1327
|
+
let r = n.get(e) ?? hn();
|
|
1241
1328
|
n.set(e, {
|
|
1242
1329
|
forceX: r.forceX + t.forceX,
|
|
1243
1330
|
forceY: r.forceY + t.forceY,
|
|
@@ -1251,7 +1338,7 @@ function _n(e, t) {
|
|
|
1251
1338
|
...t
|
|
1252
1339
|
})).sort((e, t) => e.entityId - t.entityId);
|
|
1253
1340
|
}
|
|
1254
|
-
function
|
|
1341
|
+
function Kn(e, t) {
|
|
1255
1342
|
if (e) {
|
|
1256
1343
|
if (!(e instanceof Float64Array)) {
|
|
1257
1344
|
for (let { entityId: n, ...r } of e) t(n, r);
|
|
@@ -1272,64 +1359,64 @@ function vn(e, t) {
|
|
|
1272
1359
|
}
|
|
1273
1360
|
//#endregion
|
|
1274
1361
|
//#region src/actions/queue-dynamics-vector.ts
|
|
1275
|
-
function
|
|
1276
|
-
if (
|
|
1277
|
-
let o = e.get(t) ??
|
|
1362
|
+
function qn(e, t, n, r, i, a) {
|
|
1363
|
+
if (Jn(n, r, "Force"), Jn(i, a, "Impulse"), n === 0 && r === 0 && i === 0 && a === 0) return;
|
|
1364
|
+
let o = e.get(t) ?? hn(), s = {
|
|
1278
1365
|
...o,
|
|
1279
1366
|
forceX: o.forceX + n,
|
|
1280
1367
|
forceY: o.forceY + r,
|
|
1281
1368
|
impulseX: o.impulseX + i,
|
|
1282
1369
|
impulseY: o.impulseY + a
|
|
1283
1370
|
};
|
|
1284
|
-
|
|
1371
|
+
Jn(s.forceX, s.forceY, "Accumulated force"), Jn(s.impulseX, s.impulseY, "Accumulated impulse"), e.set(t, s);
|
|
1285
1372
|
}
|
|
1286
|
-
function
|
|
1373
|
+
function Jn(e, t, n) {
|
|
1287
1374
|
if (!Number.isFinite(e) || !Number.isFinite(t)) throw Error(`${n} must contain finite numbers`);
|
|
1288
1375
|
}
|
|
1289
1376
|
//#endregion
|
|
1290
1377
|
//#region src/actions/queue-velocity-assignment.ts
|
|
1291
|
-
function
|
|
1292
|
-
|
|
1293
|
-
...e.get(t) ??
|
|
1378
|
+
function Yn(e, t, n) {
|
|
1379
|
+
Xn(n), (n.velocityX !== void 0 || n.velocityY !== void 0) && e.set(t, {
|
|
1380
|
+
...e.get(t) ?? hn(),
|
|
1294
1381
|
...n
|
|
1295
1382
|
});
|
|
1296
1383
|
}
|
|
1297
|
-
function
|
|
1384
|
+
function Xn(e) {
|
|
1298
1385
|
if (e.velocityX !== void 0 && !Number.isFinite(e.velocityX) || e.velocityY !== void 0 && !Number.isFinite(e.velocityY)) throw Error("Velocity assignment must contain finite numbers");
|
|
1299
1386
|
}
|
|
1300
1387
|
//#endregion
|
|
1301
1388
|
//#region src/systems/physics-update.ts
|
|
1302
|
-
var
|
|
1389
|
+
var Zn = {
|
|
1303
1390
|
x: 0,
|
|
1304
1391
|
y: 0
|
|
1305
1392
|
};
|
|
1306
|
-
function
|
|
1393
|
+
function Qn(e = {}) {
|
|
1307
1394
|
let { onCollision: t, optional: r = [], group: i, stopVelocityOnContact: a = !1 } = e, o, s, c = /* @__PURE__ */ new Map(), l = Object.assign((e, r, c, l, u) => {
|
|
1308
1395
|
if (c.entity?.[n] === 1) return;
|
|
1309
|
-
if (c.body !== void 0 &&
|
|
1396
|
+
if (c.body !== void 0 && je(c.body)) {
|
|
1310
1397
|
u.entityDied(r);
|
|
1311
1398
|
return;
|
|
1312
1399
|
}
|
|
1313
|
-
let d = i ?
|
|
1400
|
+
let d = i ? er(c, i) : 0;
|
|
1314
1401
|
if (i && e.skipGroup === d) return;
|
|
1315
1402
|
let f = {
|
|
1316
1403
|
entityId: r,
|
|
1317
1404
|
components: c
|
|
1318
1405
|
}, p = c.interpolation, m = e.elapsedTime / 1e3;
|
|
1319
|
-
|
|
1406
|
+
Fn(e, r, c.velocity, c.dynamics);
|
|
1320
1407
|
let h = c.velocity[0] * m, g = c.velocity[1] * m;
|
|
1321
|
-
|
|
1408
|
+
ar(p, c.transform, e);
|
|
1322
1409
|
let _ = i ? s?.get(d) : o;
|
|
1323
1410
|
if (!_) {
|
|
1324
|
-
|
|
1411
|
+
sr(r, c.transform, h, g, u, e.reportMoves), Q(e, r, c), or(p, e.tick);
|
|
1325
1412
|
return;
|
|
1326
1413
|
}
|
|
1327
1414
|
let v = c.bounciness !== void 0, y = _.resolveMove(f, h, g, !v);
|
|
1328
|
-
if (
|
|
1415
|
+
if (sr(r, c.transform, y.moveX, y.moveY, u, e.reportMoves), Q(e, r, c), or(p, e.tick), _.hasBounciness || a || t) {
|
|
1329
1416
|
_.forEachOverlapping(f, (n) => {
|
|
1330
|
-
_.claimContact(r, n.entityId) &&
|
|
1417
|
+
_.claimContact(r, n.entityId) && tr(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
|
|
1331
1418
|
}, y.moveX, y.moveY);
|
|
1332
|
-
for (let n of y.blocking) _.claimContact(r, n.entityId) &&
|
|
1419
|
+
for (let n of y.blocking) _.claimContact(r, n.entityId) && tr(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
|
|
1333
1420
|
}
|
|
1334
1421
|
}, { physics: {
|
|
1335
1422
|
collision: !0,
|
|
@@ -1338,60 +1425,60 @@ function wn(e = {}) {
|
|
|
1338
1425
|
group: i
|
|
1339
1426
|
} });
|
|
1340
1427
|
return l.preRun = (e, t, n) => {
|
|
1341
|
-
|
|
1342
|
-
|
|
1428
|
+
$n(e, c), e.dieAtImpact = (t, n) => {
|
|
1429
|
+
rr(e, i ? s?.get(er(t.components, i)) : o, t, n);
|
|
1343
1430
|
};
|
|
1344
1431
|
let r = e.elapsedTime / 1e3, a = n.collidable ?? [];
|
|
1345
1432
|
if (!i) {
|
|
1346
|
-
o = new
|
|
1433
|
+
o = new Sn(a, r, e.dynamicsCommands);
|
|
1347
1434
|
return;
|
|
1348
1435
|
}
|
|
1349
1436
|
let l = /* @__PURE__ */ new Map();
|
|
1350
1437
|
for (let t of a) {
|
|
1351
|
-
let n =
|
|
1438
|
+
let n = er(t.components, i);
|
|
1352
1439
|
if (e.skipGroup === n) continue;
|
|
1353
1440
|
let r = l.get(n);
|
|
1354
1441
|
r || (r = [], l.set(n, r)), r.push(t);
|
|
1355
1442
|
}
|
|
1356
1443
|
s = /* @__PURE__ */ new Map();
|
|
1357
|
-
for (let [t, n] of l) s.set(t, new
|
|
1444
|
+
for (let [t, n] of l) s.set(t, new Sn(n, r, e.dynamicsCommands));
|
|
1358
1445
|
}, l;
|
|
1359
1446
|
}
|
|
1360
|
-
function
|
|
1447
|
+
function $n(e, t) {
|
|
1361
1448
|
let n = e, r = e.commandQueueId ?? 0, i = t.get(r);
|
|
1362
|
-
i && (e.dynamicsCommands =
|
|
1449
|
+
i && (e.dynamicsCommands = Gn(i, e.dynamicsCommands), t.delete(r));
|
|
1363
1450
|
let a = () => {
|
|
1364
1451
|
let e = t.get(r);
|
|
1365
1452
|
return e || (e = /* @__PURE__ */ new Map(), t.set(r, e)), e;
|
|
1366
1453
|
};
|
|
1367
1454
|
n.queueForce = (e, t, n) => {
|
|
1368
|
-
|
|
1455
|
+
qn(a(), e, t, n, 0, 0);
|
|
1369
1456
|
}, n.queueImpulse = (e, t, n) => {
|
|
1370
|
-
|
|
1457
|
+
qn(a(), e, 0, 0, t, n);
|
|
1371
1458
|
}, n.queueVelocity = (e, t) => {
|
|
1372
|
-
|
|
1459
|
+
Yn(a(), e, t);
|
|
1373
1460
|
};
|
|
1374
1461
|
}
|
|
1375
|
-
function
|
|
1462
|
+
function er(e, t) {
|
|
1376
1463
|
let n = e[t.component];
|
|
1377
1464
|
return n ? n[t.index] : 0;
|
|
1378
1465
|
}
|
|
1379
|
-
function
|
|
1380
|
-
if (
|
|
1381
|
-
let u =
|
|
1382
|
-
|
|
1383
|
-
normalX:
|
|
1384
|
-
normalY:
|
|
1385
|
-
}),
|
|
1466
|
+
function tr(e, t, n, r, i, a, o, s, c, l) {
|
|
1467
|
+
if (Ln(n, r, c), !l) return;
|
|
1468
|
+
let u = J(n.components), d = J(r.components);
|
|
1469
|
+
Zn.x = 0, Zn.y = 0, t.contactNormal(n, r, o, s, Zn), l(e, n, r, i, a, {
|
|
1470
|
+
normalX: Zn.x,
|
|
1471
|
+
normalY: Zn.y
|
|
1472
|
+
}), nr(e, n.entityId, n.components, u), nr(e, r.entityId, r.components, d);
|
|
1386
1473
|
}
|
|
1387
|
-
function
|
|
1388
|
-
let i =
|
|
1389
|
-
(i.minX !== r.minX || i.minY !== r.minY || i.maxX !== r.maxX || i.maxY !== r.maxY) &&
|
|
1474
|
+
function nr(e, t, n, r) {
|
|
1475
|
+
let i = J(n);
|
|
1476
|
+
(i.minX !== r.minX || i.minY !== r.minY || i.maxX !== r.maxX || i.maxY !== r.maxY) && Q(e, t, n);
|
|
1390
1477
|
}
|
|
1391
|
-
function
|
|
1478
|
+
function rr(e, t, n, r) {
|
|
1392
1479
|
let i = n.components.body;
|
|
1393
|
-
if (!i ||
|
|
1394
|
-
|
|
1480
|
+
if (!i || je(i)) return;
|
|
1481
|
+
Me(i);
|
|
1395
1482
|
let a = n.components.transform, o = n.components.velocity, s = r.components.transform, c = r.components.body;
|
|
1396
1483
|
if (!t || !a || !o || !s || !c) return;
|
|
1397
1484
|
let l = e.elapsedTime / 1e3, u = o[0] * l, d = o[1] * l;
|
|
@@ -1408,46 +1495,46 @@ function kn(e, t, n, r) {
|
|
|
1408
1495
|
} }, u, d);
|
|
1409
1496
|
a[0] = f.x, a[1] = f.y;
|
|
1410
1497
|
}
|
|
1411
|
-
function
|
|
1498
|
+
function ir(e, t, n, r, i) {
|
|
1412
1499
|
let a = e.elapsedTime / 1e3, o = n.interpolation;
|
|
1413
|
-
|
|
1500
|
+
Fn(e, t, n.velocity, n.dynamics), ar(o, n.transform, e), sr(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), Q(e, t, n), or(o, e.tick);
|
|
1414
1501
|
}
|
|
1415
|
-
function
|
|
1502
|
+
function ar(e, t, n) {
|
|
1416
1503
|
e && (a(e, 16, NaN), e[12] = t[0], e[13] = t[1], e[14] = e[3], e[15] = e[5], a(e, 16, i(e, 4)), a(e, 4, NaN), e[11] = n.interpolationChannel ?? 0, e[3] = n.elapsedTime, e[5] += n.elapsedTime);
|
|
1417
1504
|
}
|
|
1418
|
-
function
|
|
1505
|
+
function or(e, t) {
|
|
1419
1506
|
e && a(e, 4, t);
|
|
1420
1507
|
}
|
|
1421
|
-
function
|
|
1508
|
+
function sr(e, t, n, r, i, a) {
|
|
1422
1509
|
(n !== 0 || r !== 0) && (n !== 0 && c(t, 0, n, Infinity), r !== 0 && c(t, 1, r, Infinity), a !== !1 && i.emitSystemEvent(l, e));
|
|
1423
1510
|
}
|
|
1424
1511
|
//#endregion
|
|
1425
1512
|
//#region src/systems/interpolation-channels.ts
|
|
1426
|
-
var
|
|
1427
|
-
function
|
|
1428
|
-
let n =
|
|
1429
|
-
return n || (n = [void 0],
|
|
1513
|
+
var cr = /* @__PURE__ */ new WeakMap();
|
|
1514
|
+
function lr(e, t) {
|
|
1515
|
+
let n = cr.get(e);
|
|
1516
|
+
return n || (n = [void 0], cr.set(e, n)), n.push(t), n.length - 1;
|
|
1430
1517
|
}
|
|
1431
|
-
function
|
|
1432
|
-
let n =
|
|
1518
|
+
function ur(e, t) {
|
|
1519
|
+
let n = cr.get(e);
|
|
1433
1520
|
n && t > 0 && t < n.length && (n[t] = void 0);
|
|
1434
1521
|
}
|
|
1435
|
-
function
|
|
1436
|
-
let t =
|
|
1522
|
+
function dr(e) {
|
|
1523
|
+
let t = cr.get(e);
|
|
1437
1524
|
if (t) return t.map((e) => e ? e.committedTick : NaN);
|
|
1438
1525
|
}
|
|
1439
1526
|
//#endregion
|
|
1440
1527
|
//#region src/systems/physics-system.ts
|
|
1441
|
-
var
|
|
1528
|
+
var fr = 1, pr = class extends r {
|
|
1442
1529
|
spatialWorld;
|
|
1443
1530
|
pendingDynamicsCommands = /* @__PURE__ */ new Map();
|
|
1444
|
-
commandQueueId =
|
|
1531
|
+
commandQueueId = fr++;
|
|
1445
1532
|
tick = 0;
|
|
1446
1533
|
interpolationChannel;
|
|
1447
1534
|
reportMoves;
|
|
1448
1535
|
skipGroup;
|
|
1449
1536
|
constructor(e, t = {}) {
|
|
1450
|
-
let n = t.updateFunction ??
|
|
1537
|
+
let n = t.updateFunction ?? ir, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = n === ir || n.physics?.dynamics === !0, o = n.physics?.group, s = [];
|
|
1451
1538
|
i && !r.includes("body") && s.push("body"), i && !r.includes("bounciness") && s.push("bounciness"), i && !r.includes("polygon") && s.push("polygon"), r.includes("interpolation") || s.push("interpolation"), a && !r.includes("dynamics") && s.push("dynamics"), i && s.push("entity"), o && !r.includes(o.component) && s.push(o.component);
|
|
1452
1539
|
let c = s.length ? [...s, ...r] : r, l = r.includes("bounciness") ? [...r] : ["bounciness", ...r];
|
|
1453
1540
|
l.includes("polygon") || l.push("polygon"), a && !l.includes("dynamics") && l.push("dynamics"), o && !l.includes(o.component) && l.push(o.component);
|
|
@@ -1462,7 +1549,7 @@ var Rn = 1, zn = class extends r {
|
|
|
1462
1549
|
} } : void 0, f = d || t.queries ? {
|
|
1463
1550
|
...d,
|
|
1464
1551
|
...t.queries
|
|
1465
|
-
} : void 0, p =
|
|
1552
|
+
} : void 0, p = mr(t.scope, t.filter);
|
|
1466
1553
|
super(e, {
|
|
1467
1554
|
name: t.name ?? "PhysicsSystem",
|
|
1468
1555
|
deltaBetweenRuns: t.deltaBetweenRuns ?? 50,
|
|
@@ -1476,17 +1563,17 @@ var Rn = 1, zn = class extends r {
|
|
|
1476
1563
|
getWorker: t.getWorker ?? (() => {
|
|
1477
1564
|
throw Error("PhysicsSystem cannot start a worker: no getWorker was supplied");
|
|
1478
1565
|
})
|
|
1479
|
-
}), this.spatialWorld = e, this.reportMoves = t.reportMoves, this.skipGroup = t.skipGroup, this.interpolationChannel =
|
|
1566
|
+
}), this.spatialWorld = e, this.reportMoves = t.reportMoves, this.skipGroup = t.skipGroup, this.interpolationChannel = lr(e, this);
|
|
1480
1567
|
}
|
|
1481
1568
|
get committedTick() {
|
|
1482
1569
|
return this.isCurrentlyRunning() ? this.tick - 1 : this.tick;
|
|
1483
1570
|
}
|
|
1484
1571
|
destroy() {
|
|
1485
|
-
|
|
1572
|
+
ur(this.world, this.interpolationChannel), super.destroy();
|
|
1486
1573
|
}
|
|
1487
1574
|
startInterpolation(e) {
|
|
1488
1575
|
let t = this.deltaBetweenRuns;
|
|
1489
|
-
t <= 0 ||
|
|
1576
|
+
t <= 0 || Pn(e, {
|
|
1490
1577
|
stepMs: t,
|
|
1491
1578
|
stepFraction: this.currentDelta / t,
|
|
1492
1579
|
tick: this.tick
|
|
@@ -1500,14 +1587,14 @@ var Rn = 1, zn = class extends r {
|
|
|
1500
1587
|
}
|
|
1501
1588
|
queueVelocity(e, t) {
|
|
1502
1589
|
let n = typeof e == "number" ? e : e.eid;
|
|
1503
|
-
|
|
1590
|
+
Yn(this.pendingDynamicsCommands, n, t);
|
|
1504
1591
|
}
|
|
1505
1592
|
addDataToWorld(e) {
|
|
1506
|
-
e.tick = ++this.tick, e.interpolationChannel = this.interpolationChannel,
|
|
1593
|
+
e.tick = ++this.tick, e.interpolationChannel = this.interpolationChannel, Mn(this.spatialWorld, e), e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0, e.skipGroup = this.skipGroup, e.commandQueueId = this.commandQueueId, e.dynamicsCommands = this.snapshotDynamicsCommands();
|
|
1507
1594
|
}
|
|
1508
1595
|
queueDynamics(e, t, n, r, i) {
|
|
1509
1596
|
let a = typeof e == "number" ? e : e.eid;
|
|
1510
|
-
|
|
1597
|
+
qn(this.pendingDynamicsCommands, a, t, n, r, i);
|
|
1511
1598
|
}
|
|
1512
1599
|
snapshotDynamicsCommands() {
|
|
1513
1600
|
if (this.pendingDynamicsCommands.size === 0) return;
|
|
@@ -1523,12 +1610,626 @@ var Rn = 1, zn = class extends r {
|
|
|
1523
1610
|
return n;
|
|
1524
1611
|
}
|
|
1525
1612
|
};
|
|
1526
|
-
function
|
|
1613
|
+
function mr(e, t) {
|
|
1527
1614
|
return e ? t ? (n) => e(n) && t(n) : e : t;
|
|
1528
1615
|
}
|
|
1529
1616
|
//#endregion
|
|
1530
|
-
//#region src/
|
|
1531
|
-
var
|
|
1617
|
+
//#region src/pathfinding/nav-grid.ts
|
|
1618
|
+
var hr = 0, gr = class e {
|
|
1619
|
+
tilesWide;
|
|
1620
|
+
tilesHigh;
|
|
1621
|
+
cellSize;
|
|
1622
|
+
blockers;
|
|
1623
|
+
speeds;
|
|
1624
|
+
fastestSpeed = 1;
|
|
1625
|
+
regions;
|
|
1626
|
+
regionsDirty = !0;
|
|
1627
|
+
constructor(e, t, n) {
|
|
1628
|
+
if (!Number.isInteger(e) || !Number.isInteger(t) || e <= 0 || t <= 0) throw Error(`NavGrid needs a positive whole number of tiles, got ${e}x${t}`);
|
|
1629
|
+
if (!(n > 0)) throw Error(`NavGrid needs a positive cell size, got ${n}`);
|
|
1630
|
+
this.tilesWide = e, this.tilesHigh = t, this.cellSize = n, this.blockers = new Uint16Array(e * t), this.speeds = new Float32Array(e * t).fill(1), this.regions = new Int32Array(e * t);
|
|
1631
|
+
}
|
|
1632
|
+
clone() {
|
|
1633
|
+
let t = new e(this.tilesWide, this.tilesHigh, this.cellSize);
|
|
1634
|
+
return t.blockers.set(this.blockers), t.speeds.set(this.speeds), t.fastestSpeed = this.fastestSpeed, t;
|
|
1635
|
+
}
|
|
1636
|
+
get tileCount() {
|
|
1637
|
+
return this.tilesWide * this.tilesHigh;
|
|
1638
|
+
}
|
|
1639
|
+
get maxSpeed() {
|
|
1640
|
+
return this.fastestSpeed;
|
|
1641
|
+
}
|
|
1642
|
+
inBounds(e, t) {
|
|
1643
|
+
return e >= 0 && t >= 0 && e < this.tilesWide && t < this.tilesHigh;
|
|
1644
|
+
}
|
|
1645
|
+
index(e, t) {
|
|
1646
|
+
return t * this.tilesWide + e;
|
|
1647
|
+
}
|
|
1648
|
+
tileOf(e) {
|
|
1649
|
+
return Math.floor(e / this.cellSize);
|
|
1650
|
+
}
|
|
1651
|
+
tileCenter(e) {
|
|
1652
|
+
return (e + .5) * this.cellSize;
|
|
1653
|
+
}
|
|
1654
|
+
isBlocked(e, t) {
|
|
1655
|
+
return !this.inBounds(e, t) || this.blockers[this.index(e, t)] > 0;
|
|
1656
|
+
}
|
|
1657
|
+
isAreaClear(e, t, n, r) {
|
|
1658
|
+
if (!this.inBounds(e, t) || !this.inBounds(e + n - 1, t + r - 1)) return !1;
|
|
1659
|
+
for (let i = t; i < t + r; i++) for (let t = e; t < e + n; t++) if (this.blockers[this.index(t, i)] > 0) return !1;
|
|
1660
|
+
return !0;
|
|
1661
|
+
}
|
|
1662
|
+
blockerCount(e, t) {
|
|
1663
|
+
return this.inBounds(e, t) ? this.blockers[this.index(e, t)] : 0;
|
|
1664
|
+
}
|
|
1665
|
+
tilesIn(e) {
|
|
1666
|
+
return !(e.maxX > e.minX) || !(e.maxY > e.minY) ? {
|
|
1667
|
+
fromX: 0,
|
|
1668
|
+
fromY: 0,
|
|
1669
|
+
toX: -1,
|
|
1670
|
+
toY: -1
|
|
1671
|
+
} : {
|
|
1672
|
+
fromX: Math.max(0, Math.floor(e.minX / this.cellSize)),
|
|
1673
|
+
fromY: Math.max(0, Math.floor(e.minY / this.cellSize)),
|
|
1674
|
+
toX: Math.min(this.tilesWide - 1, Math.ceil(e.maxX / this.cellSize) - 1),
|
|
1675
|
+
toY: Math.min(this.tilesHigh - 1, Math.ceil(e.maxY / this.cellSize) - 1)
|
|
1676
|
+
};
|
|
1677
|
+
}
|
|
1678
|
+
addBlocker(e) {
|
|
1679
|
+
let t = this.tilesIn(e);
|
|
1680
|
+
for (let e = t.fromY; e <= t.toY; e++) for (let n = t.fromX; n <= t.toX; n++) {
|
|
1681
|
+
let t = this.index(n, e);
|
|
1682
|
+
this.blockers[t] < 65535 && this.blockers[t]++;
|
|
1683
|
+
}
|
|
1684
|
+
this.regionsDirty = !0;
|
|
1685
|
+
}
|
|
1686
|
+
removeBlocker(e) {
|
|
1687
|
+
let t = this.tilesIn(e);
|
|
1688
|
+
for (let e = t.fromY; e <= t.toY; e++) for (let n = t.fromX; n <= t.toX; n++) {
|
|
1689
|
+
let t = this.index(n, e);
|
|
1690
|
+
this.blockers[t] > 0 && this.blockers[t]--;
|
|
1691
|
+
}
|
|
1692
|
+
this.regionsDirty = !0;
|
|
1693
|
+
}
|
|
1694
|
+
setTerrainSpeed(e, t, n) {
|
|
1695
|
+
if (!(n > 0) || !Number.isFinite(n)) throw Error(`Terrain speed must be a positive finite number, got ${n}`);
|
|
1696
|
+
this.inBounds(e, t) && (this.speeds[this.index(e, t)] = n, this.fastestSpeed = Math.max(this.fastestSpeed, n));
|
|
1697
|
+
}
|
|
1698
|
+
terrainSpeed(e, t) {
|
|
1699
|
+
return this.inBounds(e, t) ? this.speeds[this.index(e, t)] : 1;
|
|
1700
|
+
}
|
|
1701
|
+
cost(e, t) {
|
|
1702
|
+
return this.cellSize / this.speeds[this.index(e, t)];
|
|
1703
|
+
}
|
|
1704
|
+
region(e, t) {
|
|
1705
|
+
return this.inBounds(e, t) ? (this.regionsDirty && this.rebuildRegions(), this.regions[this.index(e, t)]) : hr;
|
|
1706
|
+
}
|
|
1707
|
+
rebuildRegions() {
|
|
1708
|
+
let e = this.regions;
|
|
1709
|
+
e.fill(hr);
|
|
1710
|
+
let t = new Int32Array(this.tileCount), n = hr;
|
|
1711
|
+
for (let r = 0; r < e.length; r++) {
|
|
1712
|
+
if (e[r] !== hr || this.blockers[r] > 0) continue;
|
|
1713
|
+
n++, e[r] = n;
|
|
1714
|
+
let i = 0, a = 0;
|
|
1715
|
+
for (t[a++] = r; i < a;) {
|
|
1716
|
+
let e = t[i++], r = e % this.tilesWide, o = (e - r) / this.tilesWide;
|
|
1717
|
+
a = this.flood(r - 1, o, n, t, a), a = this.flood(r + 1, o, n, t, a), a = this.flood(r, o - 1, n, t, a), a = this.flood(r, o + 1, n, t, a);
|
|
1718
|
+
}
|
|
1719
|
+
}
|
|
1720
|
+
this.regionsDirty = !1;
|
|
1721
|
+
}
|
|
1722
|
+
flood(e, t, n, r, i) {
|
|
1723
|
+
if (!this.inBounds(e, t)) return i;
|
|
1724
|
+
let a = this.index(e, t);
|
|
1725
|
+
return this.regions[a] !== hr || this.blockers[a] > 0 ? i : (this.regions[a] = n, r[i] = a, i + 1);
|
|
1726
|
+
}
|
|
1727
|
+
}, _r = class {
|
|
1728
|
+
ids;
|
|
1729
|
+
primary;
|
|
1730
|
+
secondary;
|
|
1731
|
+
count = 0;
|
|
1732
|
+
constructor(e = 64) {
|
|
1733
|
+
this.ids = new Int32Array(e), this.primary = new Float64Array(e), this.secondary = new Float64Array(e);
|
|
1734
|
+
}
|
|
1735
|
+
get size() {
|
|
1736
|
+
return this.count;
|
|
1737
|
+
}
|
|
1738
|
+
clear() {
|
|
1739
|
+
this.count = 0;
|
|
1740
|
+
}
|
|
1741
|
+
push(e, t, n = 0) {
|
|
1742
|
+
this.count === this.ids.length && this.grow();
|
|
1743
|
+
let r = this.count++;
|
|
1744
|
+
for (; r > 0;) {
|
|
1745
|
+
let e = r - 1 >> 1;
|
|
1746
|
+
if (!this.less(t, n, this.primary[e], this.secondary[e])) break;
|
|
1747
|
+
this.set(r, this.ids[e], this.primary[e], this.secondary[e]), r = e;
|
|
1748
|
+
}
|
|
1749
|
+
this.set(r, e, t, n);
|
|
1750
|
+
}
|
|
1751
|
+
pop() {
|
|
1752
|
+
if (this.count === 0) return -1;
|
|
1753
|
+
let e = this.ids[0], t = --this.count;
|
|
1754
|
+
if (t > 0) {
|
|
1755
|
+
let e = this.ids[t], n = this.primary[t], r = this.secondary[t], i = 0;
|
|
1756
|
+
for (;;) {
|
|
1757
|
+
let e = i * 2 + 1;
|
|
1758
|
+
if (e >= t) break;
|
|
1759
|
+
let a = e + 1, o = a < t && this.less(this.primary[a], this.secondary[a], this.primary[e], this.secondary[e]) ? a : e;
|
|
1760
|
+
if (!this.less(this.primary[o], this.secondary[o], n, r)) break;
|
|
1761
|
+
this.set(i, this.ids[o], this.primary[o], this.secondary[o]), i = o;
|
|
1762
|
+
}
|
|
1763
|
+
this.set(i, e, n, r);
|
|
1764
|
+
}
|
|
1765
|
+
return e;
|
|
1766
|
+
}
|
|
1767
|
+
less(e, t, n, r) {
|
|
1768
|
+
return e < n || e === n && t < r;
|
|
1769
|
+
}
|
|
1770
|
+
set(e, t, n, r) {
|
|
1771
|
+
this.ids[e] = t, this.primary[e] = n, this.secondary[e] = r;
|
|
1772
|
+
}
|
|
1773
|
+
grow() {
|
|
1774
|
+
let e = this.ids.length * 2, t = new Int32Array(e), n = new Float64Array(e), r = new Float64Array(e);
|
|
1775
|
+
t.set(this.ids), n.set(this.primary), r.set(this.secondary), this.ids = t, this.primary = n, this.secondary = r;
|
|
1776
|
+
}
|
|
1777
|
+
};
|
|
1778
|
+
//#endregion
|
|
1779
|
+
//#region src/pathfinding/line-of-sight.ts
|
|
1780
|
+
function vr(e, t, n, r, i, a, o) {
|
|
1781
|
+
let s = e.cellSize, c = r - t, l = i - n, u = o + s / 2, d = Math.floor((Math.min(n, i) - o) / s), f = Math.ceil((Math.max(n, i) + o) / s) - 1, p = 0;
|
|
1782
|
+
for (let r = d; r <= f; r++) {
|
|
1783
|
+
let i = (r + .5) * s, o, d;
|
|
1784
|
+
if (l === 0) {
|
|
1785
|
+
if (Math.abs(n - i) >= u) continue;
|
|
1786
|
+
o = -Infinity, d = Infinity;
|
|
1787
|
+
} else {
|
|
1788
|
+
let e = (i - u - n) / l, t = (i + u - n) / l;
|
|
1789
|
+
o = Math.min(e, t), d = Math.max(e, t);
|
|
1790
|
+
}
|
|
1791
|
+
let f = Math.max(o, 0), m = Math.min(d, 1);
|
|
1792
|
+
if (f > m || f === m && !(o < f && m < d)) continue;
|
|
1793
|
+
let h = t + c * f, g = t + c * m, _ = Math.floor((Math.min(h, g) - a) / s), v = Math.ceil((Math.max(h, g) + a) / s) - 1;
|
|
1794
|
+
for (let t = _; t <= v; t++) {
|
|
1795
|
+
if (e.isBlocked(t, r)) return Infinity;
|
|
1796
|
+
p = Math.max(p, 1 / e.terrainSpeed(t, r));
|
|
1797
|
+
}
|
|
1798
|
+
}
|
|
1799
|
+
return p;
|
|
1800
|
+
}
|
|
1801
|
+
//#endregion
|
|
1802
|
+
//#region src/pathfinding/smooth-path.ts
|
|
1803
|
+
var yr = 24;
|
|
1804
|
+
function br(e, t, n, r, i) {
|
|
1805
|
+
let a = Cr(t);
|
|
1806
|
+
if (a.length <= 2) return a;
|
|
1807
|
+
let o = new Float64Array(a.length);
|
|
1808
|
+
for (let t = 1; t < a.length; t++) o[t] = o[t - 1] + xr(e, a[t - 1], a[t], n, r);
|
|
1809
|
+
let s = [0];
|
|
1810
|
+
for (let e = 1; e < a.length - 1; e++) Sr(a[e - 1], a[e], a[e + 1]) || s.push(e);
|
|
1811
|
+
s.push(a.length - 1);
|
|
1812
|
+
let c = [a[0]], l = 0;
|
|
1813
|
+
for (; l < s.length - 1;) {
|
|
1814
|
+
let t = l + 1, u = Math.min(s.length - 1, l + yr);
|
|
1815
|
+
for (let c = l + 2; c <= u; c++) {
|
|
1816
|
+
let u = a[s[l]], d = a[s[c]], f = vr(e, u.x, u.y, d.x, d.y, n + i, r + i), p = Math.hypot(d.x - u.x, d.y - u.y) * f;
|
|
1817
|
+
Number.isFinite(p) && p <= o[s[c]] - o[s[l]] + 1e-6 && (t = c);
|
|
1818
|
+
}
|
|
1819
|
+
c.push(a[s[t]]), l = t;
|
|
1820
|
+
}
|
|
1821
|
+
return c;
|
|
1822
|
+
}
|
|
1823
|
+
function xr(e, t, n, r, i) {
|
|
1824
|
+
let a = Math.hypot(n.x - t.x, n.y - t.y), o = vr(e, t.x, t.y, n.x, n.y, r, i);
|
|
1825
|
+
return a * (Number.isFinite(o) ? o : 1 / e.terrainSpeed(e.tileOf(n.x), e.tileOf(n.y)));
|
|
1826
|
+
}
|
|
1827
|
+
function Sr(e, t, n) {
|
|
1828
|
+
return Math.abs((t.x - e.x) * (n.y - t.y) - (t.y - e.y) * (n.x - t.x)) < 1e-9 && (t.x - e.x) * (n.x - t.x) + (t.y - e.y) * (n.y - t.y) > 0;
|
|
1829
|
+
}
|
|
1830
|
+
function Cr(e) {
|
|
1831
|
+
let t = [];
|
|
1832
|
+
for (let n of e) {
|
|
1833
|
+
let e = t[t.length - 1];
|
|
1834
|
+
(!e || e.x !== n.x || e.y !== n.y) && t.push(n);
|
|
1835
|
+
}
|
|
1836
|
+
return t;
|
|
1837
|
+
}
|
|
1838
|
+
//#endregion
|
|
1839
|
+
//#region src/pathfinding/grid-a-star.ts
|
|
1840
|
+
var wr = 5e4, Tr = 0, Er = 16, Dr = [
|
|
1841
|
+
[-1, 0],
|
|
1842
|
+
[1, 0],
|
|
1843
|
+
[0, -1],
|
|
1844
|
+
[0, 1]
|
|
1845
|
+
], Or = [
|
|
1846
|
+
[-1, -1],
|
|
1847
|
+
[1, -1],
|
|
1848
|
+
[-1, 1],
|
|
1849
|
+
[1, 1]
|
|
1850
|
+
], kr = class {
|
|
1851
|
+
diagonal;
|
|
1852
|
+
maxIterations;
|
|
1853
|
+
smooth;
|
|
1854
|
+
clearance;
|
|
1855
|
+
relocateRadius;
|
|
1856
|
+
heap = new _r(256);
|
|
1857
|
+
cost = /* @__PURE__ */ new Float64Array();
|
|
1858
|
+
parent = /* @__PURE__ */ new Int32Array();
|
|
1859
|
+
seen = /* @__PURE__ */ new Uint32Array();
|
|
1860
|
+
closed = /* @__PURE__ */ new Uint32Array();
|
|
1861
|
+
stamp = 0;
|
|
1862
|
+
constructor(e = {}) {
|
|
1863
|
+
this.diagonal = e.diagonal ?? !1, this.maxIterations = e.maxIterations ?? wr, this.smooth = e.smooth ?? !0, this.clearance = e.clearance ?? Tr, this.relocateRadius = e.relocateRadius ?? Er;
|
|
1864
|
+
}
|
|
1865
|
+
findPath(e, t) {
|
|
1866
|
+
let n = e.cellSize, r = Math.max(1, Math.ceil(t.agentWidth / n - 1e-9)), i = Math.max(1, Math.ceil(t.agentHeight / n - 1e-9));
|
|
1867
|
+
if (r > e.tilesWide || i > e.tilesHigh) return {
|
|
1868
|
+
status: I.Unreachable,
|
|
1869
|
+
points: [],
|
|
1870
|
+
iterations: 0
|
|
1871
|
+
};
|
|
1872
|
+
let a = (e, t) => ({
|
|
1873
|
+
x: Math.round((e - r * n / 2) / n),
|
|
1874
|
+
y: Math.round((t - i * n / 2) / n)
|
|
1875
|
+
}), o = (t) => ({
|
|
1876
|
+
x: jr(t.x, 0, e.tilesWide - r),
|
|
1877
|
+
y: jr(t.y, 0, e.tilesHigh - i)
|
|
1878
|
+
}), s = (e) => ({
|
|
1879
|
+
x: (e.x + r / 2) * n,
|
|
1880
|
+
y: (e.y + i / 2) * n
|
|
1881
|
+
}), c = this.relocate(e, o(a(t.startX, t.startY)), r, i, t.startX, t.startY, t.goalX, t.goalY), l = a(t.goalX, t.goalY), u = this.relocate(e, o(l), r, i, t.goalX, t.goalY, t.startX, t.startY);
|
|
1882
|
+
if (!c || !u || e.region(c.x, c.y) !== e.region(u.x, u.y)) return {
|
|
1883
|
+
status: I.Unreachable,
|
|
1884
|
+
points: [],
|
|
1885
|
+
iterations: 0
|
|
1886
|
+
};
|
|
1887
|
+
let d = u.x !== l.x || u.y !== l.y, f = this.search(e, c, u, r, i), p = [{
|
|
1888
|
+
x: t.startX,
|
|
1889
|
+
y: t.startY
|
|
1890
|
+
}];
|
|
1891
|
+
for (let t of f.tiles) p.push(s({
|
|
1892
|
+
x: t % e.tilesWide,
|
|
1893
|
+
y: Math.floor(t / e.tilesWide)
|
|
1894
|
+
}));
|
|
1895
|
+
let m = f.status;
|
|
1896
|
+
if (m === I.Found) {
|
|
1897
|
+
let n = s(u);
|
|
1898
|
+
d || !Number.isFinite(vr(e, n.x, n.y, t.goalX, t.goalY, t.agentWidth / 2, t.agentHeight / 2)) ? m = I.Unreachable : p.push({
|
|
1899
|
+
x: t.goalX,
|
|
1900
|
+
y: t.goalY
|
|
1901
|
+
});
|
|
1902
|
+
}
|
|
1903
|
+
let h = t.agentWidth / 2, g = t.agentHeight / 2, _ = this.smooth ? br(e, p, h, g, this.clearance) : Mr(p);
|
|
1904
|
+
return {
|
|
1905
|
+
status: m,
|
|
1906
|
+
points: _.slice(1),
|
|
1907
|
+
iterations: f.iterations
|
|
1908
|
+
};
|
|
1909
|
+
}
|
|
1910
|
+
relocate(e, t, n, r, i, a, o, s) {
|
|
1911
|
+
if (e.isAreaClear(t.x, t.y, n, r)) return t;
|
|
1912
|
+
let c = e.cellSize;
|
|
1913
|
+
for (let l = 1; l <= this.relocateRadius; l++) {
|
|
1914
|
+
let u, d = Infinity, f = Infinity;
|
|
1915
|
+
for (let p = t.y - l; p <= t.y + l; p++) {
|
|
1916
|
+
let m = p === t.y - l || p === t.y + l;
|
|
1917
|
+
for (let h = t.x - l; h <= t.x + l; h += m ? 1 : l * 2) {
|
|
1918
|
+
if (!e.isAreaClear(h, p, n, r)) continue;
|
|
1919
|
+
let t = (h + n / 2) * c, l = (p + r / 2) * c, m = Math.hypot(t - i, l - a), g = Math.hypot(t - o, l - s);
|
|
1920
|
+
(m < d || m === d && g < f) && (u = {
|
|
1921
|
+
x: h,
|
|
1922
|
+
y: p
|
|
1923
|
+
}, d = m, f = g);
|
|
1924
|
+
}
|
|
1925
|
+
}
|
|
1926
|
+
if (u) return u;
|
|
1927
|
+
}
|
|
1928
|
+
}
|
|
1929
|
+
search(e, t, n, r, i) {
|
|
1930
|
+
this.prepare(e.tileCount);
|
|
1931
|
+
let a = this.stamp, { cost: o, parent: s, seen: c, closed: l, heap: u } = this, d = e.tilesWide, f = e.index(t.x, t.y), p = e.index(n.x, n.y), m = e.cellSize / e.maxSpeed, h = (e, t) => {
|
|
1932
|
+
let r = Math.abs(e - n.x), i = Math.abs(t - n.y);
|
|
1933
|
+
return (this.diagonal ? Math.max(r, i) + (Math.SQRT2 - 1) * Math.min(r, i) : r + i) * m;
|
|
1934
|
+
};
|
|
1935
|
+
u.clear(), c[f] = a, o[f] = 0, s[f] = -1, u.push(f, h(t.x, t.y), h(t.x, t.y));
|
|
1936
|
+
let g = f, _ = h(t.x, t.y), v = 0;
|
|
1937
|
+
for (; u.size > 0;) {
|
|
1938
|
+
let t = u.pop();
|
|
1939
|
+
if (l[t] === a) continue;
|
|
1940
|
+
if (t === p) return {
|
|
1941
|
+
status: I.Found,
|
|
1942
|
+
tiles: this.trace(t),
|
|
1943
|
+
iterations: v
|
|
1944
|
+
};
|
|
1945
|
+
if (v >= this.maxIterations) return {
|
|
1946
|
+
status: I.Incomplete,
|
|
1947
|
+
tiles: this.trace(g),
|
|
1948
|
+
iterations: v
|
|
1949
|
+
};
|
|
1950
|
+
l[t] = a, v++;
|
|
1951
|
+
let n = t % d, s = (t - n) / d, c = h(n, s);
|
|
1952
|
+
(c < _ || c === _ && o[t] < o[g]) && (g = t, _ = c);
|
|
1953
|
+
for (let [a, o] of Dr) this.relax(e, t, n + a, s + o, 1, r, i, h);
|
|
1954
|
+
if (this.diagonal) for (let [a, o] of Or) e.isAreaClear(n + a, s, r, i) && e.isAreaClear(n, s + o, r, i) && this.relax(e, t, n + a, s + o, Math.SQRT2, r, i, h);
|
|
1955
|
+
}
|
|
1956
|
+
return {
|
|
1957
|
+
status: I.Unreachable,
|
|
1958
|
+
tiles: this.trace(g),
|
|
1959
|
+
iterations: v
|
|
1960
|
+
};
|
|
1961
|
+
}
|
|
1962
|
+
relax(e, t, n, r, i, a, o, s) {
|
|
1963
|
+
if (!e.isAreaClear(n, r, a, o)) return;
|
|
1964
|
+
let c = e.index(n, r);
|
|
1965
|
+
if (this.closed[c] === this.stamp) return;
|
|
1966
|
+
let l = this.cost[t] + i * Ar(e, n, r, a, o);
|
|
1967
|
+
if (this.seen[c] === this.stamp && l >= this.cost[c]) return;
|
|
1968
|
+
this.seen[c] = this.stamp, this.cost[c] = l, this.parent[c] = t;
|
|
1969
|
+
let u = s(n, r);
|
|
1970
|
+
this.heap.push(c, l + u, u);
|
|
1971
|
+
}
|
|
1972
|
+
trace(e) {
|
|
1973
|
+
let t = 0;
|
|
1974
|
+
for (let n = e; n !== -1; n = this.parent[n]) t++;
|
|
1975
|
+
let n = Array.from({ length: t }, () => 0);
|
|
1976
|
+
for (let r = e, i = t - 1; r !== -1; r = this.parent[r], i--) n[i] = r;
|
|
1977
|
+
return n;
|
|
1978
|
+
}
|
|
1979
|
+
prepare(e) {
|
|
1980
|
+
this.cost.length !== e && (this.cost = new Float64Array(e), this.parent = new Int32Array(e), this.seen = new Uint32Array(e), this.closed = new Uint32Array(e), this.stamp = 0), this.stamp++, this.stamp === 4294967295 && (this.seen.fill(0), this.closed.fill(0), this.stamp = 1);
|
|
1981
|
+
}
|
|
1982
|
+
};
|
|
1983
|
+
function Ar(e, t, n, r, i) {
|
|
1984
|
+
if (r === 1 && i === 1) return e.cost(t, n);
|
|
1985
|
+
let a = 0;
|
|
1986
|
+
for (let o = n; o < n + i; o++) for (let n = t; n < t + r; n++) a += e.cost(n, o);
|
|
1987
|
+
return a / (r * i);
|
|
1988
|
+
}
|
|
1989
|
+
function jr(e, t, n) {
|
|
1990
|
+
return Math.min(n, Math.max(t, e));
|
|
1991
|
+
}
|
|
1992
|
+
function Mr(e) {
|
|
1993
|
+
return e.filter((t, n) => n === 0 || t.x !== e[n - 1].x || t.y !== e[n - 1].y);
|
|
1994
|
+
}
|
|
1995
|
+
//#endregion
|
|
1996
|
+
//#region src/pathfinding/follow-path.ts
|
|
1997
|
+
var $ = {
|
|
1998
|
+
Waiting: 0,
|
|
1999
|
+
Waypoint: 1,
|
|
2000
|
+
Goal: 2,
|
|
2001
|
+
Stuck: 3
|
|
2002
|
+
};
|
|
2003
|
+
function Nr(e, t, n, r, a) {
|
|
2004
|
+
if (Tt(e)) return $.Waiting;
|
|
2005
|
+
let o = e[4], s = e[3];
|
|
2006
|
+
for (; s < o && Math.hypot(L(e, s) - t, kt(e, s) - n) <= r;) s++;
|
|
2007
|
+
if (e[3] = s, s < o) return a.x = L(e, s), a.y = kt(e, s), $.Waypoint;
|
|
2008
|
+
let c = e[2];
|
|
2009
|
+
return c === I.Incomplete ? (wt(e), $.Waiting) : c === I.Found ? (a.x = i(e, 6), a.y = i(e, 7), $.Goal) : $.Stuck;
|
|
2010
|
+
}
|
|
2011
|
+
//#endregion
|
|
2012
|
+
//#region src/pathfinding/path-blockers.ts
|
|
2013
|
+
var Pr = "pathBlockers", Fr = "pathGates";
|
|
2014
|
+
function Ir(e = {}) {
|
|
2015
|
+
let { gateCategories: t = 0, not: n, filter: r } = e, i = {
|
|
2016
|
+
required: ["transform", "body"],
|
|
2017
|
+
not: n,
|
|
2018
|
+
filter: (e) => {
|
|
2019
|
+
let t = e.components.body;
|
|
2020
|
+
return !!t && t.blocksPath && !t.sensor && (!r || r(e));
|
|
2021
|
+
}
|
|
2022
|
+
};
|
|
2023
|
+
if (!t) return { [Pr]: i };
|
|
2024
|
+
let a = {
|
|
2025
|
+
required: ["transform", "body"],
|
|
2026
|
+
not: n,
|
|
2027
|
+
filter: (e) => {
|
|
2028
|
+
let n = e.components.body;
|
|
2029
|
+
return !!n && !n.blocksPath && !n.sensor && (n.collideCategory & t) !== 0 && (!r || r(e));
|
|
2030
|
+
}
|
|
2031
|
+
};
|
|
2032
|
+
return {
|
|
2033
|
+
[Pr]: i,
|
|
2034
|
+
[Fr]: a
|
|
2035
|
+
};
|
|
2036
|
+
}
|
|
2037
|
+
function Lr(e, t) {
|
|
2038
|
+
let n = t[0] & 7, r = e[2], i = e[3], a = zr(e[4]), o = H(n, r, i, a), s = U(n, r, i, a), c = e[0], l = e[1];
|
|
2039
|
+
return {
|
|
2040
|
+
minX: c - o,
|
|
2041
|
+
minY: l - s,
|
|
2042
|
+
maxX: c + o,
|
|
2043
|
+
maxY: l + s
|
|
2044
|
+
};
|
|
2045
|
+
}
|
|
2046
|
+
function Rr(e, t, n) {
|
|
2047
|
+
let r = [...t];
|
|
2048
|
+
for (let t of n.removed) {
|
|
2049
|
+
let n = e.get(t);
|
|
2050
|
+
n && (r.forEach((e) => e.removeBlocker(n)), e.delete(t));
|
|
2051
|
+
}
|
|
2052
|
+
for (let { entityId: t, components: i } of n.added) {
|
|
2053
|
+
let n = e.get(t);
|
|
2054
|
+
n && r.forEach((e) => e.removeBlocker(n));
|
|
2055
|
+
let { transform: a, body: o } = i;
|
|
2056
|
+
if (!(a instanceof Float32Array) || !(o instanceof Uint32Array)) {
|
|
2057
|
+
e.delete(t);
|
|
2058
|
+
continue;
|
|
2059
|
+
}
|
|
2060
|
+
let s = Lr(a, o);
|
|
2061
|
+
r.forEach((e) => e.addBlocker(s)), e.set(t, s);
|
|
2062
|
+
}
|
|
2063
|
+
return n.added.length > 0;
|
|
2064
|
+
}
|
|
2065
|
+
function zr(e) {
|
|
2066
|
+
let t = Math.round(e / (Math.PI / 2)) * Math.PI / 2;
|
|
2067
|
+
return Math.abs(e - t) < 1e-5 ? t : e;
|
|
2068
|
+
}
|
|
2069
|
+
//#endregion
|
|
2070
|
+
//#region src/pathfinding/navigation-state.ts
|
|
2071
|
+
function Br(e, t, n, r = 0) {
|
|
2072
|
+
return {
|
|
2073
|
+
grid: new gr(e, t, n),
|
|
2074
|
+
blockers: /* @__PURE__ */ new Map(),
|
|
2075
|
+
gateCategories: r,
|
|
2076
|
+
gates: /* @__PURE__ */ new Map(),
|
|
2077
|
+
gatedGrids: /* @__PURE__ */ new Map()
|
|
2078
|
+
};
|
|
2079
|
+
}
|
|
2080
|
+
function Vr(e, t) {
|
|
2081
|
+
let n = t & e.gateCategories;
|
|
2082
|
+
if (!n) return e.grid;
|
|
2083
|
+
let r = e.gatedGrids.get(n);
|
|
2084
|
+
if (!r) {
|
|
2085
|
+
r = e.grid.clone();
|
|
2086
|
+
for (let t of e.gates.values()) t.category & n && r.addBlocker(t.rect);
|
|
2087
|
+
e.gatedGrids.set(n, r);
|
|
2088
|
+
}
|
|
2089
|
+
return r;
|
|
2090
|
+
}
|
|
2091
|
+
function Hr(e, t) {
|
|
2092
|
+
let n = t & e.gateCategories, r = [...e.blockers.values()];
|
|
2093
|
+
if (n) for (let t of e.gates.values()) t.category & n && r.push(t.rect);
|
|
2094
|
+
return r;
|
|
2095
|
+
}
|
|
2096
|
+
function Ur(e, t, n, r) {
|
|
2097
|
+
e.grid.setTerrainSpeed(t, n, r);
|
|
2098
|
+
for (let i of e.gatedGrids.values()) i.setTerrainSpeed(t, n, r);
|
|
2099
|
+
}
|
|
2100
|
+
function Wr(e, t) {
|
|
2101
|
+
return Rr(e.blockers, [e.grid, ...e.gatedGrids.values()], t);
|
|
2102
|
+
}
|
|
2103
|
+
function Gr(e, t) {
|
|
2104
|
+
for (let n of t.removed) {
|
|
2105
|
+
let t = e.gates.get(n);
|
|
2106
|
+
t && (Kr(e, t.category, (e) => e.removeBlocker(t.rect)), e.gates.delete(n));
|
|
2107
|
+
}
|
|
2108
|
+
for (let { entityId: n, components: r } of t.added) {
|
|
2109
|
+
let t = e.gates.get(n);
|
|
2110
|
+
t && Kr(e, t.category, (e) => e.removeBlocker(t.rect));
|
|
2111
|
+
let { transform: i, body: a } = r;
|
|
2112
|
+
if (!(i instanceof Float32Array) || !(a instanceof Uint32Array)) {
|
|
2113
|
+
e.gates.delete(n);
|
|
2114
|
+
continue;
|
|
2115
|
+
}
|
|
2116
|
+
let o = {
|
|
2117
|
+
rect: Lr(i, a),
|
|
2118
|
+
category: a[1] & e.gateCategories
|
|
2119
|
+
};
|
|
2120
|
+
Kr(e, o.category, (e) => e.addBlocker(o.rect)), e.gates.set(n, o);
|
|
2121
|
+
}
|
|
2122
|
+
return t.added.length > 0;
|
|
2123
|
+
}
|
|
2124
|
+
function Kr(e, t, n) {
|
|
2125
|
+
for (let [r, i] of e.gatedGrids) r & t && n(i);
|
|
2126
|
+
}
|
|
2127
|
+
//#endregion
|
|
2128
|
+
//#region src/pathfinding/pathfinding-update.ts
|
|
2129
|
+
var qr = 16e3;
|
|
2130
|
+
function Jr(e = {}) {
|
|
2131
|
+
let t = e.search ?? new kr({ diagonal: !0 }), n = e.iterationBudget ?? 16e3, r = e.gateCategories ?? 0, a = (e, r, a) => {
|
|
2132
|
+
let { navigation: o, transform: s, body: c } = a;
|
|
2133
|
+
if (!o[5]) return;
|
|
2134
|
+
let l = c ? c[2] : 0, u = Vr(e.navigation, l), d = Atomics.load(o, 0);
|
|
2135
|
+
if (d === Atomics.load(o, 1)) {
|
|
2136
|
+
if (!e.blockersAdded || Zr(u, o, s)) return;
|
|
2137
|
+
d = Atomics.add(o, 0, 1) + 1;
|
|
2138
|
+
}
|
|
2139
|
+
if ((e.searchIterations ?? 0) >= (e.iterationBudget ?? n)) return;
|
|
2140
|
+
let f = {
|
|
2141
|
+
startX: s[0],
|
|
2142
|
+
startY: s[1],
|
|
2143
|
+
goalX: i(o, 6),
|
|
2144
|
+
goalY: i(o, 7),
|
|
2145
|
+
agentWidth: s[2],
|
|
2146
|
+
agentHeight: s[3]
|
|
2147
|
+
}, p = Xr(e.navigation, u, l, f);
|
|
2148
|
+
p.forEach((e) => u.removeBlocker(e));
|
|
2149
|
+
let m = t.findPath(u, f);
|
|
2150
|
+
p.forEach((e) => u.addBlocker(e)), e.searchIterations = (e.searchIterations ?? 0) + m.iterations;
|
|
2151
|
+
let h = m.status === I.Found ? m.points.slice(0, -1) : m.points;
|
|
2152
|
+
At(o, m.status === I.Incomplete && h.length === 0 ? I.Unreachable : m.status, h), Atomics.store(o, 1, d);
|
|
2153
|
+
};
|
|
2154
|
+
return a.init = (t, n, i, a) => {
|
|
2155
|
+
let o = Br(n?.tilesWide ?? 1, n?.tilesHigh ?? 1, n?.cellSize ?? 1, r);
|
|
2156
|
+
return Wr(o, {
|
|
2157
|
+
added: a.pathBlockers ?? [],
|
|
2158
|
+
removed: []
|
|
2159
|
+
}), Gr(o, {
|
|
2160
|
+
added: a.pathGates ?? [],
|
|
2161
|
+
removed: []
|
|
2162
|
+
}), {
|
|
2163
|
+
...e.init?.(o, n, a),
|
|
2164
|
+
navigation: o
|
|
2165
|
+
};
|
|
2166
|
+
}, a.queryChanged = (t, n, r, i) => {
|
|
2167
|
+
n === "pathBlockers" ? t.blockersAdded = Wr(t.navigation, r) || !!t.blockersAdded : n === "pathGates" && (t.blockersAdded = Gr(t.navigation, r) || !!t.blockersAdded), e.queryChanged?.(t, n, r, i);
|
|
2168
|
+
}, a.preRun = (t, n, r, i) => {
|
|
2169
|
+
t.searchIterations = 0, e.preRun?.(t, n, r, i);
|
|
2170
|
+
}, Object.assign(a, { pathfinding: { gateCategories: r } });
|
|
2171
|
+
}
|
|
2172
|
+
var Yr = Jr();
|
|
2173
|
+
function Xr(e, t, n, r) {
|
|
2174
|
+
let i = r.agentWidth / 2, a = r.agentHeight / 2, o = {
|
|
2175
|
+
minX: r.startX - i,
|
|
2176
|
+
minY: r.startY - a,
|
|
2177
|
+
maxX: r.startX + i,
|
|
2178
|
+
maxY: r.startY + a
|
|
2179
|
+
}, s = t.tilesIn(o), c = !0;
|
|
2180
|
+
for (let e = s.fromY; e <= s.toY && c; e++) for (let n = s.fromX; n <= s.toX && c; n++) c = t.blockerCount(n, e) === 0;
|
|
2181
|
+
return c ? [] : Hr(e, n).filter((e) => e.minX < o.maxX && e.maxX > o.minX && e.minY < o.maxY && e.maxY > o.minY);
|
|
2182
|
+
}
|
|
2183
|
+
function Zr(e, t, n) {
|
|
2184
|
+
let r = n[2] / 2, a = n[3] / 2, o = n[0], s = n[1], c = t[4];
|
|
2185
|
+
for (let n = t[3]; n <= c; n++) {
|
|
2186
|
+
let l, u;
|
|
2187
|
+
if (n < c) l = L(t, n), u = kt(t, n);
|
|
2188
|
+
else if (t[2] === I.Found) l = i(t, 6), u = i(t, 7);
|
|
2189
|
+
else break;
|
|
2190
|
+
if (!Number.isFinite(vr(e, o, s, l, u, r, a))) return !1;
|
|
2191
|
+
o = l, s = u;
|
|
2192
|
+
}
|
|
2193
|
+
return !0;
|
|
2194
|
+
}
|
|
2195
|
+
//#endregion
|
|
2196
|
+
//#region src/pathfinding/pathfinding-system.ts
|
|
2197
|
+
var Qr = class extends r {
|
|
2198
|
+
iterationBudget;
|
|
2199
|
+
constructor(e, t) {
|
|
2200
|
+
let n = t.updateFunction ?? Jr(), r = t.optional ?? [];
|
|
2201
|
+
super(e, {
|
|
2202
|
+
name: t.name ?? "PathfindingSystem",
|
|
2203
|
+
deltaBetweenRuns: t.deltaBetweenRuns ?? 50,
|
|
2204
|
+
firstRun: t.firstRun,
|
|
2205
|
+
required: ["navigation", "transform"],
|
|
2206
|
+
optional: r.includes("body") ? r : ["body", ...r],
|
|
2207
|
+
queries: {
|
|
2208
|
+
...Ir({
|
|
2209
|
+
...t.blockers,
|
|
2210
|
+
gateCategories: n.pathfinding.gateCategories
|
|
2211
|
+
}),
|
|
2212
|
+
...t.queries
|
|
2213
|
+
},
|
|
2214
|
+
updateFunction: n,
|
|
2215
|
+
getInitData: t.getInitData,
|
|
2216
|
+
forceMainThread: t.forceMainThread ?? !t.getWorker,
|
|
2217
|
+
getWorker: t.getWorker ?? (() => {
|
|
2218
|
+
throw Error("PathfindingSystem cannot start a worker: no getWorker was supplied");
|
|
2219
|
+
})
|
|
2220
|
+
}), this.iterationBudget = t.iterationBudget;
|
|
2221
|
+
}
|
|
2222
|
+
addDataToWorld(e) {
|
|
2223
|
+
e.iterationBudget = this.iterationBudget;
|
|
2224
|
+
}
|
|
2225
|
+
loaded = !1;
|
|
2226
|
+
async init() {
|
|
2227
|
+
await super.init(), this.loaded || await this.finishLoading();
|
|
2228
|
+
}
|
|
2229
|
+
finishLoading() {
|
|
2230
|
+
return this.loaded = !0, super.finishLoading();
|
|
2231
|
+
}
|
|
2232
|
+
}, $r = (e, t, n) => {
|
|
1532
2233
|
let r = n.interpolation, a = n.transform, o = i(r, 4), s = r[3], c = r[5], l = a[0], u = a[1], d = i(r, 4), m = o === d, h = e.committedTicks?.[r[11]];
|
|
1533
2234
|
if (h !== void 0 && !Number.isNaN(h) && !(m && d <= h)) {
|
|
1534
2235
|
let e = i(r, 16);
|
|
@@ -1556,14 +2257,14 @@ var Vn = (e, t, n) => {
|
|
|
1556
2257
|
y > v && (_ += Math.min(y - v, _ * p));
|
|
1557
2258
|
let b = _ / g, x = r[0], S = r[1];
|
|
1558
2259
|
r[0] = x + (l - x) * b, r[1] = S + (u - S) * b, r[7] = g - _;
|
|
1559
|
-
},
|
|
2260
|
+
}, ei = class extends r {
|
|
1560
2261
|
constructor(e, t = {}) {
|
|
1561
2262
|
super(e, {
|
|
1562
2263
|
name: t.name ?? "InterpolationSystem",
|
|
1563
2264
|
deltaBetweenRuns: 0,
|
|
1564
2265
|
firstRun: t.firstRun,
|
|
1565
2266
|
required: ["transform", "interpolation"],
|
|
1566
|
-
updateFunction:
|
|
2267
|
+
updateFunction: $r,
|
|
1567
2268
|
forceMainThread: t.forceMainThread ?? !t.getWorker,
|
|
1568
2269
|
getWorker: t.getWorker ?? (() => {
|
|
1569
2270
|
throw Error("InterpolationSystem cannot start a worker: no getWorker was supplied");
|
|
@@ -1571,10 +2272,10 @@ var Vn = (e, t, n) => {
|
|
|
1571
2272
|
});
|
|
1572
2273
|
}
|
|
1573
2274
|
addDataToWorld(e) {
|
|
1574
|
-
e.committedTicks =
|
|
2275
|
+
e.committedTicks = dr(this.world);
|
|
1575
2276
|
}
|
|
1576
2277
|
};
|
|
1577
2278
|
//#endregion
|
|
1578
|
-
export {
|
|
2279
|
+
export { Ee as BODY_BLOCKS_PATH_FLAG, ye as BODY_CATEGORY_INDEX, we as BODY_CCD_FLAG, Te as BODY_DYING_FLAG, ve as BODY_FLAGS_INDEX, be as BODY_MASK_INDEX, Ce as BODY_SENSOR_FLAG, Se as BODY_SHAPE_MASK, xe as BODY_SIZE, Le as BOUNCINESS_INDEX, Re as BOUNCINESS_SIZE, u as COLLIDABLE_QUERY, Sn as CollisionBroadphase, ge as DEFAULT_COLLIDE_CATEGORY, _e as DEFAULT_COLLIDE_MASK, qr as DEFAULT_PATH_SEARCH_ITERATION_BUDGET, d as DEFAULT_PHYSICS_STEP_MS, ie as DYNAMICS_ACCELERATION_X_INDEX, ae as DYNAMICS_ACCELERATION_Y_INDEX, oe as DYNAMICS_INVERSE_MASS_INDEX, se as DYNAMICS_SIZE, $ as FollowStep, kr as GridAStar, Qe as INTERPOLATION_CHANNEL_INDEX, We as INTERPOLATION_DURATION_INDEX, tt as INTERPOLATION_PREVIOUS_DURATION_INDEX, rt as INTERPOLATION_PREVIOUS_TICK_INDEX, nt as INTERPOLATION_PREVIOUS_TOTAL_DURATION_INDEX, $e as INTERPOLATION_PREVIOUS_X_INDEX, et as INTERPOLATION_PREVIOUS_Y_INDEX, Je as INTERPOLATION_REMAINING_DURATION_INDEX, it as INTERPOLATION_SIZE, qe as INTERPOLATION_SYNCED_DURATION_INDEX, Ze as INTERPOLATION_SYNCED_STEP_DURATION_INDEX, Ue as INTERPOLATION_SYNCED_TICK_INDEX, Ye as INTERPOLATION_TARGET_X_INDEX, Xe as INTERPOLATION_TARGET_Y_INDEX, Ge as INTERPOLATION_TICK_INDEX, Ke as INTERPOLATION_TOTAL_DURATION_INDEX, Ve as INTERPOLATION_X_INDEX, He as INTERPOLATION_Y_INDEX, ei as InterpolationSystem, b as MAX_POLYGON_VERTICES, _r as MinHeap, ft as NAVIGATION_ACTIVE_INDEX, pt as NAVIGATION_GOAL_X_INDEX, mt as NAVIGATION_GOAL_Y_INDEX, gt as NAVIGATION_MAX_WAYPOINTS, lt as NAVIGATION_OUTCOME_INDEX, st as NAVIGATION_REQUEST_INDEX, ct as NAVIGATION_RESULT_INDEX, _t as NAVIGATION_SIZE, ht as NAVIGATION_WAYPOINTS_INDEX, dt as NAVIGATION_WAYPOINT_COUNT_INDEX, ut as NAVIGATION_WAYPOINT_INDEX, gr as NavGrid, Pr as PATH_BLOCKERS_QUERY, Fr as PATH_GATES_QUERY, C as POLYGON_SIZE, x as POLYGON_VERTEX_COUNT_INDEX, S as POLYGON_VERTICES_INDEX, l as POSITION_UPDATED_EVENT, I as PathStatus, Qr as PathfindingSystem, $t as PhysicalWorld, pr as PhysicsSystem, me as SHAPE_CAPSULE, pe as SHAPE_CIRCLE, he as SHAPE_POLYGON, fe as SHAPE_RECTANGLE, kn as SpatialIndex, v as TRANSFORM_ANGLE_INDEX, _ as TRANSFORM_HEIGHT_INDEX, y as TRANSFORM_SIZE, g as TRANSFORM_WIDTH_INDEX, m as TRANSFORM_X_INDEX, h as TRANSFORM_Y_INDEX, te as VELOCITY_DAMPING_INDEX, ne as VELOCITY_SIZE, j as VELOCITY_X_INDEX, ee as VELOCITY_Y_INDEX, Mn as addPhysicalWorldData, Wr as applyPathBlockerChanges, Gr as applyPathGateChanges, Rr as applyRectChanges, Lr as blockerRect, Hr as blockingRects, Ae as blocksPath, Pe as bodyDefinition, P as bodyShape, Be as bouncinessDefinition, Gt as boundsHalfHeight, Wt as boundsHalfWidth, Oe as canCollide, V as capsuleCoreAngle, B as capsuleHalfLength, Lt as contactNormal, Br as createNavigationState, Jr as createPathfindingUpdate, Qn as createPhysicsUpdate, le as dynamicsDefinition, Nr as followPath, An as getSpatialMap, Fn as integrateDynamics, ot as interpolationDefinition, $r as interpolationUpdate, ke as isContinuous, je as isDying, Ct as isNavigating, Tt as isPathPending, F as isSensor, Et as isUnreachable, Me as markDying, bt as navigateTo, yt as navigationDefinition, Dt as navigationGoal, Vr as navigationGridFor, Mt as navigationRegistry, Kt as orientedBoxesOverlap, Ir as pathBlockerQueries, Yr as pathfindingUpdate, jt as physicsRegistry, ir as physicsUpdate, K as pointSegmentDistanceSquared, rn as polygonContactNormal, T as polygonDefinition, nn as polygonShapesOverlap, E as preparePolygon, wt as requestPath, Jt as segmentBoxDistanceSquared, qt as segmentSegmentDistanceSquared, jn as setEntityPosition, xt as setNavigationGoal, Ur as setNavigationTerrainSpeed, U as shapeHalfHeight, H as shapeHalfWidth, Pt as shapeIsEmpty, Nt as shapeRadius, Ft as shapesOverlap, br as smoothPath, Nn as snapEntity, Pn as startSpawnInterpolation, St as stopNavigating, vr as sweepCost, A as transformDefinition, Q as updateSpatialMap, M as velocityDefinition, Ot as waypoint, L as waypointX, kt as waypointY, At as writePath };
|
|
1579
2280
|
|
|
1580
2281
|
//# sourceMappingURL=index.js.map
|