@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/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) != 0;
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] & 32) != 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 Ce = class extends t {
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) != 0;
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) != 0;
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
- }, we = {
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
- Te(e),
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 Ce(t.getBlock(n), n);
327
+ return new Te(t.getBlock(n), n);
318
328
  }
319
329
  };
320
- function Te(e) {
321
- let t = Ee(e);
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 Ee(e) {
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 De = 0, Oe = 1, ke = class extends t {
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
- }, Ae = {
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 ke(t.getBlock(n), n);
358
+ return new je(t.getBlock(n), n);
349
359
  }
350
- }, je = 0, Me = 1, Ne = 2, Pe = 3, Fe = 4, Ie = 5, Le = 6, Re = 7, ze = 8, Be = 9, Ve = 10, He = 11, Ue = class extends t {
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 prevX() {
373
+ get syncedTick() {
364
374
  return this.block[2];
365
375
  }
366
- set prevX(e) {
376
+ set syncedTick(e) {
367
377
  this.block[2] = e;
368
378
  }
369
- get prevY() {
379
+ get duration() {
370
380
  return this.block[3];
371
381
  }
372
- set prevY(e) {
382
+ set duration(e) {
373
383
  this.block[3] = e;
374
384
  }
375
- get progress() {
376
- return this.block[4];
385
+ get tick() {
386
+ return i(this.block, 4);
377
387
  }
378
- set progress(e) {
379
- this.block[4] = e;
388
+ set tick(e) {
389
+ a(this.block, 4, e);
380
390
  }
381
- get syncedTick() {
391
+ get totalDuration() {
382
392
  return this.block[5];
383
393
  }
384
- set syncedTick(e) {
394
+ set totalDuration(e) {
385
395
  this.block[5] = e;
386
396
  }
387
- get duration() {
397
+ get syncedDuration() {
388
398
  return this.block[6];
389
399
  }
390
- set duration(e) {
400
+ set syncedDuration(e) {
391
401
  this.block[6] = e;
392
402
  }
393
- get tick() {
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 totalDuration(e) {
406
+ set targetX(e) {
403
407
  this.block[8] = e;
404
408
  }
405
- get syncedDuration() {
409
+ get targetY() {
406
410
  return this.block[9];
407
411
  }
408
- set syncedDuration(e) {
412
+ set targetY(e) {
409
413
  this.block[9] = e;
410
414
  }
411
- get remainingDuration() {
415
+ get syncedStepDuration() {
412
416
  return this.block[10];
413
417
  }
414
- set remainingDuration(e) {
418
+ set syncedStepDuration(e) {
415
419
  this.block[10] = e;
416
420
  }
417
- }, We = {
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: 11,
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 Ue(t.getBlock(n), n);
466
+ return new Ze(t.getBlock(n), n);
439
467
  }
440
468
  };
441
- function Ge(e) {
469
+ function $e(e) {
442
470
  let { transform: t, interpolation: n } = e.components;
443
- !t || !n || (n.prevX = n.x = t.x, n.prevY = n.y = t.y, n.remainingDuration = 0, n.syncedDuration = n.totalDuration);
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 Ke(e, t) {
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
- i.prevX = s, i.prevY = c, n.x = s + l, n.y = c + u, i.x = s, i.y = c, i.duration = t.stepMs * a, i.progress = 0, i.syncedTick = t.tick, i.totalDuration += i.duration, i.syncedDuration = i.totalDuration, i.remainingDuration = i.duration, i.tick = t.tick;
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 qe = {
481
+ var tt = {
454
482
  transform: T,
455
483
  velocity: j,
456
- body: we,
484
+ body: Ee,
457
485
  polygon: m,
458
- bounciness: Ae,
486
+ bounciness: Me,
459
487
  dynamics: te,
460
- interpolation: We
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 : nt(t, n, r);
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 : rt(t, n, r);
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 Je(e, t, n, r, i, a, o, s, c, l, u, d) {
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 it(t, n, r, i, a, s, c, l, u, d);
487
- if (f && !p) return Je(o, s, c, l, u, d, e, t, n, r, i, a);
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 ot(s - h, c - g, s + h, c + g, t, n, r, i, a) < _ * _;
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 at(t - y, n - b, t + y, n + b, s - h, c - g, s + h, c + g) < x * x;
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 Ye(e, t, n, r, i, a, o, s, c, l, u, d, f) {
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 ? Xe(t, n, r, i, a, s, c, l, u, d, f) : p && m ? Ze(e, t, n, r, i, a, o, s, c, l, u, d, f) : p ? Qe(s, c, l, u, d, e, t, n, r, i, a, f) : Qe(t, n, r, i, a, o, s, c, l, u, d, f) ? (f.x = -f.x, f.y = -f.y, !0) : !1;
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 Xe(e, t, n, r, i, a, o, s, c, l, u) {
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), et(y, b, u), !0;
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 Ze(e, t, n, r, i, a, o, s, c, l, u, d, f) {
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(at(t - m, n - h, t + m, n + h, s - _, c - v, s + _, c + v, z));
508
- return y > 0 ? (f.x = z.x / y, f.y = z.y / y, !0) : tt(t - s, n - c, f);
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 Qe(e, t, n, r, i, a, o, s, c, l, u, d) {
511
- let f = K(a, c, l), p = Math.cos(u) * f, m = Math.sin(u) * f, h = Math.sqrt(ot(o - p, s - m, o + p, s + m, e, t, n, r, i, z));
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 = $e(1, 0, b, x, S, C, w, T, E);
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 = $e(0, 1, b, x, S, C, w, T, E);
516
- O < D && (D = O, d.x = 0, d.y = 1), tt(-C, S, B) && (O = $e(B.x, B.y, b, x, S, C, w, T, E), O < D && (d.x = B.x, d.y = B.y)), et(b, x, d);
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 $e(e, t, n, r, i, a, o, s, c) {
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 et(e, t, n) {
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 tt(e, t, n) {
554
+ function lt(e, t, n) {
527
555
  let r = Math.sqrt(e * e + t * t);
528
- return r === 0 ? !1 : (n.x = e / r, n.y = t / r, !0);
556
+ return r !== 0 && (n.x = e / r, n.y = t / r, !0);
529
557
  }
530
- function nt(e, t, n) {
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 rt(e, t, n) {
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 it(e, t, n, r, i, a, o, s, c, l) {
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 at(e, t, n, r, i, a, o, s, c) {
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 ot(e, t, n, r, i, a, o, s, c, l) {
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 (!ct(v, y, b, x, f, p)) return l && (l.x = 0, l.y = 0), 0;
562
- if (!l) return Math.min(lt(v, y, f, p), lt(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));
563
- let S = lt(v, y, f, p, l);
564
- S = st(S, lt(b, x, f, p, B), B, l, !1), S = st(S, J(-f, -p, v, y, b, x, B), B, l, !0), S = st(S, J(f, -p, v, y, b, x, B), B, l, !0), S = st(S, J(f, p, v, y, b, x, B), B, l, !0), S = st(S, J(-f, p, v, y, b, x, B), B, l, !0);
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 st(e, t, n, r, i) {
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 ct(e, t, n, r, i, a) {
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 lt(e, t, n, r, i) {
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 ut(e, t, n, r, i) {
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 dt(e, t) {
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 ft(e, t) {
634
+ function bt(e, t) {
607
635
  t.spatialMapMemory = e.spatialMap.getSharedMemory();
608
636
  }
609
- function pt(e) {
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 mt = class extends e {
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, dt(e, n), dt(t, r)) : this.spatialIds;
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 && ut(X({
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
- }, ht = {
700
+ }, Ct = {
673
701
  min: 0,
674
702
  max: 0
675
- }, gt = {
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 _t(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
685
- return yt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !1);
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 vt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
688
- return Z.depth = Infinity, !yt(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);
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 yt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
691
- return !(e === 4 && (!t || !bt(t, n, r, i, a, o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || s === 4 && (!c || !bt(c, l, u, d, f, p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || e === 1 && !xt(o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || s === 1 && !xt(p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || Ot(e) && c && !St(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) || Ot(s) && t && !St(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));
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 bt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b) {
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 = Tt(e, a, t, r, i, S, C), E = Et(e, a, n, r, i, S, C), D = Tt(e, w, t, r, i, S, C);
697
- if (!Ct(E - Et(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;
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 xt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) {
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 Ct(g, _, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) && Ct(-_, g, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h);
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 St(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) {
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 = Tt(o, e, s, l, u, P, F), n = Et(o, e, c, l, u, P, F), r = Dt(A, j, M, N, t, n), i = A + (M - A) * r, a = j + (N - j) * r;
709
- if (!Ct(t - i, n - a, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E)) return !1;
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 Ct(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
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 /= _, wt(n, r, i, a, o, s, c, e, t, ht), wt(l, u, d, f, p, m, h, e, t, gt);
717
- let v = ht.max - gt.min, y = gt.max - ht.min;
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 wt(e, t, n, r, i, a, o, s, c, l) {
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 = Tt(t, e, n, i, a, f, p), u = Et(t, e, r, i, a, f, p), d = o * s + u * c;
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 Tt(e, t, n, r, i, a, o) {
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 Et(e, t, n, r, i, a, o) {
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 Dt(e, t, n, r, i, a) {
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 Ot(e) {
793
+ function It(e) {
766
794
  return e === 2 || e === 3;
767
795
  }
768
- function kt(e, t, n, r, i, a) {
769
- if (Lt(n, r, "Force"), Lt(i, a, "Impulse"), n === 0 && r === 0 && i === 0 && a === 0) return;
770
- let o = e.get(t) ?? It(), s = {
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
- Lt(s.forceX, s.forceY, "Accumulated force"), Lt(s.impulseX, s.impulseY, "Accumulated impulse"), e.set(t, s);
805
+ Gt(s.forceX, s.forceY, "Accumulated force"), Gt(s.impulseX, s.impulseY, "Accumulated impulse"), e.set(t, s);
778
806
  }
779
- function At(e, t, n) {
780
- Rt(n), !(n.velocityX === void 0 && n.velocityY === void 0) && e.set(t, {
781
- ...e.get(t) ?? It(),
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 jt(e, t) {
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 Ft(t, (e, t) => {
790
- let r = n.get(e) ?? It();
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 Mt(e, t, n, r) {
805
- let i = e.dynamicsCommands, a = i instanceof Float64Array ? i : void 0, o = Nt(i && !(i instanceof Float64Array) ? i : void 0, t), s = a ? Pt(a, t) : -1, c = n[2];
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 Nt(e, t) {
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 Pt(e, t) {
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 Ft(e, t) {
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 It() {
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 Lt(e, t, n) {
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 Rt(e) {
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 zt = 1e-4, Bt = 24, Vt = "collidable", Q = [], Ht = 2 ** 26, Ut = {
891
+ var qt = 1e-4, Jt = 24, Yt = "collidable", Q = [], Xt = 2 ** 26, Zt = {
864
892
  fraction: 1,
865
893
  blocking: Q
866
- }, Wt = class {
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, _ = Nt(a, n.entityId), v = i ? Pt(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);
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 * Ht + t : t * Ht + e;
902
- return this.resolved.has(n) ? !1 : (this.resolved.add(n), !0);
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 = qt(e);
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
- Jt(i, e, l, n, r, a) && t(a);
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 = qt(e);
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 = qt(e);
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 Gt(a, o.x, o.y, t, i);
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 = qt(e);
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 = qt(e);
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 ? Ut : this.refine(a, e, t, 0, Math.abs(t)), o = r.length === 0 ? Ut : this.refine(a, r, 0, n, Math.abs(n)), s = t * i.fraction, c = n * o.fraction;
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: Kt(i.blocking, o.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 = zt / i;
1021
- for (let i = 0; i < Bt && c - s > l; 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 > zt ? s : 0,
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) || Jt(e, r, i, t, n, a) && l.push(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 = zt / r;
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 > zt ? a : 0,
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 = Yt((s * n + c * r) / (i * i));
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 = zt / i;
1064
- for (let i = 0; i < Bt && a - o > s; 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 && (xe(t.components.body) || o(t));
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 Gt(e, t, n, r, i) {
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 ? vt(e.shape, e.polygon, t, n, e.width, e.height, e.angle, o, r.components.polygon, s, c, l, u, d, i) : Ye(e.shape, t, n, e.width, e.height, e.angle, o, s, c, l, u, d, i);
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 Kt(e, t) {
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 qt(e) {
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 (!(i === 4 && !c)) return {
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: be(t)
1146
+ ccd: xe(t)
1119
1147
  };
1120
1148
  }
1121
- function Jt(e, t, n, r, i, a) {
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 Xt(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);
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 Xt(3, void 0, (t + o) / 2, (n + s) / 2, g + h * 2, h * 2, _, l, a.components.polygon, u, d, f, p, m) ? !0 : Xt(e.shape, e.polygon, o, s, e.width, e.height, e.angle, l, a.components.polygon, u, d, f, p, m);
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 Yt(e) {
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 Xt(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]);
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 Xt(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
1138
- return e !== 4 && s !== 4 ? Je(e, n, r, i, a, o, s, l, u, d, f, p) : _t(e, t, n, r, i, a, o, s, c, l, u, d, f, p);
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 Zt = class {
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
- }, Qt = {
1210
+ }, sn = {
1183
1211
  x: 0,
1184
1212
  y: 0
1185
1213
  };
1186
- function $t(e, t, n = !1) {
1187
- !nn(e, n) && !nn(t, n) || rn(e, t) && an(e, t, Qt) && (tn(e, Qt.x, Qt.y, n), tn(t, -Qt.x, -Qt.y, n));
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 en(e, t, n) {
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 tn(e, t, n, r) {
1225
+ function un(e, t, n, r) {
1198
1226
  if (e.components.bounciness) {
1199
- en(e, t, n);
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 nn(e, t) {
1235
+ function dn(e, t) {
1208
1236
  return e.components.velocity !== void 0 && (t || e.components.bounciness !== void 0);
1209
1237
  }
1210
- function rn(e, t) {
1211
- return !sn(e.components.body) && !sn(t.components.body);
1238
+ function fn(e, t) {
1239
+ return !hn(e.components.body) && !hn(t.components.body);
1212
1240
  }
1213
- function an(e, t, n) {
1214
- let r = e.components.transform, i = t.components.transform, a = on(e.components.body), o = on(t.components.body);
1215
- return a === 4 || o === 4 ? vt(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) : Ye(a, r[0], r[1], r[2], r[3], r[4], o, i[0], i[1], i[2], i[3], i[4], n);
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 on(e) {
1245
+ function mn(e) {
1218
1246
  return e ? L(e) : 1;
1219
1247
  }
1220
- function sn(e) {
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 cn(e, t, n) {
1253
+ function gn(e, t, n) {
1226
1254
  if (!e.spatialMap && (!e.heap || !e.spatialMapMemory)) return;
1227
- let r = pt(e), i = X(n);
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 ln = "position-updated", un = {
1258
+ var _n = "position-updated", vn = {
1231
1259
  x: 0,
1232
1260
  y: 0
1233
1261
  };
1234
- function dn(e = {}) {
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 && xe(c.body)) {
1265
+ if (c.body !== void 0 && Ce(c.body)) {
1238
1266
  u.entityDied(r);
1239
1267
  return;
1240
1268
  }
1241
- let d = i ? pn(c, i) : 0;
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
- Mt(e, r, c.velocity, c.dynamics);
1275
+ Bt(e, r, c.velocity, c.dynamics);
1248
1276
  let h = c.velocity[0] * m, g = c.velocity[1] * m;
1249
- vn(p, c.transform, e.elapsedTime);
1277
+ En(p, c.transform, e);
1250
1278
  let _ = i ? s?.get(d) : o;
1251
1279
  if (!_) {
1252
- bn(r, c.transform, h, g, u, e.reportMoves), cn(e, r, c), yn(p, e.tick);
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 (bn(r, c.transform, y.moveX, y.moveY, u, e.reportMoves), cn(e, r, c), yn(p, e.tick), !(!_.hasBounciness && !a && !t)) {
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) && mn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
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) && mn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
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
- fn(e, c), e.dieAtImpact = (t, n) => {
1270
- gn(e, i ? s?.get(pn(t.components, i)) : o, t, n);
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 Wt(a, r, e.dynamicsCommands);
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 = pn(t.components, i);
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 Wt(n, r, e.dynamicsCommands));
1313
+ for (let [t, n] of l) s.set(t, new Qt(n, r, e.dynamicsCommands));
1286
1314
  }, l;
1287
1315
  }
1288
- function fn(e, t) {
1316
+ function bn(e, t) {
1289
1317
  let n = e, r = e.commandQueueId ?? 0, i = t.get(r);
1290
- i && (e.dynamicsCommands = jt(i, e.dynamicsCommands), t.delete(r));
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
- kt(a(), e, t, n, 0, 0);
1324
+ Lt(a(), e, t, n, 0, 0);
1297
1325
  }, n.queueImpulse = (e, t, n) => {
1298
- kt(a(), e, 0, 0, t, n);
1326
+ Lt(a(), e, 0, 0, t, n);
1299
1327
  }, n.queueVelocity = (e, t) => {
1300
- At(a(), e, t);
1328
+ Rt(a(), e, t);
1301
1329
  };
1302
1330
  }
1303
- function pn(e, t) {
1331
+ function xn(e, t) {
1304
1332
  let n = e[t.component];
1305
1333
  return n ? n[t.index] : 0;
1306
1334
  }
1307
- function mn(e, t, n, r, i, a, o, s, c, l) {
1308
- if ($t(n, r, c), !l) return;
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
- un.x = 0, un.y = 0, t.contactNormal(n, r, o, s, un), l(e, n, r, i, a, {
1311
- normalX: un.x,
1312
- normalY: un.y
1313
- }), hn(e, n.entityId, n.components, u), hn(e, r.entityId, r.components, d);
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 hn(e, t, n, r) {
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) && cn(e, t, n);
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 gn(e, t, n, r) {
1347
+ function wn(e, t, n, r) {
1320
1348
  let i = n.components.body;
1321
- if (!i || xe(i)) return;
1322
- Se(i);
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 _n(e, t, n, r, i) {
1367
+ function Tn(e, t, n, r, i) {
1340
1368
  let a = e.elapsedTime / 1e3, o = n.interpolation;
1341
- Mt(e, t, n.velocity, n.dynamics), vn(o, n.transform, e.elapsedTime), bn(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), cn(e, t, n), yn(o, e.tick);
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 vn(e, t, n) {
1344
- e && (a(e, 7, NaN), e[2] = t[0], e[3] = t[1], e[6] = n, e[8] += n);
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 yn(e, t) {
1347
- e && a(e, 7, t);
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 bn(e, t, n, r, i, a) {
1350
- n === 0 && r === 0 || (n !== 0 && c(t, 0, n, Infinity), r !== 0 && c(t, 1, r, Infinity), a !== !1 && i.emitSystemEvent(ln, e));
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 xn = 50, Sn = 1, Cn = class extends r {
1397
+ var Nn = 50, Pn = 1, Fn = class extends r {
1355
1398
  spatialWorld;
1356
1399
  pendingDynamicsCommands = /* @__PURE__ */ new Map();
1357
- commandQueueId = Sn++;
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 ?? _n, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = n === _n || n.physics?.dynamics === !0, o = n.physics?.group, s = [];
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 ? { [Vt]: {
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 = wn(t.scope, t.filter);
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 || Ke(e, {
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
- At(this.pendingDynamicsCommands, n, t);
1459
+ Rt(this.pendingDynamicsCommands, n, t);
1410
1460
  }
1411
1461
  addDataToWorld(e) {
1412
- e.tick = ++this.tick, ft(this.spatialWorld, e), e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0, e.skipGroup = this.skipGroup, e.commandQueueId = this.commandQueueId, e.dynamicsCommands = this.snapshotDynamicsCommands();
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
- kt(this.pendingDynamicsCommands, a, t, n, r, i);
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 wn(e, t) {
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 Tn = 1.5, En = .5, Dn = (e, t, n) => {
1438
- let r = n.interpolation, a = n.transform, o = i(r, 7), s = r[6], c = r[8], l = a[0], u = a[1], d = i(r, 7);
1439
- if (o !== d) return;
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[4] = 1, r[5] = d, r[9] = c, r[10] = 0, r[0] = l, r[1] = u;
1499
+ r[2] = d, r[6] = c, r[7] = 0, r[0] = l, r[1] = u;
1442
1500
  return;
1443
1501
  }
1444
- let f = r[4], p = r[10];
1445
- if (d !== r[5]) {
1446
- let e = r[9], t = c >= e ? c - e : s;
1447
- p += t, r[9] = c, f = 0, r[5] = d;
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 (f += e.elapsedTime / s, f > 1 && (f = 1), r[4] = f, p <= 0) {
1450
- r[10] = 0, r[0] = l, r[1] = u;
1507
+ if (m <= 0) {
1508
+ r[7] = 0, r[0] = l, r[1] = u;
1451
1509
  return;
1452
1510
  }
1453
- let m = Math.min(Math.max(e.elapsedTime, 0), p), h = s * Tn, g = p - m;
1454
- g > h && (m += Math.min(g - h, m * En));
1455
- let _ = m / p, v = r[0], y = r[1];
1456
- r[0] = v + (l - v) * _, r[1] = y + (u - y) * _, r[10] = p - m;
1457
- }, On = class extends r {
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: Dn,
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, De as BOUNCINESS_INDEX, Oe as BOUNCINESS_SIZE, Vt as COLLIDABLE_QUERY, Wt as CollisionBroadphase, le as DEFAULT_COLLIDE_CATEGORY, ue as DEFAULT_COLLIDE_MASK, xn 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, Le as INTERPOLATION_DURATION_INDEX, Ne as INTERPOLATION_PREV_X_INDEX, Pe as INTERPOLATION_PREV_Y_INDEX, Fe as INTERPOLATION_PROGRESS_INDEX, Ve as INTERPOLATION_REMAINING_DURATION_INDEX, He as INTERPOLATION_SIZE, Be as INTERPOLATION_SYNCED_DURATION_INDEX, Ie as INTERPOLATION_SYNCED_TICK_INDEX, Re as INTERPOLATION_TICK_INDEX, ze as INTERPOLATION_TOTAL_DURATION_INDEX, je as INTERPOLATION_X_INDEX, Me as INTERPOLATION_Y_INDEX, On as InterpolationSystem, l as MAX_POLYGON_VERTICES, f as POLYGON_SIZE, u as POLYGON_VERTEX_COUNT_INDEX, d as POLYGON_VERTICES_INDEX, ln as POSITION_UPDATED_EVENT, mt as PhysicalWorld, Cn as PhysicsSystem, oe as SHAPE_CAPSULE, ae as SHAPE_CIRCLE, se as SHAPE_POLYGON, ie as SHAPE_RECTANGLE, Zt 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, ft as addPhysicalWorldData, we as bodyDefinition, L as bodyShape, Ae as bouncinessDefinition, rt as boundsHalfHeight, nt as boundsHalfWidth, de as canCollide, V as capsuleHalfLength, Ye as contactNormal, dn as createPhysicsUpdate, te as dynamicsDefinition, pt as getSpatialMap, Mt as integrateDynamics, We as interpolationDefinition, Dn as interpolationUpdate, be as isContinuous, xe as isDying, R as isSensor, Se as markDying, it as orientedBoxesOverlap, qe as physicsRegistry, _n as physicsUpdate, J as pointSegmentDistanceSquared, vt as polygonContactNormal, m as polygonDefinition, _t as polygonShapesOverlap, h as preparePolygon, ot as segmentBoxDistanceSquared, at as segmentSegmentDistanceSquared, G as shapeHalfHeight, W as shapeHalfWidth, U as shapeIsEmpty, H as shapeRadius, Je as shapesOverlap, Ge as snapEntity, Ke as startSpawnInterpolation, T as transformDefinition, cn as updateSpatialMap, j as velocityDefinition };
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