@daneren2005/shared-memory-physics 1.6.3 → 1.7.1
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 +23 -12
- package/dist/components/body-component.d.ts +4 -0
- package/dist/components/interpolation-component.d.ts +21 -13
- package/dist/index.d.ts +4 -3
- package/dist/index.js +326 -265
- package/dist/index.js.map +1 -1
- package/dist/systems/interpolation-channels.d.ts +6 -0
- package/dist/systems/interpolation-system.d.ts +3 -1
- package/dist/systems/interpolation-update.d.ts +5 -2
- package/dist/systems/physics-system.d.ts +3 -0
- package/dist/systems/physics-update.d.ts +1 -0
- package/package.json +11 -10
package/dist/index.js
CHANGED
|
@@ -245,23 +245,26 @@ var ie = 1, ae = 2, oe = 3, se = 4, ce = [
|
|
|
245
245
|
function de(e, t, n, r) {
|
|
246
246
|
return (t & n) !== 0 && (r & e) !== 0;
|
|
247
247
|
}
|
|
248
|
-
var fe = 0, pe = 1, me = 2, he = 3, ge = 7, _e = 8, ve = 16, ye = 32;
|
|
248
|
+
var fe = 0, pe = 1, me = 2, he = 3, ge = 7, _e = 8, ve = 16, ye = 32, be = 64;
|
|
249
249
|
function L(e) {
|
|
250
250
|
return e[0] & 7;
|
|
251
251
|
}
|
|
252
252
|
function R(e) {
|
|
253
|
-
return (e[0] & 8)
|
|
254
|
-
}
|
|
255
|
-
function be(e) {
|
|
256
|
-
return (e[0] & 16) != 0;
|
|
253
|
+
return !!(e[0] & 8);
|
|
257
254
|
}
|
|
258
255
|
function xe(e) {
|
|
259
|
-
return (e[0] &
|
|
256
|
+
return !!(e[0] & 16);
|
|
260
257
|
}
|
|
261
258
|
function Se(e) {
|
|
259
|
+
return !!(e[0] & 64);
|
|
260
|
+
}
|
|
261
|
+
function Ce(e) {
|
|
262
|
+
return !!(e[0] & 32);
|
|
263
|
+
}
|
|
264
|
+
function we(e) {
|
|
262
265
|
e[0] |= 32;
|
|
263
266
|
}
|
|
264
|
-
var
|
|
267
|
+
var Te = class extends t {
|
|
265
268
|
get shape() {
|
|
266
269
|
return this.block[0] & 7;
|
|
267
270
|
}
|
|
@@ -281,18 +284,24 @@ var Ce = class extends t {
|
|
|
281
284
|
this.block[2] = e;
|
|
282
285
|
}
|
|
283
286
|
get sensor() {
|
|
284
|
-
return (this.block[0] & 8)
|
|
287
|
+
return !!(this.block[0] & 8);
|
|
285
288
|
}
|
|
286
289
|
set sensor(e) {
|
|
287
290
|
this.block[0] = e ? this.block[0] | 8 : this.block[0] & -9;
|
|
288
291
|
}
|
|
289
292
|
get continuousCollisionDetection() {
|
|
290
|
-
return (this.block[0] & 16)
|
|
293
|
+
return !!(this.block[0] & 16);
|
|
291
294
|
}
|
|
292
295
|
set continuousCollisionDetection(e) {
|
|
293
296
|
this.block[0] = e ? this.block[0] | 16 : this.block[0] & -17;
|
|
294
297
|
}
|
|
295
|
-
|
|
298
|
+
get blocksPath() {
|
|
299
|
+
return !!(this.block[0] & 64);
|
|
300
|
+
}
|
|
301
|
+
set blocksPath(e) {
|
|
302
|
+
this.block[0] = e ? this.block[0] | 64 : this.block[0] & -65;
|
|
303
|
+
}
|
|
304
|
+
}, Ee = {
|
|
296
305
|
type: Uint32Array,
|
|
297
306
|
size: 3,
|
|
298
307
|
loadProperties: [
|
|
@@ -304,24 +313,25 @@ var Ce = class extends t {
|
|
|
304
313
|
"collideCategory",
|
|
305
314
|
"collideMask",
|
|
306
315
|
"sensor",
|
|
307
|
-
"continuousCollisionDetection"
|
|
316
|
+
"continuousCollisionDetection",
|
|
317
|
+
"blocksPath"
|
|
308
318
|
],
|
|
309
319
|
toBlock(e) {
|
|
310
320
|
return [
|
|
311
|
-
|
|
321
|
+
De(e),
|
|
312
322
|
e.collideCategory ?? 1,
|
|
313
323
|
e.collideMask ?? 4294967295
|
|
314
324
|
];
|
|
315
325
|
},
|
|
316
326
|
attach(e, t, n) {
|
|
317
|
-
return new
|
|
327
|
+
return new Te(t.getBlock(n), n);
|
|
318
328
|
}
|
|
319
329
|
};
|
|
320
|
-
function
|
|
321
|
-
let t =
|
|
322
|
-
return e.sensor && (t |= 8), e.continuousCollisionDetection && (t |= 16), t;
|
|
330
|
+
function De(e) {
|
|
331
|
+
let t = Oe(e);
|
|
332
|
+
return e.sensor && (t |= 8), e.continuousCollisionDetection && (t |= 16), e.blocksPath && (t |= 64), t;
|
|
323
333
|
}
|
|
324
|
-
function
|
|
334
|
+
function Oe(e) {
|
|
325
335
|
let t = e.shape;
|
|
326
336
|
if (t === void 0) return e.vertices === void 0 ? e.radius === void 0 ? 1 : 2 : 4;
|
|
327
337
|
if (!ce.includes(t)) throw Error(`Unknown body shape: ${t}`);
|
|
@@ -330,14 +340,14 @@ function Ee(e) {
|
|
|
330
340
|
}
|
|
331
341
|
//#endregion
|
|
332
342
|
//#region src/components/bounciness-component.ts
|
|
333
|
-
var
|
|
343
|
+
var ke = 0, Ae = 1, je = class extends t {
|
|
334
344
|
get bounciness() {
|
|
335
345
|
return this.block[0];
|
|
336
346
|
}
|
|
337
347
|
set bounciness(e) {
|
|
338
348
|
this.block[0] = e;
|
|
339
349
|
}
|
|
340
|
-
},
|
|
350
|
+
}, Me = {
|
|
341
351
|
type: Float32Array,
|
|
342
352
|
size: 1,
|
|
343
353
|
loadProperties: ["bounciness"],
|
|
@@ -345,9 +355,9 @@ var De = 0, Oe = 1, ke = class extends t {
|
|
|
345
355
|
return [e.bounciness ?? 0];
|
|
346
356
|
},
|
|
347
357
|
attach(e, t, n) {
|
|
348
|
-
return new
|
|
358
|
+
return new je(t.getBlock(n), n);
|
|
349
359
|
}
|
|
350
|
-
},
|
|
360
|
+
}, Ne = 0, Pe = 1, Fe = 2, Ie = 3, Le = 4, Re = 5, ze = 6, Be = 7, Ve = 8, He = 9, Ue = 10, We = 11, Ge = 12, Ke = 13, qe = 14, Je = 15, Ye = 16, Xe = 17, Ze = class extends t {
|
|
351
361
|
get x() {
|
|
352
362
|
return this.block[0];
|
|
353
363
|
}
|
|
@@ -360,104 +370,122 @@ var De = 0, Oe = 1, ke = class extends t {
|
|
|
360
370
|
set y(e) {
|
|
361
371
|
this.block[1] = e;
|
|
362
372
|
}
|
|
363
|
-
get
|
|
373
|
+
get syncedTick() {
|
|
364
374
|
return this.block[2];
|
|
365
375
|
}
|
|
366
|
-
set
|
|
376
|
+
set syncedTick(e) {
|
|
367
377
|
this.block[2] = e;
|
|
368
378
|
}
|
|
369
|
-
get
|
|
379
|
+
get duration() {
|
|
370
380
|
return this.block[3];
|
|
371
381
|
}
|
|
372
|
-
set
|
|
382
|
+
set duration(e) {
|
|
373
383
|
this.block[3] = e;
|
|
374
384
|
}
|
|
375
|
-
get
|
|
376
|
-
return this.block
|
|
385
|
+
get tick() {
|
|
386
|
+
return i(this.block, 4);
|
|
377
387
|
}
|
|
378
|
-
set
|
|
379
|
-
this.block
|
|
388
|
+
set tick(e) {
|
|
389
|
+
a(this.block, 4, e);
|
|
380
390
|
}
|
|
381
|
-
get
|
|
391
|
+
get totalDuration() {
|
|
382
392
|
return this.block[5];
|
|
383
393
|
}
|
|
384
|
-
set
|
|
394
|
+
set totalDuration(e) {
|
|
385
395
|
this.block[5] = e;
|
|
386
396
|
}
|
|
387
|
-
get
|
|
397
|
+
get syncedDuration() {
|
|
388
398
|
return this.block[6];
|
|
389
399
|
}
|
|
390
|
-
set
|
|
400
|
+
set syncedDuration(e) {
|
|
391
401
|
this.block[6] = e;
|
|
392
402
|
}
|
|
393
|
-
get
|
|
394
|
-
return i(this.block, 7);
|
|
395
|
-
}
|
|
396
|
-
set tick(e) {
|
|
397
|
-
a(this.block, 7, e);
|
|
398
|
-
}
|
|
399
|
-
get totalDuration() {
|
|
403
|
+
get targetX() {
|
|
400
404
|
return this.block[8];
|
|
401
405
|
}
|
|
402
|
-
set
|
|
406
|
+
set targetX(e) {
|
|
403
407
|
this.block[8] = e;
|
|
404
408
|
}
|
|
405
|
-
get
|
|
409
|
+
get targetY() {
|
|
406
410
|
return this.block[9];
|
|
407
411
|
}
|
|
408
|
-
set
|
|
412
|
+
set targetY(e) {
|
|
409
413
|
this.block[9] = e;
|
|
410
414
|
}
|
|
411
|
-
get
|
|
415
|
+
get syncedStepDuration() {
|
|
412
416
|
return this.block[10];
|
|
413
417
|
}
|
|
414
|
-
set
|
|
418
|
+
set syncedStepDuration(e) {
|
|
415
419
|
this.block[10] = e;
|
|
416
420
|
}
|
|
417
|
-
|
|
421
|
+
get previousX() {
|
|
422
|
+
return this.block[12];
|
|
423
|
+
}
|
|
424
|
+
set previousX(e) {
|
|
425
|
+
this.block[12] = e;
|
|
426
|
+
}
|
|
427
|
+
get previousY() {
|
|
428
|
+
return this.block[13];
|
|
429
|
+
}
|
|
430
|
+
set previousY(e) {
|
|
431
|
+
this.block[13] = e;
|
|
432
|
+
}
|
|
433
|
+
get remainingDuration() {
|
|
434
|
+
return this.block[7];
|
|
435
|
+
}
|
|
436
|
+
set remainingDuration(e) {
|
|
437
|
+
this.block[7] = e;
|
|
438
|
+
}
|
|
439
|
+
}, Qe = {
|
|
418
440
|
type: Float32Array,
|
|
419
|
-
size:
|
|
441
|
+
size: 17,
|
|
420
442
|
loadProperties: ["interpolate"],
|
|
421
443
|
toBlock(e) {
|
|
422
444
|
let t = e.x ?? 0, n = e.y ?? 0;
|
|
423
445
|
return [
|
|
424
446
|
t,
|
|
425
447
|
n,
|
|
426
|
-
t,
|
|
427
|
-
n,
|
|
428
448
|
0,
|
|
429
449
|
0,
|
|
430
450
|
0,
|
|
431
451
|
0,
|
|
432
452
|
0,
|
|
433
453
|
0,
|
|
454
|
+
t,
|
|
455
|
+
n,
|
|
456
|
+
0,
|
|
457
|
+
0,
|
|
458
|
+
t,
|
|
459
|
+
n,
|
|
460
|
+
0,
|
|
461
|
+
0,
|
|
434
462
|
0
|
|
435
463
|
];
|
|
436
464
|
},
|
|
437
465
|
attach(e, t, n) {
|
|
438
|
-
return new
|
|
466
|
+
return new Ze(t.getBlock(n), n);
|
|
439
467
|
}
|
|
440
468
|
};
|
|
441
|
-
function
|
|
469
|
+
function $e(e) {
|
|
442
470
|
let { transform: t, interpolation: n } = e.components;
|
|
443
|
-
|
|
471
|
+
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);
|
|
444
472
|
}
|
|
445
|
-
function
|
|
473
|
+
function et(e, t) {
|
|
446
474
|
let { transform: n, velocity: r, interpolation: i } = e.components;
|
|
447
475
|
if (!n || !r || !i) return;
|
|
448
476
|
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;
|
|
449
|
-
|
|
477
|
+
n.x = s + l, n.y = c + u, i.x = s, i.y = c, i.duration = t.stepMs * a, i.syncedTick = t.tick, i.totalDuration += i.duration, i.syncedDuration = i.totalDuration, i.remainingDuration = i.duration, i.targetX = n.x, i.targetY = n.y, i.syncedStepDuration = i.duration, i.tick = t.tick;
|
|
450
478
|
}
|
|
451
479
|
//#endregion
|
|
452
480
|
//#region src/components/registry.ts
|
|
453
|
-
var
|
|
481
|
+
var tt = {
|
|
454
482
|
transform: T,
|
|
455
483
|
velocity: j,
|
|
456
|
-
body:
|
|
484
|
+
body: Ee,
|
|
457
485
|
polygon: m,
|
|
458
|
-
bounciness:
|
|
486
|
+
bounciness: Me,
|
|
459
487
|
dynamics: te,
|
|
460
|
-
interpolation:
|
|
488
|
+
interpolation: Qe
|
|
461
489
|
}, z = {
|
|
462
490
|
x: 0,
|
|
463
491
|
y: 0
|
|
@@ -475,65 +503,65 @@ function U(e, t, n) {
|
|
|
475
503
|
return e === 2 ? t <= 0 : e === 3 ? n <= 0 : t <= 0 || n <= 0;
|
|
476
504
|
}
|
|
477
505
|
function W(e, t, n, r) {
|
|
478
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) * V(t, n) + n / 2 :
|
|
506
|
+
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) * V(t, n) + n / 2 : ut(t, n, r);
|
|
479
507
|
}
|
|
480
508
|
function G(e, t, n, r) {
|
|
481
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) * V(t, n) + n / 2 :
|
|
509
|
+
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) * V(t, n) + n / 2 : dt(t, n, r);
|
|
482
510
|
}
|
|
483
|
-
function
|
|
511
|
+
function nt(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
484
512
|
if (U(e, r, i) || U(o, l, u)) return !1;
|
|
485
513
|
let f = e !== 1, p = o !== 1;
|
|
486
|
-
if (!f && !p) return
|
|
487
|
-
if (f && !p) return
|
|
514
|
+
if (!f && !p) return ft(t, n, r, i, a, s, c, l, u, d);
|
|
515
|
+
if (f && !p) return nt(o, s, c, l, u, d, e, t, n, r, i, a);
|
|
488
516
|
let m = K(o, l, u), h = Math.cos(d) * m, g = Math.sin(d) * m, _ = H(o, l, u);
|
|
489
|
-
if (!f) return
|
|
517
|
+
if (!f) return mt(s - h, c - g, s + h, c + g, t, n, r, i, a) < _ * _;
|
|
490
518
|
let v = K(e, r, i), y = Math.cos(a) * v, b = Math.sin(a) * v, x = H(e, r, i) + _;
|
|
491
|
-
return
|
|
519
|
+
return pt(t - y, n - b, t + y, n + b, s - h, c - g, s + h, c + g) < x * x;
|
|
492
520
|
}
|
|
493
521
|
function K(e, t, n) {
|
|
494
522
|
return e === 3 ? V(t, n) : 0;
|
|
495
523
|
}
|
|
496
|
-
function
|
|
524
|
+
function rt(e, t, n, r, i, a, o, s, c, l, u, d, f) {
|
|
497
525
|
let p = e !== 1, m = o !== 1;
|
|
498
|
-
return !p && !m ?
|
|
526
|
+
return !p && !m ? it(t, n, r, i, a, s, c, l, u, d, f) : p && m ? at(e, t, n, r, i, a, o, s, c, l, u, d, f) : p ? ot(s, c, l, u, d, e, t, n, r, i, a, f) : ot(t, n, r, i, a, o, s, c, l, u, d, f) ? (f.x = -f.x, f.y = -f.y, !0) : !1;
|
|
499
527
|
}
|
|
500
|
-
function
|
|
528
|
+
function it(e, t, n, r, i, a, o, s, c, l, u) {
|
|
501
529
|
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 = q(d, f, y, b, h, g, d, f, _, v, p, m);
|
|
502
530
|
u.x = d, u.y = f;
|
|
503
531
|
let S = q(-f, d, y, b, h, g, d, f, _, v, p, m);
|
|
504
|
-
return S < x && (x = S, u.x = -f, u.y = d), S = q(p, m, y, b, h, g, d, f, _, v, p, m), S < x && (x = S, u.x = p, u.y = m), S = q(-m, p, y, b, h, g, d, f, _, v, p, m), S < x && (u.x = -m, u.y = p),
|
|
532
|
+
return S < x && (x = S, u.x = -f, u.y = d), S = q(p, m, y, b, h, g, d, f, _, v, p, m), S < x && (x = S, u.x = p, u.y = m), S = q(-m, p, y, b, h, g, d, f, _, v, p, m), S < x && (u.x = -m, u.y = p), ct(y, b, u), !0;
|
|
505
533
|
}
|
|
506
|
-
function
|
|
507
|
-
let p = K(e, r, i), m = Math.cos(a) * p, h = Math.sin(a) * p, g = K(o, l, u), _ = Math.cos(d) * g, v = Math.sin(d) * g, y = Math.sqrt(
|
|
508
|
-
return y > 0 ? (f.x = z.x / y, f.y = z.y / y, !0) :
|
|
534
|
+
function at(e, t, n, r, i, a, o, s, c, l, u, d, f) {
|
|
535
|
+
let p = K(e, r, i), m = Math.cos(a) * p, h = Math.sin(a) * p, g = K(o, l, u), _ = Math.cos(d) * g, v = Math.sin(d) * g, y = Math.sqrt(pt(t - m, n - h, t + m, n + h, s - _, c - v, s + _, c + v, z));
|
|
536
|
+
return y > 0 ? (f.x = z.x / y, f.y = z.y / y, !0) : lt(t - s, n - c, f);
|
|
509
537
|
}
|
|
510
|
-
function
|
|
511
|
-
let f = K(a, c, l), p = Math.cos(u) * f, m = Math.sin(u) * f, h = Math.sqrt(
|
|
538
|
+
function ot(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
539
|
+
let f = K(a, c, l), p = Math.cos(u) * f, m = Math.sin(u) * f, h = Math.sqrt(mt(o - p, s - m, o + p, s + m, e, t, n, r, i, z));
|
|
512
540
|
if (h > 0) return d.x = z.x / h, d.y = z.y / h, !0;
|
|
513
|
-
let g = Math.cos(i), _ = Math.sin(i), v = o - e, y = s - t, b = v * g + y * _, x = -v * _ + y * g, S = p * g + m * _, C = -p * _ + m * g, w = H(a, c, l), T = n / 2, E = r / 2, D =
|
|
541
|
+
let g = Math.cos(i), _ = Math.sin(i), v = o - e, y = s - t, b = v * g + y * _, x = -v * _ + y * g, S = p * g + m * _, C = -p * _ + m * g, w = H(a, c, l), T = n / 2, E = r / 2, D = st(1, 0, b, x, S, C, w, T, E);
|
|
514
542
|
d.x = 1, d.y = 0;
|
|
515
|
-
let O =
|
|
516
|
-
O < D && (D = O, d.x = 0, d.y = 1),
|
|
543
|
+
let O = st(0, 1, b, x, S, C, w, T, E);
|
|
544
|
+
O < D && (D = O, d.x = 0, d.y = 1), lt(-C, S, B) && (O = st(B.x, B.y, b, x, S, C, w, T, E), O < D && (d.x = B.x, d.y = B.y)), ct(b, x, d);
|
|
517
545
|
let k = d.x, A = d.y;
|
|
518
546
|
return d.x = k * g - A * _, d.y = k * _ + A * g, !0;
|
|
519
547
|
}
|
|
520
|
-
function
|
|
548
|
+
function st(e, t, n, r, i, a, o, s, c) {
|
|
521
549
|
return s * Math.abs(e) + c * Math.abs(t) + (Math.abs(i * e + a * t) + o) - Math.abs(n * e + r * t);
|
|
522
550
|
}
|
|
523
|
-
function
|
|
551
|
+
function ct(e, t, n) {
|
|
524
552
|
e * n.x + t * n.y < 0 && (n.x = -n.x, n.y = -n.y);
|
|
525
553
|
}
|
|
526
|
-
function
|
|
554
|
+
function lt(e, t, n) {
|
|
527
555
|
let r = Math.sqrt(e * e + t * t);
|
|
528
|
-
return r
|
|
556
|
+
return r !== 0 && (n.x = e / r, n.y = t / r, !0);
|
|
529
557
|
}
|
|
530
|
-
function
|
|
558
|
+
function ut(e, t, n) {
|
|
531
559
|
return (Math.abs(Math.cos(n)) * e + Math.abs(Math.sin(n)) * t) / 2;
|
|
532
560
|
}
|
|
533
|
-
function
|
|
561
|
+
function dt(e, t, n) {
|
|
534
562
|
return (Math.abs(Math.sin(n)) * e + Math.abs(Math.cos(n)) * t) / 2;
|
|
535
563
|
}
|
|
536
|
-
function
|
|
564
|
+
function ft(e, t, n, r, i, a, o, s, c, l) {
|
|
537
565
|
if (n <= 0 || r <= 0 || s <= 0 || c <= 0) return !1;
|
|
538
566
|
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;
|
|
539
567
|
return q(u, d, v, y, m, h, u, d, g, _, f, p) > 0 && q(-d, u, v, y, m, h, u, d, g, _, f, p) > 0 && q(f, p, v, y, m, h, u, d, g, _, f, p) > 0 && q(-p, f, v, y, m, h, u, d, g, _, f, p) > 0;
|
|
@@ -541,7 +569,7 @@ function it(e, t, n, r, i, a, o, s, c, l) {
|
|
|
541
569
|
function q(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
542
570
|
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);
|
|
543
571
|
}
|
|
544
|
-
function
|
|
572
|
+
function pt(e, t, n, r, i, a, o, s, c) {
|
|
545
573
|
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;
|
|
546
574
|
if (h <= 0 && g <= 0) return c && (c.x = p, c.y = m), p * p + m * m;
|
|
547
575
|
if (h <= 0) y = Y(_ / g);
|
|
@@ -556,28 +584,28 @@ function at(e, t, n, r, i, a, o, s, c) {
|
|
|
556
584
|
let b = e + l * v - (i + d * y), x = t + u * v - (a + f * y);
|
|
557
585
|
return c && (c.x = b, c.y = x), b * b + x * x;
|
|
558
586
|
}
|
|
559
|
-
function
|
|
587
|
+
function mt(e, t, n, r, i, a, o, s, c, l) {
|
|
560
588
|
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;
|
|
561
|
-
if (!
|
|
562
|
-
if (!l) return Math.min(
|
|
563
|
-
let S =
|
|
564
|
-
S =
|
|
589
|
+
if (!gt(v, y, b, x, f, p)) return l && (l.x = 0, l.y = 0), 0;
|
|
590
|
+
if (!l) return Math.min(_t(v, y, f, p), _t(b, x, f, p), J(-f, -p, v, y, b, x), J(f, -p, v, y, b, x), J(f, p, v, y, b, x), J(-f, p, v, y, b, x));
|
|
591
|
+
let S = _t(v, y, f, p, l);
|
|
592
|
+
S = ht(S, _t(b, x, f, p, B), B, l, !1), S = ht(S, J(-f, -p, v, y, b, x, B), B, l, !0), S = ht(S, J(f, -p, v, y, b, x, B), B, l, !0), S = ht(S, J(f, p, v, y, b, x, B), B, l, !0), S = ht(S, J(-f, p, v, y, b, x, B), B, l, !0);
|
|
565
593
|
let C = l.x, w = l.y;
|
|
566
594
|
return l.x = C * u - w * d, l.y = C * d + w * u, S;
|
|
567
595
|
}
|
|
568
|
-
function
|
|
596
|
+
function ht(e, t, n, r, i) {
|
|
569
597
|
return t >= e ? e : (r.x = i ? -n.x : n.x, r.y = i ? -n.y : n.y, t);
|
|
570
598
|
}
|
|
571
599
|
function J(e, t, n, r, i, a, o) {
|
|
572
600
|
let s = i - n, c = a - r, l = s * s + c * c, u = l > 0 ? Y(((e - n) * s + (t - r) * c) / l) : 0, d = e - (n + s * u), f = t - (r + c * u);
|
|
573
601
|
return o && (o.x = d, o.y = f), d * d + f * f;
|
|
574
602
|
}
|
|
575
|
-
function
|
|
603
|
+
function gt(e, t, n, r, i, a) {
|
|
576
604
|
if (Math.max(e, n) < -i || Math.min(e, n) > i || Math.max(t, r) < -a || Math.min(t, r) > a) return !0;
|
|
577
605
|
let o = -(r - t), s = n - e;
|
|
578
606
|
return Math.abs(o * e + s * t) > i * Math.abs(o) + a * Math.abs(s);
|
|
579
607
|
}
|
|
580
|
-
function
|
|
608
|
+
function _t(e, t, n, r, i) {
|
|
581
609
|
let a = Math.abs(e) - n, o = Math.abs(t) - r, s = a > 0 ? a : 0, c = o > 0 ? o : 0;
|
|
582
610
|
return i && (i.x = e < 0 ? -s : s, i.y = t < 0 ? -c : c), s * s + c * c;
|
|
583
611
|
}
|
|
@@ -595,23 +623,23 @@ function X(e) {
|
|
|
595
623
|
maxY: l + s
|
|
596
624
|
};
|
|
597
625
|
}
|
|
598
|
-
function
|
|
626
|
+
function vt(e, t, n, r, i) {
|
|
599
627
|
return e.minX <= r && e.maxX >= t && e.minY <= i && e.maxY >= n;
|
|
600
628
|
}
|
|
601
|
-
function
|
|
629
|
+
function yt(e, t) {
|
|
602
630
|
return t > e ? t - e : Math.max(1, Math.abs(e)) * 2 ** -52;
|
|
603
631
|
}
|
|
604
632
|
//#endregion
|
|
605
633
|
//#region src/world.ts
|
|
606
|
-
function
|
|
634
|
+
function bt(e, t) {
|
|
607
635
|
t.spatialMapMemory = e.spatialMap.getSharedMemory();
|
|
608
636
|
}
|
|
609
|
-
function
|
|
637
|
+
function xt(e) {
|
|
610
638
|
if (e.spatialMap) return e.spatialMap;
|
|
611
639
|
if (!e.heap || !e.spatialMapMemory) throw Error("Spatial system world is missing its shared MemoryHeap or spatial map");
|
|
612
640
|
return e.spatialMap = new o(e.heap, e.spatialMapMemory), e.spatialMap;
|
|
613
641
|
}
|
|
614
|
-
var
|
|
642
|
+
var St = class extends e {
|
|
615
643
|
spatialMap;
|
|
616
644
|
spatialIds = /* @__PURE__ */ new Set();
|
|
617
645
|
constructor(e, t = {}) {
|
|
@@ -642,12 +670,12 @@ var mt = class extends e {
|
|
|
642
670
|
}
|
|
643
671
|
searchSpatial(e, t, n, r, i) {
|
|
644
672
|
if (n < e || r < t) return [];
|
|
645
|
-
let a = [], o = Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(r) ? this.spatialMap.search(e, t,
|
|
673
|
+
let a = [], o = Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(r) ? this.spatialMap.search(e, t, yt(e, n), yt(t, r)) : this.spatialIds;
|
|
646
674
|
for (let s of o) {
|
|
647
675
|
let o = this.getEntityByEid(s);
|
|
648
676
|
if (!o || i && !i(o)) continue;
|
|
649
677
|
let c = o.components, l = c.transform?.block;
|
|
650
|
-
l &&
|
|
678
|
+
l && vt(X({
|
|
651
679
|
transform: l,
|
|
652
680
|
body: c.body?.block
|
|
653
681
|
}), e, t, n, r) && a.push(o);
|
|
@@ -669,10 +697,10 @@ var mt = class extends e {
|
|
|
669
697
|
return t ? [t] : [];
|
|
670
698
|
});
|
|
671
699
|
}
|
|
672
|
-
},
|
|
700
|
+
}, Ct = {
|
|
673
701
|
min: 0,
|
|
674
702
|
max: 0
|
|
675
|
-
},
|
|
703
|
+
}, wt = {
|
|
676
704
|
min: 0,
|
|
677
705
|
max: 0
|
|
678
706
|
}, Z = {
|
|
@@ -681,40 +709,40 @@ var mt = class extends e {
|
|
|
681
709
|
x: 0,
|
|
682
710
|
y: 0
|
|
683
711
|
};
|
|
684
|
-
function
|
|
685
|
-
return
|
|
712
|
+
function Tt(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
|
|
713
|
+
return Dt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !1);
|
|
686
714
|
}
|
|
687
|
-
function
|
|
688
|
-
return Z.depth = Infinity, !
|
|
715
|
+
function Et(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
|
|
716
|
+
return Z.depth = Infinity, !Dt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !0) || Z.depth === Infinity ? !1 : (m.x = Z.x, m.y = Z.y, !0);
|
|
689
717
|
}
|
|
690
|
-
function
|
|
691
|
-
return !(e === 4 && (!t || !
|
|
718
|
+
function Dt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
|
|
719
|
+
return !(e === 4 && (!t || !Ot(t, n, r, i, a, o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || s === 4 && (!c || !Ot(c, l, u, d, f, p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || e === 1 && !kt(o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || s === 1 && !kt(p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || It(e) && c && !At(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) || It(s) && t && !At(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));
|
|
692
720
|
}
|
|
693
|
-
function
|
|
721
|
+
function Ot(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b) {
|
|
694
722
|
let x = e[0], S = Math.cos(a), C = Math.sin(a);
|
|
695
723
|
for (let a = 0; a < x; a++) {
|
|
696
|
-
let w = (a + 1) % x, T =
|
|
697
|
-
if (!
|
|
724
|
+
let w = (a + 1) % x, T = Nt(e, a, t, r, i, S, C), E = Pt(e, a, n, r, i, S, C), D = Nt(e, w, t, r, i, S, C);
|
|
725
|
+
if (!jt(E - Pt(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;
|
|
698
726
|
}
|
|
699
727
|
return !0;
|
|
700
728
|
}
|
|
701
|
-
function
|
|
729
|
+
function kt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) {
|
|
702
730
|
let g = Math.cos(e), _ = Math.sin(e);
|
|
703
|
-
return
|
|
731
|
+
return jt(g, _, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) && jt(-_, g, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h);
|
|
704
732
|
}
|
|
705
|
-
function
|
|
733
|
+
function At(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) {
|
|
706
734
|
let D = e === 3 ? V(r, i) : 0, O = Math.cos(a) * D, k = Math.sin(a) * D, A = t - O, j = n - k, M = t + O, N = n + k, ee = o[0], P = Math.cos(d), F = Math.sin(d);
|
|
707
735
|
for (let e = 0; e < ee; e++) {
|
|
708
|
-
let t =
|
|
709
|
-
if (!
|
|
736
|
+
let t = Nt(o, e, s, l, u, P, F), n = Pt(o, e, c, l, u, P, F), r = Ft(A, j, M, N, t, n), i = A + (M - A) * r, a = j + (N - j) * r;
|
|
737
|
+
if (!jt(t - i, n - a, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E)) return !1;
|
|
710
738
|
}
|
|
711
739
|
return !0;
|
|
712
740
|
}
|
|
713
|
-
function
|
|
741
|
+
function jt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
714
742
|
let _ = Math.hypot(e, t);
|
|
715
743
|
if (_ === 0) return !0;
|
|
716
|
-
e /= _, t /= _,
|
|
717
|
-
let v =
|
|
744
|
+
e /= _, t /= _, Mt(n, r, i, a, o, s, c, e, t, Ct), Mt(l, u, d, f, p, m, h, e, t, wt);
|
|
745
|
+
let v = Ct.max - wt.min, y = wt.max - Ct.min;
|
|
718
746
|
if (!g && (v <= 0 || y <= 0)) return !1;
|
|
719
747
|
if (g) {
|
|
720
748
|
let n, r;
|
|
@@ -722,7 +750,7 @@ function Ct(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
|
722
750
|
}
|
|
723
751
|
return !0;
|
|
724
752
|
}
|
|
725
|
-
function
|
|
753
|
+
function Mt(e, t, n, r, i, a, o, s, c, l) {
|
|
726
754
|
let u = n * s + r * c;
|
|
727
755
|
if (e === 2) {
|
|
728
756
|
let e = i / 2;
|
|
@@ -746,48 +774,48 @@ function wt(e, t, n, r, i, a, o, s, c, l) {
|
|
|
746
774
|
let d = t[0], f = Math.cos(o), p = Math.sin(o);
|
|
747
775
|
l.min = Infinity, l.max = -Infinity;
|
|
748
776
|
for (let e = 0; e < d; e++) {
|
|
749
|
-
let o =
|
|
777
|
+
let o = Nt(t, e, n, i, a, f, p), u = Pt(t, e, r, i, a, f, p), d = o * s + u * c;
|
|
750
778
|
l.min = Math.min(l.min, d), l.max = Math.max(l.max, d);
|
|
751
779
|
}
|
|
752
780
|
}
|
|
753
|
-
function
|
|
781
|
+
function Nt(e, t, n, r, i, a, o) {
|
|
754
782
|
let s = 1 + t * 2;
|
|
755
783
|
return n + e[s] * r * a - e[s + 1] * i * o;
|
|
756
784
|
}
|
|
757
|
-
function
|
|
785
|
+
function Pt(e, t, n, r, i, a, o) {
|
|
758
786
|
let s = 1 + t * 2;
|
|
759
787
|
return n + e[s] * r * o + e[s + 1] * i * a;
|
|
760
788
|
}
|
|
761
|
-
function
|
|
789
|
+
function Ft(e, t, n, r, i, a) {
|
|
762
790
|
let o = n - e, s = r - t, c = o * o + s * s;
|
|
763
791
|
return c === 0 ? 0 : Math.min(1, Math.max(0, ((i - e) * o + (a - t) * s) / c));
|
|
764
792
|
}
|
|
765
|
-
function
|
|
793
|
+
function It(e) {
|
|
766
794
|
return e === 2 || e === 3;
|
|
767
795
|
}
|
|
768
|
-
function
|
|
769
|
-
if (
|
|
770
|
-
let o = e.get(t) ??
|
|
796
|
+
function Lt(e, t, n, r, i, a) {
|
|
797
|
+
if (Gt(n, r, "Force"), Gt(i, a, "Impulse"), n === 0 && r === 0 && i === 0 && a === 0) return;
|
|
798
|
+
let o = e.get(t) ?? Wt(), s = {
|
|
771
799
|
...o,
|
|
772
800
|
forceX: o.forceX + n,
|
|
773
801
|
forceY: o.forceY + r,
|
|
774
802
|
impulseX: o.impulseX + i,
|
|
775
803
|
impulseY: o.impulseY + a
|
|
776
804
|
};
|
|
777
|
-
|
|
805
|
+
Gt(s.forceX, s.forceY, "Accumulated force"), Gt(s.impulseX, s.impulseY, "Accumulated impulse"), e.set(t, s);
|
|
778
806
|
}
|
|
779
|
-
function
|
|
780
|
-
|
|
781
|
-
...e.get(t) ??
|
|
807
|
+
function Rt(e, t, n) {
|
|
808
|
+
Kt(n), (n.velocityX !== void 0 || n.velocityY !== void 0) && e.set(t, {
|
|
809
|
+
...e.get(t) ?? Wt(),
|
|
782
810
|
...n
|
|
783
811
|
});
|
|
784
812
|
}
|
|
785
|
-
function
|
|
813
|
+
function zt(e, t) {
|
|
786
814
|
if (e.size === 0) return t;
|
|
787
815
|
let n = /* @__PURE__ */ new Map();
|
|
788
816
|
for (let [t, r] of e) n.set(t, { ...r });
|
|
789
|
-
return
|
|
790
|
-
let r = n.get(e) ??
|
|
817
|
+
return Ut(t, (e, t) => {
|
|
818
|
+
let r = n.get(e) ?? Wt();
|
|
791
819
|
n.set(e, {
|
|
792
820
|
forceX: r.forceX + t.forceX,
|
|
793
821
|
forceY: r.forceY + t.forceY,
|
|
@@ -801,13 +829,13 @@ function jt(e, t) {
|
|
|
801
829
|
...t
|
|
802
830
|
})).sort((e, t) => e.entityId - t.entityId);
|
|
803
831
|
}
|
|
804
|
-
function
|
|
805
|
-
let i = e.dynamicsCommands, a = i instanceof Float64Array ? i : void 0, o =
|
|
832
|
+
function Bt(e, t, n, r) {
|
|
833
|
+
let i = e.dynamicsCommands, a = i instanceof Float64Array ? i : void 0, o = Vt(i && !(i instanceof Float64Array) ? i : void 0, t), s = a ? Ht(a, t) : -1, c = n[2];
|
|
806
834
|
if (!r && !o && s < 0 && c === 0) return;
|
|
807
835
|
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;
|
|
808
836
|
n[0] = g ?? y, n[1] = _ ?? b;
|
|
809
837
|
}
|
|
810
|
-
function
|
|
838
|
+
function Vt(e, t) {
|
|
811
839
|
if (!e) return;
|
|
812
840
|
let n = 0, r = e.length - 1;
|
|
813
841
|
for (; n <= r;) {
|
|
@@ -816,7 +844,7 @@ function Nt(e, t) {
|
|
|
816
844
|
a.entityId < t ? n = i + 1 : r = i - 1;
|
|
817
845
|
}
|
|
818
846
|
}
|
|
819
|
-
function
|
|
847
|
+
function Ht(e, t) {
|
|
820
848
|
let n = 0, r = e.length / 8 - 1;
|
|
821
849
|
for (; n <= r;) {
|
|
822
850
|
let i = n + r >>> 1, a = i * 8, o = e[a + 0];
|
|
@@ -825,7 +853,7 @@ function Pt(e, t) {
|
|
|
825
853
|
}
|
|
826
854
|
return -1;
|
|
827
855
|
}
|
|
828
|
-
function
|
|
856
|
+
function Ut(e, t) {
|
|
829
857
|
if (e) {
|
|
830
858
|
if (!(e instanceof Float64Array)) {
|
|
831
859
|
for (let { entityId: n, ...r } of e) t(n, r);
|
|
@@ -844,7 +872,7 @@ function Ft(e, t) {
|
|
|
844
872
|
}
|
|
845
873
|
}
|
|
846
874
|
}
|
|
847
|
-
function
|
|
875
|
+
function Wt() {
|
|
848
876
|
return {
|
|
849
877
|
forceX: 0,
|
|
850
878
|
forceY: 0,
|
|
@@ -852,18 +880,18 @@ function It() {
|
|
|
852
880
|
impulseY: 0
|
|
853
881
|
};
|
|
854
882
|
}
|
|
855
|
-
function
|
|
883
|
+
function Gt(e, t, n) {
|
|
856
884
|
if (!Number.isFinite(e) || !Number.isFinite(t)) throw Error(`${n} must contain finite numbers`);
|
|
857
885
|
}
|
|
858
|
-
function
|
|
886
|
+
function Kt(e) {
|
|
859
887
|
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");
|
|
860
888
|
}
|
|
861
889
|
//#endregion
|
|
862
890
|
//#region src/systems/collision.ts
|
|
863
|
-
var
|
|
891
|
+
var qt = 1e-4, Jt = 24, Yt = "collidable", Q = [], Xt = 2 ** 26, Zt = {
|
|
864
892
|
fraction: 1,
|
|
865
893
|
blocking: Q
|
|
866
|
-
},
|
|
894
|
+
}, Qt = class {
|
|
867
895
|
buckets = [];
|
|
868
896
|
hasBounciness = !1;
|
|
869
897
|
resolved = /* @__PURE__ */ new Set();
|
|
@@ -878,7 +906,7 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
878
906
|
if (U(l, u, d)) continue;
|
|
879
907
|
let f = o[4], p = W(l, u, d, f), m = G(l, u, d, f);
|
|
880
908
|
e.bounciness && (this.hasBounciness = !0);
|
|
881
|
-
let h = e.velocity, g = e.dynamics, _ =
|
|
909
|
+
let h = e.velocity, g = e.dynamics, _ = Vt(a, n.entityId), v = i ? Ht(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, M = E ?? A, N = Math.max(Math.abs(D), Math.abs(j)) * t, ee = Math.max(Math.abs(O), Math.abs(M)) * t, P = o[0], F = o[1], I = r.get(c);
|
|
882
910
|
I || (I = {
|
|
883
911
|
entries: [],
|
|
884
912
|
bounds: []
|
|
@@ -898,17 +926,17 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
898
926
|
}
|
|
899
927
|
}
|
|
900
928
|
claimContact(e, t) {
|
|
901
|
-
let n = e < t ? e *
|
|
902
|
-
return this.resolved.has(n)
|
|
929
|
+
let n = e < t ? e * Xt + t : t * Xt + e;
|
|
930
|
+
return !this.resolved.has(n) && (this.resolved.add(n), !0);
|
|
903
931
|
}
|
|
904
932
|
forEachOverlapping(e, t, n = 0, r = 0) {
|
|
905
|
-
let i =
|
|
933
|
+
let i = tn(e);
|
|
906
934
|
if (!i) return;
|
|
907
935
|
let { x: a, y: o, halfWidth: s, halfHeight: c } = i;
|
|
908
936
|
if (i.ccd && (n !== 0 || r !== 0)) {
|
|
909
937
|
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;
|
|
910
938
|
this.forEachCandidate(i, u, d, f, p, (a) => {
|
|
911
|
-
|
|
939
|
+
nn(i, e, l, n, r, a) && t(a);
|
|
912
940
|
});
|
|
913
941
|
return;
|
|
914
942
|
}
|
|
@@ -917,7 +945,7 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
917
945
|
});
|
|
918
946
|
}
|
|
919
947
|
contactPoint(e, t, n, r) {
|
|
920
|
-
let i = e.components.transform, a = i[0], o = i[1], s = Math.sqrt(n * n + r * r), c =
|
|
948
|
+
let i = e.components.transform, a = i[0], o = i[1], s = Math.sqrt(n * n + r * r), c = tn(e);
|
|
921
949
|
if (!c || s === 0) return {
|
|
922
950
|
x: a,
|
|
923
951
|
y: o
|
|
@@ -930,16 +958,16 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
930
958
|
};
|
|
931
959
|
}
|
|
932
960
|
contactNormal(e, t, n, r, i) {
|
|
933
|
-
let a =
|
|
961
|
+
let a = tn(e);
|
|
934
962
|
if (!a) return !1;
|
|
935
963
|
let o = n === 0 && r === 0 ? {
|
|
936
964
|
x: a.x,
|
|
937
965
|
y: a.y
|
|
938
966
|
} : this.contactPoint(e, t, n, r);
|
|
939
|
-
return
|
|
967
|
+
return $t(a, o.x, o.y, t, i);
|
|
940
968
|
}
|
|
941
969
|
sweep(e, t, n) {
|
|
942
|
-
let r = Math.sqrt(t * t + n * n), i =
|
|
970
|
+
let r = Math.sqrt(t * t + n * n), i = tn(e);
|
|
943
971
|
if (!i || r === 0) return {
|
|
944
972
|
fraction: 1,
|
|
945
973
|
blocking: Q
|
|
@@ -952,7 +980,7 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
952
980
|
} : this.refine(i, a, t, n, r);
|
|
953
981
|
}
|
|
954
982
|
resolveMove(e, t, n, r) {
|
|
955
|
-
let i = Math.sqrt(t * t + n * n), a =
|
|
983
|
+
let i = Math.sqrt(t * t + n * n), a = tn(e);
|
|
956
984
|
if (!a || i === 0) return {
|
|
957
985
|
moveX: t,
|
|
958
986
|
moveY: n,
|
|
@@ -983,7 +1011,7 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
983
1011
|
moveY: n,
|
|
984
1012
|
blocking: Q
|
|
985
1013
|
};
|
|
986
|
-
let i = e.length === 0 ?
|
|
1014
|
+
let i = e.length === 0 ? Zt : this.refine(a, e, t, 0, Math.abs(t)), o = r.length === 0 ? Zt : this.refine(a, r, 0, n, Math.abs(n)), s = t * i.fraction, c = n * o.fraction;
|
|
987
1015
|
if (s !== 0 && c !== 0) {
|
|
988
1016
|
let e = this.gatherCandidates(a, s, c);
|
|
989
1017
|
if (e.length > 0) {
|
|
@@ -998,7 +1026,7 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
998
1026
|
return {
|
|
999
1027
|
moveX: s,
|
|
1000
1028
|
moveY: c,
|
|
1001
|
-
blocking:
|
|
1029
|
+
blocking: en(i.blocking, o.blocking)
|
|
1002
1030
|
};
|
|
1003
1031
|
}
|
|
1004
1032
|
let s = this.refine(a, o, t, n, i);
|
|
@@ -1017,15 +1045,15 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
1017
1045
|
}), l;
|
|
1018
1046
|
}
|
|
1019
1047
|
refine(e, t, n, r, i) {
|
|
1020
|
-
let { x: a, y: o } = e, s = 0, c = 1, l =
|
|
1021
|
-
for (let i = 0; i <
|
|
1048
|
+
let { x: a, y: o } = e, s = 0, c = 1, l = qt / i;
|
|
1049
|
+
for (let i = 0; i < Jt && c - s > l; i++) {
|
|
1022
1050
|
let i = (s + c) / 2;
|
|
1023
1051
|
this.blockedAt(e, t, n, r, i) ? c = i : s = i;
|
|
1024
1052
|
}
|
|
1025
1053
|
let u = [], d = a + n * c, f = o + r * c;
|
|
1026
1054
|
for (let n of t) $(e, d, f, n) && u.push(n);
|
|
1027
1055
|
return {
|
|
1028
|
-
fraction: s * i >
|
|
1056
|
+
fraction: s * i > qt ? s : 0,
|
|
1029
1057
|
blocking: u
|
|
1030
1058
|
};
|
|
1031
1059
|
}
|
|
@@ -1033,7 +1061,7 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
1033
1061
|
if (e.sensor) return [];
|
|
1034
1062
|
let { x: r, y: i, halfWidth: a, halfHeight: o } = e, s = r + t, c = i + n, l = [];
|
|
1035
1063
|
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) => {
|
|
1036
|
-
R(a.components.body) || $(e, r, i, a) ||
|
|
1064
|
+
R(a.components.body) || $(e, r, i, a) || nn(e, r, i, t, n, a) && l.push(a);
|
|
1037
1065
|
}), l;
|
|
1038
1066
|
}
|
|
1039
1067
|
sweepContinuous(e, t, n, r) {
|
|
@@ -1042,13 +1070,13 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
1042
1070
|
fraction: 1,
|
|
1043
1071
|
blocking: Q
|
|
1044
1072
|
};
|
|
1045
|
-
let a = 1, o = [], s =
|
|
1073
|
+
let a = 1, o = [], s = qt / r;
|
|
1046
1074
|
for (let c of i) {
|
|
1047
1075
|
let i = this.entryFraction(e, c, t, n, r);
|
|
1048
1076
|
i < a - s ? (a = i, o = [c]) : i <= a + s && o.push(c);
|
|
1049
1077
|
}
|
|
1050
1078
|
return {
|
|
1051
|
-
fraction: a * r >
|
|
1079
|
+
fraction: a * r > qt ? a : 0,
|
|
1052
1080
|
blocking: o
|
|
1053
1081
|
};
|
|
1054
1082
|
}
|
|
@@ -1056,12 +1084,12 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
1056
1084
|
let a;
|
|
1057
1085
|
if (this.blockedAtOne(e, t, n, r, 1)) a = 1;
|
|
1058
1086
|
else {
|
|
1059
|
-
let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l =
|
|
1087
|
+
let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l = rn((s * n + c * r) / (i * i));
|
|
1060
1088
|
if (!this.blockedAtOne(e, t, n, r, l)) return l;
|
|
1061
1089
|
a = l;
|
|
1062
1090
|
}
|
|
1063
|
-
let o = 0, s =
|
|
1064
|
-
for (let i = 0; i <
|
|
1091
|
+
let o = 0, s = qt / i;
|
|
1092
|
+
for (let i = 0; i < Jt && a - o > s; i++) {
|
|
1065
1093
|
let i = (o + a) / 2;
|
|
1066
1094
|
this.blockedAtOne(e, t, n, r, i) ? a = i : o = i;
|
|
1067
1095
|
}
|
|
@@ -1078,22 +1106,22 @@ var zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
|
|
|
1078
1106
|
forEachCandidate(e, t, r, i, a, o) {
|
|
1079
1107
|
for (let s of this.buckets) if ((e.mask & s.category) !== 0) for (let c of s.index.search(t, r, i, a)) {
|
|
1080
1108
|
let t = s.entries[c];
|
|
1081
|
-
t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[n] !== 1 && (
|
|
1109
|
+
t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[n] !== 1 && (Ce(t.components.body) || o(t));
|
|
1082
1110
|
}
|
|
1083
1111
|
}
|
|
1084
1112
|
};
|
|
1085
|
-
function
|
|
1113
|
+
function $t(e, t, n, r, i) {
|
|
1086
1114
|
let a = r.components.transform, o = L(r.components.body), s = a[0], c = a[1], l = a[2], u = a[3], d = a[4];
|
|
1087
|
-
return e.shape === 4 || o === 4 ?
|
|
1115
|
+
return e.shape === 4 || o === 4 ? Et(e.shape, e.polygon, t, n, e.width, e.height, e.angle, o, r.components.polygon, s, c, l, u, d, i) : rt(e.shape, t, n, e.width, e.height, e.angle, o, s, c, l, u, d, i);
|
|
1088
1116
|
}
|
|
1089
|
-
function
|
|
1117
|
+
function en(e, t) {
|
|
1090
1118
|
if (e.length === 0) return t;
|
|
1091
1119
|
if (t.length === 0) return e;
|
|
1092
1120
|
let n = [...e];
|
|
1093
1121
|
for (let e of t) n.some((t) => t.entityId === e.entityId) || n.push(e);
|
|
1094
1122
|
return n;
|
|
1095
1123
|
}
|
|
1096
|
-
function
|
|
1124
|
+
function tn(e) {
|
|
1097
1125
|
let t = e.components.body;
|
|
1098
1126
|
if (!t) return;
|
|
1099
1127
|
let n = t[2];
|
|
@@ -1101,7 +1129,7 @@ function qt(e) {
|
|
|
1101
1129
|
let r = e.components.transform, i = L(t), a = r[2], o = r[3];
|
|
1102
1130
|
if (U(i, a, o)) return;
|
|
1103
1131
|
let s = r[4], c = e.components.polygon;
|
|
1104
|
-
if (
|
|
1132
|
+
if (i !== 4 || c) return {
|
|
1105
1133
|
entityId: e.entityId,
|
|
1106
1134
|
shape: i,
|
|
1107
1135
|
polygon: c,
|
|
@@ -1115,31 +1143,31 @@ function qt(e) {
|
|
|
1115
1143
|
category: t[1],
|
|
1116
1144
|
mask: n,
|
|
1117
1145
|
sensor: R(t),
|
|
1118
|
-
ccd:
|
|
1146
|
+
ccd: xe(t)
|
|
1119
1147
|
};
|
|
1120
1148
|
}
|
|
1121
|
-
function
|
|
1149
|
+
function nn(e, t, n, r, i, a) {
|
|
1122
1150
|
let o = t + r, s = n + i, c = a.components.transform, l = L(a.components.body), u = c[0], d = c[1], f = c[2], p = c[3], m = c[4];
|
|
1123
1151
|
if (e.shape === 1 || e.shape === 4) {
|
|
1124
1152
|
let c = Math.cos(e.angle), h = Math.sin(e.angle), g = r * c + i * h, _ = -r * h + i * c;
|
|
1125
|
-
return
|
|
1153
|
+
return an(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);
|
|
1126
1154
|
}
|
|
1127
1155
|
let h = H(e.shape, e.width, e.height), g = Math.sqrt(r * r + i * i), _ = g > 0 ? Math.atan2(i, r) : e.angle;
|
|
1128
|
-
return
|
|
1156
|
+
return an(3, void 0, (t + o) / 2, (n + s) / 2, g + h * 2, h * 2, _, l, a.components.polygon, u, d, f, p, m) ? !0 : an(e.shape, e.polygon, o, s, e.width, e.height, e.angle, l, a.components.polygon, u, d, f, p, m);
|
|
1129
1157
|
}
|
|
1130
|
-
function
|
|
1158
|
+
function rn(e) {
|
|
1131
1159
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
1132
1160
|
}
|
|
1133
1161
|
function $(e, t, n, r) {
|
|
1134
1162
|
let i = r.components.transform;
|
|
1135
|
-
return
|
|
1163
|
+
return an(e.shape, e.polygon, t, n, e.width, e.height, e.angle, L(r.components.body), r.components.polygon, i[0], i[1], i[2], i[3], i[4]);
|
|
1136
1164
|
}
|
|
1137
|
-
function
|
|
1138
|
-
return e !== 4 && s !== 4 ?
|
|
1165
|
+
function an(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
|
|
1166
|
+
return e !== 4 && s !== 4 ? nt(e, n, r, i, a, o, s, l, u, d, f, p) : Tt(e, t, n, r, i, a, o, s, c, l, u, d, f, p);
|
|
1139
1167
|
}
|
|
1140
1168
|
//#endregion
|
|
1141
1169
|
//#region src/systems/spatial-index.ts
|
|
1142
|
-
var
|
|
1170
|
+
var on = class {
|
|
1143
1171
|
entries = [];
|
|
1144
1172
|
index;
|
|
1145
1173
|
constructor(e) {
|
|
@@ -1179,14 +1207,14 @@ var Zt = class {
|
|
|
1179
1207
|
let o = this.entries;
|
|
1180
1208
|
return (i ? a.neighbors(e, t, n, r, (e) => i(o[e])) : a.neighbors(e, t, n, r)).map((e) => o[e]);
|
|
1181
1209
|
}
|
|
1182
|
-
},
|
|
1210
|
+
}, sn = {
|
|
1183
1211
|
x: 0,
|
|
1184
1212
|
y: 0
|
|
1185
1213
|
};
|
|
1186
|
-
function
|
|
1187
|
-
|
|
1214
|
+
function cn(e, t, n = !1) {
|
|
1215
|
+
(dn(e, n) || dn(t, n)) && fn(e, t) && pn(e, t, sn) && (un(e, sn.x, sn.y, n), un(t, -sn.x, -sn.y, n));
|
|
1188
1216
|
}
|
|
1189
|
-
function
|
|
1217
|
+
function ln(e, t, n) {
|
|
1190
1218
|
let r = e.components.bounciness, i = e.components.velocity;
|
|
1191
1219
|
if (!r || !i) return;
|
|
1192
1220
|
let a = i[0], o = i[1], s = a * t + o * n;
|
|
@@ -1194,9 +1222,9 @@ function en(e, t, n) {
|
|
|
1194
1222
|
let c = (1 + r[0]) * s;
|
|
1195
1223
|
i[0] = a - c * t, i[1] = o - c * n;
|
|
1196
1224
|
}
|
|
1197
|
-
function
|
|
1225
|
+
function un(e, t, n, r) {
|
|
1198
1226
|
if (e.components.bounciness) {
|
|
1199
|
-
|
|
1227
|
+
ln(e, t, n);
|
|
1200
1228
|
return;
|
|
1201
1229
|
}
|
|
1202
1230
|
let i = e.components.velocity;
|
|
@@ -1204,60 +1232,60 @@ function tn(e, t, n, r) {
|
|
|
1204
1232
|
let a = i[0], o = i[1], s = a * t + o * n;
|
|
1205
1233
|
s < 0 && (i[0] = a - s * t, i[1] = o - s * n);
|
|
1206
1234
|
}
|
|
1207
|
-
function
|
|
1235
|
+
function dn(e, t) {
|
|
1208
1236
|
return e.components.velocity !== void 0 && (t || e.components.bounciness !== void 0);
|
|
1209
1237
|
}
|
|
1210
|
-
function
|
|
1211
|
-
return !
|
|
1238
|
+
function fn(e, t) {
|
|
1239
|
+
return !hn(e.components.body) && !hn(t.components.body);
|
|
1212
1240
|
}
|
|
1213
|
-
function
|
|
1214
|
-
let r = e.components.transform, i = t.components.transform, a =
|
|
1215
|
-
return a === 4 || o === 4 ?
|
|
1241
|
+
function pn(e, t, n) {
|
|
1242
|
+
let r = e.components.transform, i = t.components.transform, a = mn(e.components.body), o = mn(t.components.body);
|
|
1243
|
+
return a === 4 || o === 4 ? Et(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) : rt(a, r[0], r[1], r[2], r[3], r[4], o, i[0], i[1], i[2], i[3], i[4], n);
|
|
1216
1244
|
}
|
|
1217
|
-
function
|
|
1245
|
+
function mn(e) {
|
|
1218
1246
|
return e ? L(e) : 1;
|
|
1219
1247
|
}
|
|
1220
|
-
function
|
|
1248
|
+
function hn(e) {
|
|
1221
1249
|
return e !== void 0 && R(e);
|
|
1222
1250
|
}
|
|
1223
1251
|
//#endregion
|
|
1224
1252
|
//#region src/systems/physics-update.ts
|
|
1225
|
-
function
|
|
1253
|
+
function gn(e, t, n) {
|
|
1226
1254
|
if (!e.spatialMap && (!e.heap || !e.spatialMapMemory)) return;
|
|
1227
|
-
let r =
|
|
1255
|
+
let r = xt(e), i = X(n);
|
|
1228
1256
|
r.update(t, i.minX, i.minY, i.maxX - i.minX, i.maxY - i.minY);
|
|
1229
1257
|
}
|
|
1230
|
-
var
|
|
1258
|
+
var _n = "position-updated", vn = {
|
|
1231
1259
|
x: 0,
|
|
1232
1260
|
y: 0
|
|
1233
1261
|
};
|
|
1234
|
-
function
|
|
1262
|
+
function yn(e = {}) {
|
|
1235
1263
|
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) => {
|
|
1236
1264
|
if (c.entity?.[n] === 1) return;
|
|
1237
|
-
if (c.body !== void 0 &&
|
|
1265
|
+
if (c.body !== void 0 && Ce(c.body)) {
|
|
1238
1266
|
u.entityDied(r);
|
|
1239
1267
|
return;
|
|
1240
1268
|
}
|
|
1241
|
-
let d = i ?
|
|
1269
|
+
let d = i ? xn(c, i) : 0;
|
|
1242
1270
|
if (i && e.skipGroup === d) return;
|
|
1243
1271
|
let f = {
|
|
1244
1272
|
entityId: r,
|
|
1245
1273
|
components: c
|
|
1246
1274
|
}, p = c.interpolation, m = e.elapsedTime / 1e3;
|
|
1247
|
-
|
|
1275
|
+
Bt(e, r, c.velocity, c.dynamics);
|
|
1248
1276
|
let h = c.velocity[0] * m, g = c.velocity[1] * m;
|
|
1249
|
-
|
|
1277
|
+
En(p, c.transform, e);
|
|
1250
1278
|
let _ = i ? s?.get(d) : o;
|
|
1251
1279
|
if (!_) {
|
|
1252
|
-
|
|
1280
|
+
On(r, c.transform, h, g, u, e.reportMoves), gn(e, r, c), Dn(p, e.tick);
|
|
1253
1281
|
return;
|
|
1254
1282
|
}
|
|
1255
1283
|
let v = c.bounciness !== void 0, y = _.resolveMove(f, h, g, !v);
|
|
1256
|
-
if (
|
|
1284
|
+
if (On(r, c.transform, y.moveX, y.moveY, u, e.reportMoves), gn(e, r, c), Dn(p, e.tick), _.hasBounciness || a || t) {
|
|
1257
1285
|
_.forEachOverlapping(f, (n) => {
|
|
1258
|
-
_.claimContact(r, n.entityId) &&
|
|
1286
|
+
_.claimContact(r, n.entityId) && Sn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
|
|
1259
1287
|
}, y.moveX, y.moveY);
|
|
1260
|
-
for (let n of y.blocking) _.claimContact(r, n.entityId) &&
|
|
1288
|
+
for (let n of y.blocking) _.claimContact(r, n.entityId) && Sn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
|
|
1261
1289
|
}
|
|
1262
1290
|
}, { physics: {
|
|
1263
1291
|
collision: !0,
|
|
@@ -1266,60 +1294,60 @@ function dn(e = {}) {
|
|
|
1266
1294
|
group: i
|
|
1267
1295
|
} });
|
|
1268
1296
|
return l.preRun = (e, t, n) => {
|
|
1269
|
-
|
|
1270
|
-
|
|
1297
|
+
bn(e, c), e.dieAtImpact = (t, n) => {
|
|
1298
|
+
wn(e, i ? s?.get(xn(t.components, i)) : o, t, n);
|
|
1271
1299
|
};
|
|
1272
1300
|
let r = e.elapsedTime / 1e3, a = n.collidable ?? [];
|
|
1273
1301
|
if (!i) {
|
|
1274
|
-
o = new
|
|
1302
|
+
o = new Qt(a, r, e.dynamicsCommands);
|
|
1275
1303
|
return;
|
|
1276
1304
|
}
|
|
1277
1305
|
let l = /* @__PURE__ */ new Map();
|
|
1278
1306
|
for (let t of a) {
|
|
1279
|
-
let n =
|
|
1307
|
+
let n = xn(t.components, i);
|
|
1280
1308
|
if (e.skipGroup === n) continue;
|
|
1281
1309
|
let r = l.get(n);
|
|
1282
1310
|
r || (r = [], l.set(n, r)), r.push(t);
|
|
1283
1311
|
}
|
|
1284
1312
|
s = /* @__PURE__ */ new Map();
|
|
1285
|
-
for (let [t, n] of l) s.set(t, new
|
|
1313
|
+
for (let [t, n] of l) s.set(t, new Qt(n, r, e.dynamicsCommands));
|
|
1286
1314
|
}, l;
|
|
1287
1315
|
}
|
|
1288
|
-
function
|
|
1316
|
+
function bn(e, t) {
|
|
1289
1317
|
let n = e, r = e.commandQueueId ?? 0, i = t.get(r);
|
|
1290
|
-
i && (e.dynamicsCommands =
|
|
1318
|
+
i && (e.dynamicsCommands = zt(i, e.dynamicsCommands), t.delete(r));
|
|
1291
1319
|
let a = () => {
|
|
1292
1320
|
let e = t.get(r);
|
|
1293
1321
|
return e || (e = /* @__PURE__ */ new Map(), t.set(r, e)), e;
|
|
1294
1322
|
};
|
|
1295
1323
|
n.queueForce = (e, t, n) => {
|
|
1296
|
-
|
|
1324
|
+
Lt(a(), e, t, n, 0, 0);
|
|
1297
1325
|
}, n.queueImpulse = (e, t, n) => {
|
|
1298
|
-
|
|
1326
|
+
Lt(a(), e, 0, 0, t, n);
|
|
1299
1327
|
}, n.queueVelocity = (e, t) => {
|
|
1300
|
-
|
|
1328
|
+
Rt(a(), e, t);
|
|
1301
1329
|
};
|
|
1302
1330
|
}
|
|
1303
|
-
function
|
|
1331
|
+
function xn(e, t) {
|
|
1304
1332
|
let n = e[t.component];
|
|
1305
1333
|
return n ? n[t.index] : 0;
|
|
1306
1334
|
}
|
|
1307
|
-
function
|
|
1308
|
-
if (
|
|
1335
|
+
function Sn(e, t, n, r, i, a, o, s, c, l) {
|
|
1336
|
+
if (cn(n, r, c), !l) return;
|
|
1309
1337
|
let u = X(n.components), d = X(r.components);
|
|
1310
|
-
|
|
1311
|
-
normalX:
|
|
1312
|
-
normalY:
|
|
1313
|
-
}),
|
|
1338
|
+
vn.x = 0, vn.y = 0, t.contactNormal(n, r, o, s, vn), l(e, n, r, i, a, {
|
|
1339
|
+
normalX: vn.x,
|
|
1340
|
+
normalY: vn.y
|
|
1341
|
+
}), Cn(e, n.entityId, n.components, u), Cn(e, r.entityId, r.components, d);
|
|
1314
1342
|
}
|
|
1315
|
-
function
|
|
1343
|
+
function Cn(e, t, n, r) {
|
|
1316
1344
|
let i = X(n);
|
|
1317
|
-
(i.minX !== r.minX || i.minY !== r.minY || i.maxX !== r.maxX || i.maxY !== r.maxY) &&
|
|
1345
|
+
(i.minX !== r.minX || i.minY !== r.minY || i.maxX !== r.maxX || i.maxY !== r.maxY) && gn(e, t, n);
|
|
1318
1346
|
}
|
|
1319
|
-
function
|
|
1347
|
+
function wn(e, t, n, r) {
|
|
1320
1348
|
let i = n.components.body;
|
|
1321
|
-
if (!i ||
|
|
1322
|
-
|
|
1349
|
+
if (!i || Ce(i)) return;
|
|
1350
|
+
we(i);
|
|
1323
1351
|
let a = n.components.transform, o = n.components.velocity, s = r.components.transform, c = r.components.body;
|
|
1324
1352
|
if (!t || !a || !o || !s || !c) return;
|
|
1325
1353
|
let l = e.elapsedTime / 1e3, u = o[0] * l, d = o[1] * l;
|
|
@@ -1336,34 +1364,50 @@ function gn(e, t, n, r) {
|
|
|
1336
1364
|
} }, u, d);
|
|
1337
1365
|
a[0] = f.x, a[1] = f.y;
|
|
1338
1366
|
}
|
|
1339
|
-
function
|
|
1367
|
+
function Tn(e, t, n, r, i) {
|
|
1340
1368
|
let a = e.elapsedTime / 1e3, o = n.interpolation;
|
|
1341
|
-
|
|
1369
|
+
Bt(e, t, n.velocity, n.dynamics), En(o, n.transform, e), On(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), gn(e, t, n), Dn(o, e.tick);
|
|
1342
1370
|
}
|
|
1343
|
-
function
|
|
1344
|
-
e && (a(e,
|
|
1371
|
+
function En(e, t, n) {
|
|
1372
|
+
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);
|
|
1373
|
+
}
|
|
1374
|
+
function Dn(e, t) {
|
|
1375
|
+
e && a(e, 4, t);
|
|
1376
|
+
}
|
|
1377
|
+
function On(e, t, n, r, i, a) {
|
|
1378
|
+
(n !== 0 || r !== 0) && (n !== 0 && c(t, 0, n, Infinity), r !== 0 && c(t, 1, r, Infinity), a !== !1 && i.emitSystemEvent(_n, e));
|
|
1379
|
+
}
|
|
1380
|
+
//#endregion
|
|
1381
|
+
//#region src/systems/interpolation-channels.ts
|
|
1382
|
+
var kn = /* @__PURE__ */ new WeakMap();
|
|
1383
|
+
function An(e, t) {
|
|
1384
|
+
let n = kn.get(e);
|
|
1385
|
+
return n || (n = [void 0], kn.set(e, n)), n.push(t), n.length - 1;
|
|
1345
1386
|
}
|
|
1346
|
-
function
|
|
1347
|
-
|
|
1387
|
+
function jn(e, t) {
|
|
1388
|
+
let n = kn.get(e);
|
|
1389
|
+
n && t > 0 && t < n.length && (n[t] = void 0);
|
|
1348
1390
|
}
|
|
1349
|
-
function
|
|
1350
|
-
|
|
1391
|
+
function Mn(e) {
|
|
1392
|
+
let t = kn.get(e);
|
|
1393
|
+
if (t) return t.map((e) => e ? e.committedTick : NaN);
|
|
1351
1394
|
}
|
|
1352
1395
|
//#endregion
|
|
1353
1396
|
//#region src/systems/physics-system.ts
|
|
1354
|
-
var
|
|
1397
|
+
var Nn = 50, Pn = 1, Fn = class extends r {
|
|
1355
1398
|
spatialWorld;
|
|
1356
1399
|
pendingDynamicsCommands = /* @__PURE__ */ new Map();
|
|
1357
|
-
commandQueueId =
|
|
1400
|
+
commandQueueId = Pn++;
|
|
1358
1401
|
tick = 0;
|
|
1402
|
+
interpolationChannel;
|
|
1359
1403
|
reportMoves;
|
|
1360
1404
|
skipGroup;
|
|
1361
1405
|
constructor(e, t = {}) {
|
|
1362
|
-
let n = t.updateFunction ??
|
|
1406
|
+
let n = t.updateFunction ?? Tn, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = n === Tn || n.physics?.dynamics === !0, o = n.physics?.group, s = [];
|
|
1363
1407
|
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);
|
|
1364
1408
|
let c = s.length ? [...s, ...r] : r, l = r.includes("bounciness") ? [...r] : ["bounciness", ...r];
|
|
1365
1409
|
l.includes("polygon") || l.push("polygon"), a && !l.includes("dynamics") && l.push("dynamics"), o && !l.includes(o.component) && l.push(o.component);
|
|
1366
|
-
let u = i ? { [
|
|
1410
|
+
let u = i ? { [Yt]: {
|
|
1367
1411
|
required: ["transform", "body"],
|
|
1368
1412
|
optional: [
|
|
1369
1413
|
"velocity",
|
|
@@ -1374,7 +1418,7 @@ var xn = 50, Sn = 1, Cn = class extends r {
|
|
|
1374
1418
|
} } : void 0, d = u || t.queries ? {
|
|
1375
1419
|
...u,
|
|
1376
1420
|
...t.queries
|
|
1377
|
-
} : void 0, f =
|
|
1421
|
+
} : void 0, f = In(t.scope, t.filter);
|
|
1378
1422
|
super(e, {
|
|
1379
1423
|
name: t.name ?? "PhysicsSystem",
|
|
1380
1424
|
deltaBetweenRuns: t.deltaBetweenRuns ?? 50,
|
|
@@ -1388,11 +1432,17 @@ var xn = 50, Sn = 1, Cn = class extends r {
|
|
|
1388
1432
|
getWorker: t.getWorker ?? (() => {
|
|
1389
1433
|
throw Error("PhysicsSystem cannot start a worker: no getWorker was supplied");
|
|
1390
1434
|
})
|
|
1391
|
-
}), this.spatialWorld = e, this.reportMoves = t.reportMoves, this.skipGroup = t.skipGroup;
|
|
1435
|
+
}), this.spatialWorld = e, this.reportMoves = t.reportMoves, this.skipGroup = t.skipGroup, this.interpolationChannel = An(e, this);
|
|
1436
|
+
}
|
|
1437
|
+
get committedTick() {
|
|
1438
|
+
return this.isCurrentlyRunning() ? this.tick - 1 : this.tick;
|
|
1439
|
+
}
|
|
1440
|
+
destroy() {
|
|
1441
|
+
jn(this.world, this.interpolationChannel), super.destroy();
|
|
1392
1442
|
}
|
|
1393
1443
|
startInterpolation(e) {
|
|
1394
1444
|
let t = this.deltaBetweenRuns;
|
|
1395
|
-
t <= 0 ||
|
|
1445
|
+
t <= 0 || et(e, {
|
|
1396
1446
|
stepMs: t,
|
|
1397
1447
|
stepFraction: this.currentDelta / t,
|
|
1398
1448
|
tick: this.tick
|
|
@@ -1406,14 +1456,14 @@ var xn = 50, Sn = 1, Cn = class extends r {
|
|
|
1406
1456
|
}
|
|
1407
1457
|
queueVelocity(e, t) {
|
|
1408
1458
|
let n = typeof e == "number" ? e : e.eid;
|
|
1409
|
-
|
|
1459
|
+
Rt(this.pendingDynamicsCommands, n, t);
|
|
1410
1460
|
}
|
|
1411
1461
|
addDataToWorld(e) {
|
|
1412
|
-
e.tick = ++this.tick,
|
|
1462
|
+
e.tick = ++this.tick, e.interpolationChannel = this.interpolationChannel, bt(this.spatialWorld, e), e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0, e.skipGroup = this.skipGroup, e.commandQueueId = this.commandQueueId, e.dynamicsCommands = this.snapshotDynamicsCommands();
|
|
1413
1463
|
}
|
|
1414
1464
|
queueDynamics(e, t, n, r, i) {
|
|
1415
1465
|
let a = typeof e == "number" ? e : e.eid;
|
|
1416
|
-
|
|
1466
|
+
Lt(this.pendingDynamicsCommands, a, t, n, r, i);
|
|
1417
1467
|
}
|
|
1418
1468
|
snapshotDynamicsCommands() {
|
|
1419
1469
|
if (this.pendingDynamicsCommands.size === 0) return;
|
|
@@ -1429,47 +1479,58 @@ var xn = 50, Sn = 1, Cn = class extends r {
|
|
|
1429
1479
|
return n;
|
|
1430
1480
|
}
|
|
1431
1481
|
};
|
|
1432
|
-
function
|
|
1482
|
+
function In(e, t) {
|
|
1433
1483
|
return e ? t ? (n) => e(n) && t(n) : e : t;
|
|
1434
1484
|
}
|
|
1435
1485
|
//#endregion
|
|
1436
1486
|
//#region src/systems/interpolation-update.ts
|
|
1437
|
-
var
|
|
1438
|
-
let r = n.interpolation, a = n.transform, o = i(r,
|
|
1439
|
-
if (
|
|
1487
|
+
var Ln = 1.5, Rn = .5, zn = (e, t, n) => {
|
|
1488
|
+
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), f = o === d, p = e.committedTicks?.[r[11]];
|
|
1489
|
+
if (p !== void 0 && !Number.isNaN(p) && !(f && d <= p)) {
|
|
1490
|
+
let e = i(r, 16);
|
|
1491
|
+
s = r[14], c = r[15], l = r[12], u = r[13], d = i(r, 16), f = e === d;
|
|
1492
|
+
}
|
|
1493
|
+
if (f) r[8] = l, r[9] = u, r[10] = s;
|
|
1494
|
+
else {
|
|
1495
|
+
if (s = r[10], s <= 0 || r[7] <= 0) return;
|
|
1496
|
+
l = r[8], u = r[9], c = r[6], d = r[2];
|
|
1497
|
+
}
|
|
1440
1498
|
if (s <= 0) {
|
|
1441
|
-
r[
|
|
1499
|
+
r[2] = d, r[6] = c, r[7] = 0, r[0] = l, r[1] = u;
|
|
1442
1500
|
return;
|
|
1443
1501
|
}
|
|
1444
|
-
let
|
|
1445
|
-
if (d !== r[
|
|
1446
|
-
let e = r[
|
|
1447
|
-
|
|
1502
|
+
let m = r[7];
|
|
1503
|
+
if (d !== r[2]) {
|
|
1504
|
+
let e = r[6], t = c >= e ? c - e : s;
|
|
1505
|
+
m += t, r[6] = c, r[2] = d;
|
|
1448
1506
|
}
|
|
1449
|
-
if (
|
|
1450
|
-
r[
|
|
1507
|
+
if (m <= 0) {
|
|
1508
|
+
r[7] = 0, r[0] = l, r[1] = u;
|
|
1451
1509
|
return;
|
|
1452
1510
|
}
|
|
1453
|
-
let
|
|
1454
|
-
|
|
1455
|
-
let
|
|
1456
|
-
r[0] =
|
|
1457
|
-
},
|
|
1511
|
+
let h = Math.min(Math.max(e.elapsedTime, 0), m), g = s * Ln, _ = m - h;
|
|
1512
|
+
_ > g && (h += Math.min(_ - g, h * Rn));
|
|
1513
|
+
let v = h / m, y = r[0], b = r[1];
|
|
1514
|
+
r[0] = y + (l - y) * v, r[1] = b + (u - b) * v, r[7] = m - h;
|
|
1515
|
+
}, Bn = class extends r {
|
|
1458
1516
|
constructor(e, t = {}) {
|
|
1459
1517
|
super(e, {
|
|
1460
1518
|
name: t.name ?? "InterpolationSystem",
|
|
1461
1519
|
deltaBetweenRuns: 0,
|
|
1462
1520
|
firstRun: t.firstRun,
|
|
1463
1521
|
required: ["transform", "interpolation"],
|
|
1464
|
-
updateFunction:
|
|
1522
|
+
updateFunction: zn,
|
|
1465
1523
|
forceMainThread: t.forceMainThread ?? !t.getWorker,
|
|
1466
1524
|
getWorker: t.getWorker ?? (() => {
|
|
1467
1525
|
throw Error("InterpolationSystem cannot start a worker: no getWorker was supplied");
|
|
1468
1526
|
})
|
|
1469
1527
|
});
|
|
1470
1528
|
}
|
|
1529
|
+
addDataToWorld(e) {
|
|
1530
|
+
e.committedTicks = Mn(this.world);
|
|
1531
|
+
}
|
|
1471
1532
|
};
|
|
1472
1533
|
//#endregion
|
|
1473
|
-
export { pe as BODY_CATEGORY_INDEX, ve as BODY_CCD_FLAG, ye as BODY_DYING_FLAG, fe as BODY_FLAGS_INDEX, me as BODY_MASK_INDEX, _e as BODY_SENSOR_FLAG, ge as BODY_SHAPE_MASK, he as BODY_SIZE,
|
|
1534
|
+
export { be as BODY_BLOCKS_PATH_FLAG, pe as BODY_CATEGORY_INDEX, ve as BODY_CCD_FLAG, ye as BODY_DYING_FLAG, fe as BODY_FLAGS_INDEX, me as BODY_MASK_INDEX, _e as BODY_SENSOR_FLAG, ge as BODY_SHAPE_MASK, he as BODY_SIZE, ke as BOUNCINESS_INDEX, Ae as BOUNCINESS_SIZE, Yt as COLLIDABLE_QUERY, Qt as CollisionBroadphase, le as DEFAULT_COLLIDE_CATEGORY, ue as DEFAULT_COLLIDE_MASK, Nn as DEFAULT_PHYSICS_STEP_MS, N as DYNAMICS_ACCELERATION_X_INDEX, ee as DYNAMICS_ACCELERATION_Y_INDEX, P as DYNAMICS_INVERSE_MASS_INDEX, F as DYNAMICS_SIZE, We as INTERPOLATION_CHANNEL_INDEX, Ie as INTERPOLATION_DURATION_INDEX, qe as INTERPOLATION_PREVIOUS_DURATION_INDEX, Ye as INTERPOLATION_PREVIOUS_TICK_INDEX, Je as INTERPOLATION_PREVIOUS_TOTAL_DURATION_INDEX, Ge as INTERPOLATION_PREVIOUS_X_INDEX, Ke as INTERPOLATION_PREVIOUS_Y_INDEX, Be as INTERPOLATION_REMAINING_DURATION_INDEX, Xe as INTERPOLATION_SIZE, ze as INTERPOLATION_SYNCED_DURATION_INDEX, Ue as INTERPOLATION_SYNCED_STEP_DURATION_INDEX, Fe as INTERPOLATION_SYNCED_TICK_INDEX, Ve as INTERPOLATION_TARGET_X_INDEX, He as INTERPOLATION_TARGET_Y_INDEX, Le as INTERPOLATION_TICK_INDEX, Re as INTERPOLATION_TOTAL_DURATION_INDEX, Ne as INTERPOLATION_X_INDEX, Pe as INTERPOLATION_Y_INDEX, Bn as InterpolationSystem, l as MAX_POLYGON_VERTICES, f as POLYGON_SIZE, u as POLYGON_VERTEX_COUNT_INDEX, d as POLYGON_VERTICES_INDEX, _n as POSITION_UPDATED_EVENT, St as PhysicalWorld, Fn as PhysicsSystem, oe as SHAPE_CAPSULE, ae as SHAPE_CIRCLE, se as SHAPE_POLYGON, ie as SHAPE_RECTANGLE, on as SpatialIndex, S as TRANSFORM_ANGLE_INDEX, x as TRANSFORM_HEIGHT_INDEX, C as TRANSFORM_SIZE, b as TRANSFORM_WIDTH_INDEX, v as TRANSFORM_X_INDEX, y as TRANSFORM_Y_INDEX, O as VELOCITY_DAMPING_INDEX, k as VELOCITY_SIZE, E as VELOCITY_X_INDEX, D as VELOCITY_Y_INDEX, bt as addPhysicalWorldData, Se as blocksPath, Ee as bodyDefinition, L as bodyShape, Me as bouncinessDefinition, dt as boundsHalfHeight, ut as boundsHalfWidth, de as canCollide, V as capsuleHalfLength, rt as contactNormal, yn as createPhysicsUpdate, te as dynamicsDefinition, xt as getSpatialMap, Bt as integrateDynamics, Qe as interpolationDefinition, zn as interpolationUpdate, xe as isContinuous, Ce as isDying, R as isSensor, we as markDying, ft as orientedBoxesOverlap, tt as physicsRegistry, Tn as physicsUpdate, J as pointSegmentDistanceSquared, Et as polygonContactNormal, m as polygonDefinition, Tt as polygonShapesOverlap, h as preparePolygon, mt as segmentBoxDistanceSquared, pt as segmentSegmentDistanceSquared, G as shapeHalfHeight, W as shapeHalfWidth, U as shapeIsEmpty, H as shapeRadius, nt as shapesOverlap, $e as snapEntity, et as startSpawnInterpolation, T as transformDefinition, gn as updateSpatialMap, j as velocityDefinition };
|
|
1474
1535
|
|
|
1475
1536
|
//# sourceMappingURL=index.js.map
|