@daneren2005/shared-memory-physics 1.7.3 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +15 -0
  2. package/dist/actions/add-physical-world-data.d.ts +2 -0
  3. package/dist/actions/combine-dynamics-commands.d.ts +2 -0
  4. package/dist/{systems/dynamics.d.ts → actions/dynamics-commands.d.ts} +1 -7
  5. package/dist/actions/find-dynamics-command-offset.d.ts +2 -0
  6. package/dist/actions/find-dynamics-command.d.ts +2 -0
  7. package/dist/actions/get-spatial-map.d.ts +3 -0
  8. package/dist/actions/integrate-dynamics.d.ts +3 -0
  9. package/dist/actions/queue-dynamics-vector.d.ts +2 -0
  10. package/dist/actions/queue-velocity-assignment.d.ts +2 -0
  11. package/dist/actions/set-entity-position.d.ts +7 -0
  12. package/dist/actions/snap-entity.d.ts +9 -0
  13. package/dist/actions/start-spawn-interpolation.d.ts +16 -0
  14. package/dist/actions/update-spatial-map.d.ts +3 -0
  15. package/dist/components/body-component-constants.d.ts +15 -0
  16. package/dist/components/body-component.d.ts +0 -15
  17. package/dist/components/bounciness-component-constants.d.ts +2 -0
  18. package/dist/components/bounciness-component.d.ts +0 -2
  19. package/dist/components/dynamics-component-constants.d.ts +4 -0
  20. package/dist/components/dynamics-component.d.ts +0 -4
  21. package/dist/components/interpolation-component-constants.d.ts +18 -0
  22. package/dist/components/interpolation-component.d.ts +0 -40
  23. package/dist/components/polygon-component-constants.d.ts +4 -0
  24. package/dist/components/polygon-component.d.ts +0 -4
  25. package/dist/components/transform-component-constants.d.ts +6 -0
  26. package/dist/components/transform-component.d.ts +0 -6
  27. package/dist/components/velocity-component-constants.d.ts +4 -0
  28. package/dist/components/velocity-component.d.ts +0 -4
  29. package/dist/constants.d.ts +5 -0
  30. package/dist/index.d.ts +24 -15
  31. package/dist/index.js +395 -360
  32. package/dist/index.js.map +1 -1
  33. package/dist/systems/collision.d.ts +1 -2
  34. package/dist/systems/interpolation-update.d.ts +0 -2
  35. package/dist/systems/physics-system.d.ts +4 -5
  36. package/dist/systems/physics-update.d.ts +2 -5
  37. package/dist/world.d.ts +0 -2
  38. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3,24 +3,24 @@ import { loadFloat32 as i, storeFloat32 as a } from "@daneren2005/shared-memory-
3
3
  import o from "@daneren2005/shared-memory-objects/spatial/shared-spatial-map";
4
4
  import s from "flatbush";
5
5
  import { addAtomicFloat32 as c } from "@daneren2005/shared-memory-objects/utils/atomic-math";
6
- //#region src/components/polygon-component.ts
7
- var l = 16, u = 0, d = 1, f = 33, p = class extends t {
6
+ //#region src/constants.ts
7
+ var l = "position-updated", u = "collidable", d = 50, f = 1.5, p = .5, m = 0, h = 1, g = 2, _ = 3, v = 4, y = 5, b = 16, x = 0, S = 1, C = 33, w = class extends t {
8
8
  get vertexCount() {
9
9
  return this.block[0];
10
10
  }
11
- }, m = {
11
+ }, T = {
12
12
  type: Float32Array,
13
13
  size: 33,
14
14
  loadProperties: ["vertices"],
15
15
  toBlock(e) {
16
- let t = h(e.vertices, e.width, e.height);
16
+ let t = E(e.vertices, e.width, e.height);
17
17
  return [t.vertices.length / 2, ...t.vertices];
18
18
  },
19
19
  attach(e, t, n) {
20
- return new p(t.getBlock(n), n);
20
+ return new w(t.getBlock(n), n);
21
21
  }
22
22
  };
23
- function h(e, t, n) {
23
+ function E(e, t, n) {
24
24
  if (!e || e.length < 3 || e.length > 16) throw Error("A polygon needs between 3 and 16 vertices");
25
25
  let r = Infinity, i = Infinity, a = -Infinity, o = -Infinity;
26
26
  for (let [t, n] of e) {
@@ -42,7 +42,7 @@ function h(e, t, n) {
42
42
  for (let i = t + 1; i < e.length; i++) {
43
43
  if (i === t || i === t + 1 || t === 0 && i === e.length - 1) continue;
44
44
  let a = e[i], o = e[(i + 1) % e.length];
45
- if (g(n, r, a, o)) throw Error("Polygon edges cannot cross or share non-adjacent vertices");
45
+ if (D(n, r, a, o)) throw Error("Polygon edges cannot cross or share non-adjacent vertices");
46
46
  }
47
47
  }
48
48
  if (t === void 0 != (n === void 0)) throw Error("A sized polygon needs both a width and a height");
@@ -51,24 +51,24 @@ function h(e, t, n) {
51
51
  if (!(t > 0) || !(n > 0)) throw Error("A sized polygon needs a positive width and height");
52
52
  if (r < -t / 2 || a > t / 2 || i < -n / 2 || o > n / 2) throw Error("Polygon vertices must fit inside the width and height they are given with");
53
53
  }
54
- let d = u ? t : s, f = u ? n : c, p = u ? 0 : (r + a) / 2, m = u ? 0 : (i + o) / 2, h = [], _ = l > 0 ? e : e.toReversed();
55
- for (let [e, t] of _) h.push((e - p) / d, (t - m) / f);
54
+ let d = u ? t : s, f = u ? n : c, p = u ? 0 : (r + a) / 2, m = u ? 0 : (i + o) / 2, h = [], g = l > 0 ? e : e.toReversed();
55
+ for (let [e, t] of g) h.push((e - p) / d, (t - m) / f);
56
56
  return {
57
57
  width: d,
58
58
  height: f,
59
59
  vertices: h
60
60
  };
61
61
  }
62
- function g(e, t, n, r) {
63
- let i = _(e, t, n), a = _(e, t, r), o = _(n, r, e), s = _(n, r, t);
62
+ function D(e, t, n, r) {
63
+ let i = O(e, t, n), a = O(e, t, r), o = O(n, r, e), s = O(n, r, t);
64
64
  return i * a <= 0 && o * s <= 0;
65
65
  }
66
- function _(e, t, n) {
66
+ function O(e, t, n) {
67
67
  return (t[0] - e[0]) * (n[1] - e[1]) - (t[1] - e[1]) * (n[0] - e[0]);
68
68
  }
69
69
  //#endregion
70
70
  //#region src/components/transform-component.ts
71
- var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
71
+ var k = class extends t {
72
72
  get x() {
73
73
  return this.block[0];
74
74
  }
@@ -99,7 +99,7 @@ var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
99
99
  set angle(e) {
100
100
  this.block[4] = e;
101
101
  }
102
- }, T = {
102
+ }, A = {
103
103
  type: Float32Array,
104
104
  size: 5,
105
105
  loadProperties: [
@@ -112,7 +112,7 @@ var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
112
112
  let t = e.radius, n = e.vertices, r = e.width, i = e.height;
113
113
  if (n !== void 0) {
114
114
  if (t !== void 0) throw Error("A transform takes polygon vertices or a radius, not both");
115
- let e = h(n, r, i);
115
+ let e = E(n, r, i);
116
116
  r = e.width, i = e.height;
117
117
  }
118
118
  if (t !== void 0) {
@@ -128,7 +128,7 @@ var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
128
128
  ];
129
129
  },
130
130
  attach(e, t, n) {
131
- return new w(t.getBlock(n), n);
131
+ return new k(t.getBlock(n), n);
132
132
  },
133
133
  save(e) {
134
134
  let t = {
@@ -137,7 +137,7 @@ var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
137
137
  }, n = e.angle;
138
138
  return n !== 0 && (t.angle = n), t;
139
139
  }
140
- }, E = 0, D = 1, O = 2, k = 3, A = class extends t {
140
+ }, j = 0, M = 1, N = 2, P = 3, ee = class extends t {
141
141
  get velocityX() {
142
142
  return this.block[0];
143
143
  }
@@ -154,9 +154,9 @@ var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
154
154
  return this.block[2];
155
155
  }
156
156
  set damping(e) {
157
- M(e), this.block[2] = e;
157
+ I(e), this.block[2] = e;
158
158
  }
159
- }, j = {
159
+ }, F = {
160
160
  type: Float32Array,
161
161
  size: 3,
162
162
  loadProperties: [
@@ -166,14 +166,14 @@ var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
166
166
  ],
167
167
  toBlock(e) {
168
168
  let t = e.damping ?? 0;
169
- return M(t), [
169
+ return I(t), [
170
170
  e.velocityX ?? 0,
171
171
  e.velocityY ?? 0,
172
172
  t
173
173
  ];
174
174
  },
175
175
  attach(e, t, n) {
176
- return new A(t.getBlock(n), n);
176
+ return new ee(t.getBlock(n), n);
177
177
  },
178
178
  save(e) {
179
179
  return {
@@ -183,31 +183,31 @@ var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
183
183
  };
184
184
  }
185
185
  };
186
- function M(e) {
186
+ function I(e) {
187
187
  if (!Number.isFinite(e) || e < 0) throw Error("Damping must be a finite number of at least zero");
188
188
  }
189
189
  //#endregion
190
- //#region src/components/dynamics-component.ts
191
- var N = 0, P = 1, ee = 2, F = 3, I = class extends t {
190
+ //#region src/components/dynamics-component-constants.ts
191
+ var te = 0, ne = 1, re = 2, ie = 3, ae = class extends t {
192
192
  get accelerationX() {
193
193
  return this.block[0];
194
194
  }
195
195
  set accelerationX(e) {
196
- re(e, "Acceleration"), this.block[0] = e;
196
+ ce(e, "Acceleration"), this.block[0] = e;
197
197
  }
198
198
  get accelerationY() {
199
199
  return this.block[1];
200
200
  }
201
201
  set accelerationY(e) {
202
- re(e, "Acceleration"), this.block[1] = e;
202
+ ce(e, "Acceleration"), this.block[1] = e;
203
203
  }
204
204
  get mass() {
205
205
  return 1 / this.block[2];
206
206
  }
207
207
  set mass(e) {
208
- ne(e), this.block[2] = 1 / e;
208
+ se(e), this.block[2] = 1 / e;
209
209
  }
210
- }, te = {
210
+ }, oe = {
211
211
  type: Float32Array,
212
212
  size: 3,
213
213
  loadProperties: [
@@ -217,14 +217,14 @@ var N = 0, P = 1, ee = 2, F = 3, I = class extends t {
217
217
  ],
218
218
  toBlock(e) {
219
219
  let t = e.accelerationX ?? 0, n = e.accelerationY ?? 0, r = e.mass ?? 1;
220
- return re(t, "Acceleration"), re(n, "Acceleration"), ne(r), [
220
+ return ce(t, "Acceleration"), ce(n, "Acceleration"), se(r), [
221
221
  t,
222
222
  n,
223
223
  1 / r
224
224
  ];
225
225
  },
226
226
  attach(e, t, n) {
227
- return new I(t.getBlock(n), n);
227
+ return new ae(t.getBlock(n), n);
228
228
  },
229
229
  save(e) {
230
230
  return {
@@ -234,43 +234,42 @@ var N = 0, P = 1, ee = 2, F = 3, I = class extends t {
234
234
  };
235
235
  }
236
236
  };
237
- function ne(e) {
237
+ function se(e) {
238
238
  if (!Number.isFinite(e) || e <= 0) throw Error("Mass must be a finite number greater than zero");
239
239
  }
240
- function re(e, t) {
240
+ function ce(e, t) {
241
241
  if (!Number.isFinite(e)) throw Error(`${t} must be a finite number`);
242
242
  }
243
243
  //#endregion
244
- //#region src/components/body-component.ts
245
- var ie = 1, ae = 2, oe = 3, se = 4, ce = [
244
+ //#region src/components/body-component-constants.ts
245
+ var le = 1, ue = 2, de = 3, fe = 4, pe = 1, me = 4294967295, he = 0, ge = 1, _e = 2, ve = 3, ye = 7, be = 8, xe = 16, Se = 32, Ce = 64, we = [
246
246
  1,
247
247
  2,
248
248
  3,
249
249
  4
250
- ], le = 1, ue = 4294967295;
251
- function de(e, t, n, r) {
250
+ ];
251
+ function Te(e, t, n, r) {
252
252
  return (t & n) !== 0 && (r & e) !== 0;
253
253
  }
254
- var fe = 0, pe = 1, me = 2, he = 3, ge = 7, _e = 8, ve = 16, ye = 32, be = 64;
255
254
  function L(e) {
256
255
  return e[0] & 7;
257
256
  }
258
257
  function R(e) {
259
258
  return !!(e[0] & 8);
260
259
  }
261
- function xe(e) {
260
+ function Ee(e) {
262
261
  return !!(e[0] & 16);
263
262
  }
264
- function Se(e) {
263
+ function De(e) {
265
264
  return !!(e[0] & 64);
266
265
  }
267
- function Ce(e) {
266
+ function Oe(e) {
268
267
  return !!(e[0] & 32);
269
268
  }
270
- function we(e) {
269
+ function ke(e) {
271
270
  e[0] |= 32;
272
271
  }
273
- var Te = class extends t {
272
+ var Ae = class extends t {
274
273
  get shape() {
275
274
  return this.block[0] & 7;
276
275
  }
@@ -307,7 +306,7 @@ var Te = class extends t {
307
306
  set blocksPath(e) {
308
307
  this.block[0] = e ? this.block[0] | 64 : this.block[0] & -65;
309
308
  }
310
- }, Ee = {
309
+ }, je = {
311
310
  type: Uint32Array,
312
311
  size: 3,
313
312
  loadProperties: [
@@ -324,36 +323,36 @@ var Te = class extends t {
324
323
  ],
325
324
  toBlock(e) {
326
325
  return [
327
- De(e),
326
+ Me(e),
328
327
  e.collideCategory ?? 1,
329
328
  e.collideMask ?? 4294967295
330
329
  ];
331
330
  },
332
331
  attach(e, t, n) {
333
- return new Te(t.getBlock(n), n);
332
+ return new Ae(t.getBlock(n), n);
334
333
  }
335
334
  };
336
- function De(e) {
337
- let t = Oe(e);
335
+ function Me(e) {
336
+ let t = Ne(e);
338
337
  return e.sensor && (t |= 8), e.continuousCollisionDetection && (t |= 16), e.blocksPath && (t |= 64), t;
339
338
  }
340
- function Oe(e) {
339
+ function Ne(e) {
341
340
  let t = e.shape;
342
341
  if (t === void 0) return e.vertices === void 0 ? e.radius === void 0 ? 1 : 2 : 4;
343
- if (!ce.includes(t)) throw Error(`Unknown body shape: ${t}`);
342
+ if (!we.includes(t)) throw Error(`Unknown body shape: ${t}`);
344
343
  if (t === 4 && e.vertices === void 0) throw Error("A polygon body requires vertices");
345
344
  return t;
346
345
  }
347
346
  //#endregion
348
- //#region src/components/bounciness-component.ts
349
- var ke = 0, Ae = 1, je = class extends t {
347
+ //#region src/components/bounciness-component-constants.ts
348
+ var Pe = 0, Fe = 1, Ie = class extends t {
350
349
  get bounciness() {
351
350
  return this.block[0];
352
351
  }
353
352
  set bounciness(e) {
354
353
  this.block[0] = e;
355
354
  }
356
- }, Me = {
355
+ }, Le = {
357
356
  type: Float32Array,
358
357
  size: 1,
359
358
  loadProperties: ["bounciness"],
@@ -361,9 +360,9 @@ var ke = 0, Ae = 1, je = class extends t {
361
360
  return [e.bounciness ?? 0];
362
361
  },
363
362
  attach(e, t, n) {
364
- return new je(t.getBlock(n), n);
363
+ return new Ie(t.getBlock(n), n);
365
364
  }
366
- }, 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 {
365
+ }, Re = 0, ze = 1, Be = 2, Ve = 3, He = 4, Ue = 5, We = 6, Ge = 7, Ke = 8, qe = 9, Je = 10, Ye = 11, Xe = 12, Ze = 13, Qe = 14, $e = 15, et = 16, tt = 17, nt = class extends t {
367
366
  get x() {
368
367
  return this.block[0];
369
368
  }
@@ -442,7 +441,7 @@ var ke = 0, Ae = 1, je = class extends t {
442
441
  set remainingDuration(e) {
443
442
  this.block[7] = e;
444
443
  }
445
- }, Qe = {
444
+ }, rt = {
446
445
  type: Float32Array,
447
446
  size: 17,
448
447
  loadProperties: ["interpolate"],
@@ -469,29 +468,16 @@ var ke = 0, Ae = 1, je = class extends t {
469
468
  ];
470
469
  },
471
470
  attach(e, t, n) {
472
- return new Ze(t.getBlock(n), n);
473
- }
474
- };
475
- function $e(e) {
476
- let { transform: t, interpolation: n } = e.components;
477
- 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);
478
- }
479
- function et(e, t) {
480
- let { transform: n, velocity: r, interpolation: i } = e.components;
481
- if (!n || !r || !i) return;
482
- 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;
483
- 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;
484
- }
485
- //#endregion
486
- //#region src/components/registry.ts
487
- var tt = {
488
- transform: T,
489
- velocity: j,
490
- body: Ee,
491
- polygon: m,
492
- bounciness: Me,
493
- dynamics: te,
494
- interpolation: Qe
471
+ return new nt(t.getBlock(n), n);
472
+ }
473
+ }, it = {
474
+ transform: A,
475
+ velocity: F,
476
+ body: je,
477
+ polygon: T,
478
+ bounciness: Le,
479
+ dynamics: oe,
480
+ interpolation: rt
495
481
  }, z = {
496
482
  x: 0,
497
483
  y: 0
@@ -511,66 +497,66 @@ function U(e, t, n) {
511
497
  function W(e, t, n) {
512
498
  return e === 2 ? t <= 0 : t <= 0 || n <= 0;
513
499
  }
514
- function nt(e, t, n, r) {
515
- return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(H(t, n, r))) * V(t, n) + Math.min(t, n) / 2 : pt(t, n, r);
500
+ function at(e, t, n, r) {
501
+ return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(H(t, n, r))) * V(t, n) + Math.min(t, n) / 2 : gt(t, n, r);
516
502
  }
517
- function rt(e, t, n, r) {
518
- return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(H(t, n, r))) * V(t, n) + Math.min(t, n) / 2 : mt(t, n, r);
503
+ function ot(e, t, n, r) {
504
+ return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(H(t, n, r))) * V(t, n) + Math.min(t, n) / 2 : _t(t, n, r);
519
505
  }
520
- function it(e, t, n, r, i, a, o, s, c, l, u, d) {
506
+ function st(e, t, n, r, i, a, o, s, c, l, u, d) {
521
507
  if (W(e, r, i) || W(o, l, u)) return !1;
522
508
  let f = e !== 1, p = o !== 1;
523
- if (!f && !p) return ht(t, n, r, i, a, s, c, l, u, d);
524
- if (f && !p) return it(o, s, c, l, u, d, e, t, n, r, i, a);
525
- let m = at(o, l, u), h = H(l, u, d), g = Math.cos(h) * m, _ = Math.sin(h) * m, v = U(o, l, u);
526
- if (!f) return _t(s - g, c - _, s + g, c + _, t, n, r, i, a) < v * v;
527
- let y = at(e, r, i), b = H(r, i, a), x = Math.cos(b) * y, S = Math.sin(b) * y, C = U(e, r, i) + v;
528
- return gt(t - x, n - S, t + x, n + S, s - g, c - _, s + g, c + _) < C * C;
529
- }
530
- function at(e, t, n) {
509
+ if (!f && !p) return vt(t, n, r, i, a, s, c, l, u, d);
510
+ if (f && !p) return st(o, s, c, l, u, d, e, t, n, r, i, a);
511
+ let m = ct(o, l, u), h = H(l, u, d), g = Math.cos(h) * m, _ = Math.sin(h) * m, v = U(o, l, u);
512
+ if (!f) return bt(s - g, c - _, s + g, c + _, t, n, r, i, a) < v * v;
513
+ let y = ct(e, r, i), b = H(r, i, a), x = Math.cos(b) * y, S = Math.sin(b) * y, C = U(e, r, i) + v;
514
+ return yt(t - x, n - S, t + x, n + S, s - g, c - _, s + g, c + _) < C * C;
515
+ }
516
+ function ct(e, t, n) {
531
517
  return e === 3 ? V(t, n) : 0;
532
518
  }
533
- function ot(e, t, n, r, i, a, o, s, c, l, u, d, f) {
519
+ function lt(e, t, n, r, i, a, o, s, c, l, u, d, f) {
534
520
  let p = e !== 1, m = o !== 1;
535
- return !p && !m ? st(t, n, r, i, a, s, c, l, u, d, f) : p && m ? ct(e, t, n, r, i, a, o, s, c, l, u, d, f) : p ? lt(s, c, l, u, d, e, t, n, r, i, a, f) : lt(t, n, r, i, a, o, s, c, l, u, d, f) ? (f.x = -f.x, f.y = -f.y, !0) : !1;
521
+ return !p && !m ? ut(t, n, r, i, a, s, c, l, u, d, f) : p && m ? dt(e, t, n, r, i, a, o, s, c, l, u, d, f) : p ? ft(s, c, l, u, d, e, t, n, r, i, a, f) : ft(t, n, r, i, a, o, s, c, l, u, d, f) ? (f.x = -f.x, f.y = -f.y, !0) : !1;
536
522
  }
537
- function st(e, t, n, r, i, a, o, s, c, l, u) {
523
+ function ut(e, t, n, r, i, a, o, s, c, l, u) {
538
524
  let d = Math.cos(i), f = Math.sin(i), p = Math.cos(l), m = Math.sin(l), h = n / 2, g = r / 2, _ = s / 2, v = c / 2, y = e - a, b = t - o, x = G(d, f, y, b, h, g, d, f, _, v, p, m);
539
525
  u.x = d, u.y = f;
540
526
  let S = G(-f, d, y, b, h, g, d, f, _, v, p, m);
541
- return S < x && (x = S, u.x = -f, u.y = d), S = G(p, m, y, b, h, g, d, f, _, v, p, m), S < x && (x = S, u.x = p, u.y = m), S = G(-m, p, y, b, h, g, d, f, _, v, p, m), S < x && (u.x = -m, u.y = p), dt(y, b, u), !0;
527
+ return S < x && (x = S, u.x = -f, u.y = d), S = G(p, m, y, b, h, g, d, f, _, v, p, m), S < x && (x = S, u.x = p, u.y = m), S = G(-m, p, y, b, h, g, d, f, _, v, p, m), S < x && (u.x = -m, u.y = p), mt(y, b, u), !0;
542
528
  }
543
- function ct(e, t, n, r, i, a, o, s, c, l, u, d, f) {
544
- let p = at(e, r, i), m = H(r, i, a), h = Math.cos(m) * p, g = Math.sin(m) * p, _ = at(o, l, u), v = H(l, u, d), y = Math.cos(v) * _, b = Math.sin(v) * _, x = Math.sqrt(gt(t - h, n - g, t + h, n + g, s - y, c - b, s + y, c + b, z));
545
- return x > 0 ? (f.x = z.x / x, f.y = z.y / x, !0) : ft(t - s, n - c, f);
529
+ function dt(e, t, n, r, i, a, o, s, c, l, u, d, f) {
530
+ let p = ct(e, r, i), m = H(r, i, a), h = Math.cos(m) * p, g = Math.sin(m) * p, _ = ct(o, l, u), v = H(l, u, d), y = Math.cos(v) * _, b = Math.sin(v) * _, x = Math.sqrt(yt(t - h, n - g, t + h, n + g, s - y, c - b, s + y, c + b, z));
531
+ return x > 0 ? (f.x = z.x / x, f.y = z.y / x, !0) : ht(t - s, n - c, f);
546
532
  }
547
- function lt(e, t, n, r, i, a, o, s, c, l, u, d) {
548
- let f = at(a, c, l), p = H(c, l, u), m = Math.cos(p) * f, h = Math.sin(p) * f, g = Math.sqrt(_t(o - m, s - h, o + m, s + h, e, t, n, r, i, z));
533
+ function ft(e, t, n, r, i, a, o, s, c, l, u, d) {
534
+ let f = ct(a, c, l), p = H(c, l, u), m = Math.cos(p) * f, h = Math.sin(p) * f, g = Math.sqrt(bt(o - m, s - h, o + m, s + h, e, t, n, r, i, z));
549
535
  if (g > 0) return d.x = z.x / g, d.y = z.y / g, !0;
550
- let _ = Math.cos(i), v = Math.sin(i), y = o - e, b = s - t, x = y * _ + b * v, S = -y * v + b * _, C = m * _ + h * v, w = -m * v + h * _, T = U(a, c, l), E = n / 2, D = r / 2, O = ut(1, 0, x, S, C, w, T, E, D);
536
+ let _ = Math.cos(i), v = Math.sin(i), y = o - e, b = s - t, x = y * _ + b * v, S = -y * v + b * _, C = m * _ + h * v, w = -m * v + h * _, T = U(a, c, l), E = n / 2, D = r / 2, O = pt(1, 0, x, S, C, w, T, E, D);
551
537
  d.x = 1, d.y = 0;
552
- let k = ut(0, 1, x, S, C, w, T, E, D);
553
- k < O && (O = k, d.x = 0, d.y = 1), ft(-w, C, B) && (k = ut(B.x, B.y, x, S, C, w, T, E, D), k < O && (d.x = B.x, d.y = B.y)), dt(x, S, d);
538
+ let k = pt(0, 1, x, S, C, w, T, E, D);
539
+ k < O && (O = k, d.x = 0, d.y = 1), ht(-w, C, B) && (k = pt(B.x, B.y, x, S, C, w, T, E, D), k < O && (d.x = B.x, d.y = B.y)), mt(x, S, d);
554
540
  let A = d.x, j = d.y;
555
541
  return d.x = A * _ - j * v, d.y = A * v + j * _, !0;
556
542
  }
557
- function ut(e, t, n, r, i, a, o, s, c) {
543
+ function pt(e, t, n, r, i, a, o, s, c) {
558
544
  return s * Math.abs(e) + c * Math.abs(t) + (Math.abs(i * e + a * t) + o) - Math.abs(n * e + r * t);
559
545
  }
560
- function dt(e, t, n) {
546
+ function mt(e, t, n) {
561
547
  e * n.x + t * n.y < 0 && (n.x = -n.x, n.y = -n.y);
562
548
  }
563
- function ft(e, t, n) {
549
+ function ht(e, t, n) {
564
550
  let r = Math.sqrt(e * e + t * t);
565
551
  return r !== 0 && (n.x = e / r, n.y = t / r, !0);
566
552
  }
567
- function pt(e, t, n) {
553
+ function gt(e, t, n) {
568
554
  return (Math.abs(Math.cos(n)) * e + Math.abs(Math.sin(n)) * t) / 2;
569
555
  }
570
- function mt(e, t, n) {
556
+ function _t(e, t, n) {
571
557
  return (Math.abs(Math.sin(n)) * e + Math.abs(Math.cos(n)) * t) / 2;
572
558
  }
573
- function ht(e, t, n, r, i, a, o, s, c, l) {
559
+ function vt(e, t, n, r, i, a, o, s, c, l) {
574
560
  if (n <= 0 || r <= 0 || s <= 0 || c <= 0) return !1;
575
561
  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;
576
562
  return G(u, d, v, y, m, h, u, d, g, _, f, p) > 0 && G(-d, u, v, y, m, h, u, d, g, _, f, p) > 0 && G(f, p, v, y, m, h, u, d, g, _, f, p) > 0 && G(-p, f, v, y, m, h, u, d, g, _, f, p) > 0;
@@ -578,7 +564,7 @@ function ht(e, t, n, r, i, a, o, s, c, l) {
578
564
  function G(e, t, n, r, i, a, o, s, c, l, u, d) {
579
565
  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);
580
566
  }
581
- function gt(e, t, n, r, i, a, o, s, c) {
567
+ function yt(e, t, n, r, i, a, o, s, c) {
582
568
  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;
583
569
  if (h <= 0 && g <= 0) return c && (c.x = p, c.y = m), p * p + m * m;
584
570
  if (h <= 0) y = J(_ / g);
@@ -593,12 +579,12 @@ function gt(e, t, n, r, i, a, o, s, c) {
593
579
  let b = e + l * v - (i + d * y), x = t + u * v - (a + f * y);
594
580
  return c && (c.x = b, c.y = x), b * b + x * x;
595
581
  }
596
- function _t(e, t, n, r, i, a, o, s, c, l) {
582
+ function bt(e, t, n, r, i, a, o, s, c, l) {
597
583
  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;
598
- if (!vt(v, y, b, x, f, p)) return l && (l.x = 0, l.y = 0), 0;
599
- if (!l) return Math.min(yt(v, y, f, p), yt(b, x, f, p), q(-f, -p, v, y, b, x), q(f, -p, v, y, b, x), q(f, p, v, y, b, x), q(-f, p, v, y, b, x));
600
- let S = yt(v, y, f, p, l);
601
- S = K(S, yt(b, x, f, p, B), B, l, !1), S = K(S, q(-f, -p, v, y, b, x, B), B, l, !0), S = K(S, q(f, -p, v, y, b, x, B), B, l, !0), S = K(S, q(f, p, v, y, b, x, B), B, l, !0), S = K(S, q(-f, p, v, y, b, x, B), B, l, !0);
584
+ if (!xt(v, y, b, x, f, p)) return l && (l.x = 0, l.y = 0), 0;
585
+ if (!l) return Math.min(St(v, y, f, p), St(b, x, f, p), q(-f, -p, v, y, b, x), q(f, -p, v, y, b, x), q(f, p, v, y, b, x), q(-f, p, v, y, b, x));
586
+ let S = St(v, y, f, p, l);
587
+ S = K(S, St(b, x, f, p, B), B, l, !1), S = K(S, q(-f, -p, v, y, b, x, B), B, l, !0), S = K(S, q(f, -p, v, y, b, x, B), B, l, !0), S = K(S, q(f, p, v, y, b, x, B), B, l, !0), S = K(S, q(-f, p, v, y, b, x, B), B, l, !0);
602
588
  let C = l.x, w = l.y;
603
589
  return l.x = C * u - w * d, l.y = C * d + w * u, S;
604
590
  }
@@ -609,12 +595,12 @@ function q(e, t, n, r, i, a, o) {
609
595
  let s = i - n, c = a - r, l = s * s + c * c, u = l > 0 ? J(((e - n) * s + (t - r) * c) / l) : 0, d = e - (n + s * u), f = t - (r + c * u);
610
596
  return o && (o.x = d, o.y = f), d * d + f * f;
611
597
  }
612
- function vt(e, t, n, r, i, a) {
598
+ function xt(e, t, n, r, i, a) {
613
599
  if (Math.max(e, n) < -i || Math.min(e, n) > i || Math.max(t, r) < -a || Math.min(t, r) > a) return !0;
614
600
  let o = -(r - t), s = n - e;
615
601
  return Math.abs(o * e + s * t) > i * Math.abs(o) + a * Math.abs(s);
616
602
  }
617
- function yt(e, t, n, r, i) {
603
+ function St(e, t, n, r, i) {
618
604
  let a = Math.abs(e) - n, o = Math.abs(t) - r, s = a > 0 ? a : 0, c = o > 0 ? o : 0;
619
605
  return i && (i.x = e < 0 ? -s : s, i.y = t < 0 ? -c : c), s * s + c * c;
620
606
  }
@@ -624,7 +610,7 @@ function J(e) {
624
610
  //#endregion
625
611
  //#region src/systems/spatial-bounds.ts
626
612
  function Y(e) {
627
- let t = e.transform, n = e.body ? L(e.body) : 1, r = t[2], i = t[3], a = t[4], o = nt(n, r, i, a), s = rt(n, r, i, a), c = t[0], l = t[1];
613
+ let t = e.transform, n = e.body ? L(e.body) : 1, r = t[2], i = t[3], a = t[4], o = at(n, r, i, a), s = ot(n, r, i, a), c = t[0], l = t[1];
628
614
  return {
629
615
  minX: c - o,
630
616
  minY: l - s,
@@ -632,23 +618,15 @@ function Y(e) {
632
618
  maxY: l + s
633
619
  };
634
620
  }
635
- function bt(e, t, n, r, i) {
621
+ function Ct(e, t, n, r, i) {
636
622
  return e.minX <= r && e.maxX >= t && e.minY <= i && e.maxY >= n;
637
623
  }
638
- function xt(e, t) {
624
+ function wt(e, t) {
639
625
  return t > e ? t - e : Math.max(1, Math.abs(e)) * 2 ** -52;
640
626
  }
641
627
  //#endregion
642
628
  //#region src/world.ts
643
- function St(e, t) {
644
- t.spatialMapMemory = e.spatialMap.getSharedMemory();
645
- }
646
- function Ct(e) {
647
- if (e.spatialMap) return e.spatialMap;
648
- if (!e.heap || !e.spatialMapMemory) throw Error("Spatial system world is missing its shared MemoryHeap or spatial map");
649
- return e.spatialMap = new o(e.heap, e.spatialMapMemory), e.spatialMap;
650
- }
651
- var wt = class extends e {
629
+ var Tt = class extends e {
652
630
  spatialMap;
653
631
  spatialIds = /* @__PURE__ */ new Set();
654
632
  constructor(e, t = {}) {
@@ -679,12 +657,12 @@ var wt = class extends e {
679
657
  }
680
658
  searchSpatial(e, t, n, r, i) {
681
659
  if (n < e || r < t) return [];
682
- let a = [], o = Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(r) ? this.spatialMap.search(e, t, xt(e, n), xt(t, r)) : this.spatialIds;
660
+ let a = [], o = Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(r) ? this.spatialMap.search(e, t, wt(e, n), wt(t, r)) : this.spatialIds;
683
661
  for (let s of o) {
684
662
  let o = this.getEntityByEid(s);
685
663
  if (!o || i && !i(o)) continue;
686
664
  let c = o.components, l = c.transform?.block;
687
- l && bt(Y({
665
+ l && Ct(Y({
688
666
  transform: l,
689
667
  body: c.body?.block
690
668
  }), e, t, n, r) && a.push(o);
@@ -706,10 +684,10 @@ var wt = class extends e {
706
684
  return t ? [t] : [];
707
685
  });
708
686
  }
709
- }, Tt = {
687
+ }, Et = {
710
688
  min: 0,
711
689
  max: 0
712
- }, Et = {
690
+ }, Dt = {
713
691
  min: 0,
714
692
  max: 0
715
693
  }, X = {
@@ -718,40 +696,40 @@ var wt = class extends e {
718
696
  x: 0,
719
697
  y: 0
720
698
  };
721
- function Dt(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
722
- return kt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !1);
723
- }
724
- function Ot(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
725
- return X.depth = Infinity, !kt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !0) || X.depth === Infinity ? !1 : (m.x = X.x, m.y = X.y, !0);
699
+ function Ot(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
700
+ return At(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !1);
726
701
  }
727
702
  function kt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
728
- return !(e === 4 && (!t || !At(t, n, r, i, a, o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || s === 4 && (!c || !At(c, l, u, d, f, p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || e === 1 && !jt(o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || s === 1 && !jt(p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || Rt(e) && c && !Mt(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) || Rt(s) && t && !Mt(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));
703
+ return X.depth = Infinity, !At(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !0) || X.depth === Infinity ? !1 : (m.x = X.x, m.y = X.y, !0);
729
704
  }
730
- function At(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b) {
705
+ function At(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
706
+ return !(e === 4 && (!t || !jt(t, n, r, i, a, o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || s === 4 && (!c || !jt(c, l, u, d, f, p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || e === 1 && !Mt(o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || s === 1 && !Mt(p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || zt(e) && c && !Nt(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) || zt(s) && t && !Nt(s, l, u, d, f, p, t, n, r, i, a, o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m));
707
+ }
708
+ function jt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b) {
731
709
  let x = e[0], S = Math.cos(a), C = Math.sin(a);
732
710
  for (let a = 0; a < x; a++) {
733
- let w = (a + 1) % x, T = Ft(e, a, t, r, i, S, C), E = It(e, a, n, r, i, S, C), D = Ft(e, w, t, r, i, S, C);
734
- if (!Nt(E - It(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;
711
+ let w = (a + 1) % x, T = It(e, a, t, r, i, S, C), E = Lt(e, a, n, r, i, S, C), D = It(e, w, t, r, i, S, C);
712
+ if (!Pt(E - Lt(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;
735
713
  }
736
714
  return !0;
737
715
  }
738
- function jt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) {
716
+ function Mt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) {
739
717
  let g = Math.cos(e), _ = Math.sin(e);
740
- return Nt(g, _, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) && Nt(-_, g, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h);
718
+ return Pt(g, _, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) && Pt(-_, g, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h);
741
719
  }
742
- function Mt(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) {
720
+ function Nt(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) {
743
721
  let D = e === 3 ? V(r, i) : 0, O = H(r, i, a), k = Math.cos(O) * D, A = Math.sin(O) * D, j = t - k, M = n - A, N = t + k, P = n + A, ee = o[0], F = Math.cos(d), I = Math.sin(d);
744
722
  for (let e = 0; e < ee; e++) {
745
- let t = Ft(o, e, s, l, u, F, I), n = It(o, e, c, l, u, F, I), r = Lt(j, M, N, P, t, n), i = j + (N - j) * r, a = M + (P - M) * r;
746
- if (!Nt(t - i, n - a, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E)) return !1;
723
+ let t = It(o, e, s, l, u, F, I), n = Lt(o, e, c, l, u, F, I), r = Rt(j, M, N, P, t, n), i = j + (N - j) * r, a = M + (P - M) * r;
724
+ if (!Pt(t - i, n - a, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E)) return !1;
747
725
  }
748
726
  return !0;
749
727
  }
750
- function Nt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
728
+ function Pt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
751
729
  let _ = Math.hypot(e, t);
752
730
  if (_ === 0) return !0;
753
- e /= _, t /= _, Pt(n, r, i, a, o, s, c, e, t, Tt), Pt(l, u, d, f, p, m, h, e, t, Et);
754
- let v = Tt.max - Et.min, y = Et.max - Tt.min;
731
+ e /= _, t /= _, Ft(n, r, i, a, o, s, c, e, t, Et), Ft(l, u, d, f, p, m, h, e, t, Dt);
732
+ let v = Et.max - Dt.min, y = Dt.max - Et.min;
755
733
  if (!g && (v <= 0 || y <= 0)) return !1;
756
734
  if (g) {
757
735
  let n, r;
@@ -759,7 +737,7 @@ function Nt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
759
737
  }
760
738
  return !0;
761
739
  }
762
- function Pt(e, t, n, r, i, a, o, s, c, l) {
740
+ function Ft(e, t, n, r, i, a, o, s, c, l) {
763
741
  let u = n * s + r * c;
764
742
  if (e === 2) {
765
743
  let e = i / 2;
@@ -783,68 +761,38 @@ function Pt(e, t, n, r, i, a, o, s, c, l) {
783
761
  let d = t[0], f = Math.cos(o), p = Math.sin(o);
784
762
  l.min = Infinity, l.max = -Infinity;
785
763
  for (let e = 0; e < d; e++) {
786
- let o = Ft(t, e, n, i, a, f, p), u = It(t, e, r, i, a, f, p), d = o * s + u * c;
764
+ let o = It(t, e, n, i, a, f, p), u = Lt(t, e, r, i, a, f, p), d = o * s + u * c;
787
765
  l.min = Math.min(l.min, d), l.max = Math.max(l.max, d);
788
766
  }
789
767
  }
790
- function Ft(e, t, n, r, i, a, o) {
768
+ function It(e, t, n, r, i, a, o) {
791
769
  let s = 1 + t * 2;
792
770
  return n + e[s] * r * a - e[s + 1] * i * o;
793
771
  }
794
- function It(e, t, n, r, i, a, o) {
772
+ function Lt(e, t, n, r, i, a, o) {
795
773
  let s = 1 + t * 2;
796
774
  return n + e[s] * r * o + e[s + 1] * i * a;
797
775
  }
798
- function Lt(e, t, n, r, i, a) {
776
+ function Rt(e, t, n, r, i, a) {
799
777
  let o = n - e, s = r - t, c = o * o + s * s;
800
778
  return c === 0 ? 0 : Math.min(1, Math.max(0, ((i - e) * o + (a - t) * s) / c));
801
779
  }
802
- function Rt(e) {
780
+ function zt(e) {
803
781
  return e === 2 || e === 3;
804
782
  }
805
- function zt(e, t, n, r, i, a) {
806
- if (qt(n, r, "Force"), qt(i, a, "Impulse"), n === 0 && r === 0 && i === 0 && a === 0) return;
807
- let o = e.get(t) ?? Kt(), s = {
808
- ...o,
809
- forceX: o.forceX + n,
810
- forceY: o.forceY + r,
811
- impulseX: o.impulseX + i,
812
- impulseY: o.impulseY + a
783
+ //#endregion
784
+ //#region src/actions/dynamics-commands.ts
785
+ function Bt() {
786
+ return {
787
+ forceX: 0,
788
+ forceY: 0,
789
+ impulseX: 0,
790
+ impulseY: 0
813
791
  };
814
- qt(s.forceX, s.forceY, "Accumulated force"), qt(s.impulseX, s.impulseY, "Accumulated impulse"), e.set(t, s);
815
- }
816
- function Bt(e, t, n) {
817
- Jt(n), (n.velocityX !== void 0 || n.velocityY !== void 0) && e.set(t, {
818
- ...e.get(t) ?? Kt(),
819
- ...n
820
- });
821
792
  }
793
+ //#endregion
794
+ //#region src/actions/find-dynamics-command.ts
822
795
  function Vt(e, t) {
823
- if (e.size === 0) return t;
824
- let n = /* @__PURE__ */ new Map();
825
- for (let [t, r] of e) n.set(t, { ...r });
826
- return Gt(t, (e, t) => {
827
- let r = n.get(e) ?? Kt();
828
- n.set(e, {
829
- forceX: r.forceX + t.forceX,
830
- forceY: r.forceY + t.forceY,
831
- impulseX: r.impulseX + t.impulseX,
832
- impulseY: r.impulseY + t.impulseY,
833
- velocityX: t.velocityX ?? r.velocityX,
834
- velocityY: t.velocityY ?? r.velocityY
835
- });
836
- }), Array.from(n, ([e, t]) => ({
837
- entityId: e,
838
- ...t
839
- })).sort((e, t) => e.entityId - t.entityId);
840
- }
841
- function Ht(e, t, n, r) {
842
- let i = e.dynamicsCommands, a = i instanceof Float64Array ? i : void 0, o = Ut(i && !(i instanceof Float64Array) ? i : void 0, t), s = a ? Wt(a, t) : -1, c = n[2];
843
- if (!r && !o && s < 0 && c === 0) return;
844
- 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;
845
- n[0] = g ?? y, n[1] = _ ?? b;
846
- }
847
- function Ut(e, t) {
848
796
  if (!e) return;
849
797
  let n = 0, r = e.length - 1;
850
798
  for (; n <= r;) {
@@ -853,7 +801,9 @@ function Ut(e, t) {
853
801
  a.entityId < t ? n = i + 1 : r = i - 1;
854
802
  }
855
803
  }
856
- function Wt(e, t) {
804
+ //#endregion
805
+ //#region src/actions/find-dynamics-command-offset.ts
806
+ function Ht(e, t) {
857
807
  let n = 0, r = e.length / 8 - 1;
858
808
  for (; n <= r;) {
859
809
  let i = n + r >>> 1, a = i * 8, o = e[a + 0];
@@ -862,45 +812,12 @@ function Wt(e, t) {
862
812
  }
863
813
  return -1;
864
814
  }
865
- function Gt(e, t) {
866
- if (e) {
867
- if (!(e instanceof Float64Array)) {
868
- for (let { entityId: n, ...r } of e) t(n, r);
869
- return;
870
- }
871
- for (let n = 0; n < e.length; n += 8) {
872
- let r = e[n + 5];
873
- t(e[n + 0], {
874
- forceX: e[n + 1],
875
- forceY: e[n + 2],
876
- impulseX: e[n + 3],
877
- impulseY: e[n + 4],
878
- velocityX: r & 1 ? e[n + 6] : void 0,
879
- velocityY: r & 2 ? e[n + 7] : void 0
880
- });
881
- }
882
- }
883
- }
884
- function Kt() {
885
- return {
886
- forceX: 0,
887
- forceY: 0,
888
- impulseX: 0,
889
- impulseY: 0
890
- };
891
- }
892
- function qt(e, t, n) {
893
- if (!Number.isFinite(e) || !Number.isFinite(t)) throw Error(`${n} must contain finite numbers`);
894
- }
895
- function Jt(e) {
896
- 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");
897
- }
898
815
  //#endregion
899
816
  //#region src/systems/collision.ts
900
- var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
817
+ var Ut = 1e-4, Wt = 24, Z = [], Gt = 2 ** 26, Kt = {
901
818
  fraction: 1,
902
819
  blocking: Z
903
- }, en = class {
820
+ }, qt = class {
904
821
  buckets = [];
905
822
  hasBounciness = !1;
906
823
  resolved = /* @__PURE__ */ new Set();
@@ -913,9 +830,9 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
913
830
  if (c === 0) continue;
914
831
  let l = L(s), u = o[2], d = o[3];
915
832
  if (W(l, u, d)) continue;
916
- let f = o[4], p = nt(l, u, d, f), m = rt(l, u, d, f);
833
+ let f = o[4], p = at(l, u, d, f), m = ot(l, u, d, f);
917
834
  e.bounciness && (this.hasBounciness = !0);
918
- let h = e.velocity, g = e.dynamics, _ = Ut(a, n.entityId), v = i ? Wt(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, P = Math.max(Math.abs(O), Math.abs(M)) * t, ee = o[0], F = o[1], I = r.get(c);
835
+ 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, P = Math.max(Math.abs(O), Math.abs(M)) * t, ee = o[0], F = o[1], I = r.get(c);
919
836
  I || (I = {
920
837
  entries: [],
921
838
  bounds: []
@@ -935,26 +852,26 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
935
852
  }
936
853
  }
937
854
  claimContact(e, t) {
938
- let n = e < t ? e * Qt + t : t * Qt + e;
855
+ let n = e < t ? e * Gt + t : t * Gt + e;
939
856
  return !this.resolved.has(n) && (this.resolved.add(n), !0);
940
857
  }
941
858
  forEachOverlapping(e, t, n = 0, r = 0) {
942
- let i = Q(e);
859
+ let i = Xt(e);
943
860
  if (!i) return;
944
861
  let { x: a, y: o, halfWidth: s, halfHeight: c } = i;
945
862
  if (i.ccd && (n !== 0 || r !== 0)) {
946
863
  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;
947
864
  this.forEachCandidate(i, u, d, f, p, (a) => {
948
- rn(i, e, l, n, r, a) && t(a);
865
+ Zt(i, e, l, n, r, a) && t(a);
949
866
  });
950
867
  return;
951
868
  }
952
869
  this.forEachCandidate(i, a - s, o - c, a + s, o + c, (e) => {
953
- $(i, a, o, e) && t(e);
870
+ Q(i, a, o, e) && t(e);
954
871
  });
955
872
  }
956
873
  contactPoint(e, t, n, r) {
957
- let i = e.components.transform, a = i[0], o = i[1], s = Math.sqrt(n * n + r * r), c = Q(e);
874
+ let i = e.components.transform, a = i[0], o = i[1], s = Math.sqrt(n * n + r * r), c = Xt(e);
958
875
  if (!c || s === 0) return {
959
876
  x: a,
960
877
  y: o
@@ -967,16 +884,16 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
967
884
  };
968
885
  }
969
886
  contactNormal(e, t, n, r, i) {
970
- let a = Q(e);
887
+ let a = Xt(e);
971
888
  if (!a) return !1;
972
889
  let o = n === 0 && r === 0 ? {
973
890
  x: a.x,
974
891
  y: a.y
975
892
  } : this.contactPoint(e, t, n, r);
976
- return tn(a, o.x, o.y, t, i);
893
+ return Jt(a, o.x, o.y, t, i);
977
894
  }
978
895
  sweep(e, t, n) {
979
- let r = Math.sqrt(t * t + n * n), i = Q(e);
896
+ let r = Math.sqrt(t * t + n * n), i = Xt(e);
980
897
  if (!i || r === 0) return {
981
898
  fraction: 1,
982
899
  blocking: Z
@@ -989,7 +906,7 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
989
906
  } : this.refine(i, a, t, n, r);
990
907
  }
991
908
  resolveMove(e, t, n, r) {
992
- let i = Math.sqrt(t * t + n * n), a = Q(e);
909
+ let i = Math.sqrt(t * t + n * n), a = Xt(e);
993
910
  if (!a || i === 0) return {
994
911
  moveX: t,
995
912
  moveY: n,
@@ -1020,7 +937,7 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
1020
937
  moveY: n,
1021
938
  blocking: Z
1022
939
  };
1023
- let i = e.length === 0 ? $t : this.refine(a, e, t, 0, Math.abs(t)), o = r.length === 0 ? $t : this.refine(a, r, 0, n, Math.abs(n)), s = t * i.fraction, c = n * o.fraction;
940
+ let i = e.length === 0 ? Kt : this.refine(a, e, t, 0, Math.abs(t)), o = r.length === 0 ? Kt : this.refine(a, r, 0, n, Math.abs(n)), s = t * i.fraction, c = n * o.fraction;
1024
941
  if (s !== 0 && c !== 0) {
1025
942
  let e = this.gatherCandidates(a, s, c);
1026
943
  if (e.length > 0) {
@@ -1035,7 +952,7 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
1035
952
  return {
1036
953
  moveX: s,
1037
954
  moveY: c,
1038
- blocking: nn(i.blocking, o.blocking)
955
+ blocking: Yt(i.blocking, o.blocking)
1039
956
  };
1040
957
  }
1041
958
  let s = this.refine(a, o, t, n, i);
@@ -1050,19 +967,19 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
1050
967
  if (e.sensor) return [];
1051
968
  let s = r + t, c = i + n, l = [];
1052
969
  return this.forEachCandidate(e, s - a, c - o, s + a, c + o, (t) => {
1053
- $(e, s, c, t) && (R(t.components.body) || $(e, r, i, t) || l.push(t));
970
+ Q(e, s, c, t) && (R(t.components.body) || Q(e, r, i, t) || l.push(t));
1054
971
  }), l;
1055
972
  }
1056
973
  refine(e, t, n, r, i) {
1057
- let { x: a, y: o } = e, s = 0, c = 1, l = Yt / i;
1058
- for (let i = 0; i < Xt && c - s > l; i++) {
974
+ let { x: a, y: o } = e, s = 0, c = 1, l = Ut / i;
975
+ for (let i = 0; i < Wt && c - s > l; i++) {
1059
976
  let i = (s + c) / 2;
1060
977
  this.blockedAt(e, t, n, r, i) ? c = i : s = i;
1061
978
  }
1062
979
  let u = [], d = a + n * c, f = o + r * c;
1063
- for (let n of t) $(e, d, f, n) && u.push(n);
980
+ for (let n of t) Q(e, d, f, n) && u.push(n);
1064
981
  return {
1065
- fraction: s * i > Yt ? s : 0,
982
+ fraction: s * i > Ut ? s : 0,
1066
983
  blocking: u
1067
984
  };
1068
985
  }
@@ -1070,7 +987,7 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
1070
987
  if (e.sensor) return [];
1071
988
  let { x: r, y: i, halfWidth: a, halfHeight: o } = e, s = r + t, c = i + n, l = [];
1072
989
  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) => {
1073
- R(a.components.body) || $(e, r, i, a) || rn(e, r, i, t, n, a) && l.push(a);
990
+ R(a.components.body) || Q(e, r, i, a) || Zt(e, r, i, t, n, a) && l.push(a);
1074
991
  }), l;
1075
992
  }
1076
993
  sweepContinuous(e, t, n, r) {
@@ -1079,13 +996,13 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
1079
996
  fraction: 1,
1080
997
  blocking: Z
1081
998
  };
1082
- let a = 1, o = [], s = Yt / r;
999
+ let a = 1, o = [], s = Ut / r;
1083
1000
  for (let c of i) {
1084
1001
  let i = this.entryFraction(e, c, t, n, r);
1085
1002
  i < a - s ? (a = i, o = [c]) : i <= a + s && o.push(c);
1086
1003
  }
1087
1004
  return {
1088
- fraction: a * r > Yt ? a : 0,
1005
+ fraction: a * r > Ut ? a : 0,
1089
1006
  blocking: o
1090
1007
  };
1091
1008
  }
@@ -1093,44 +1010,44 @@ var Yt = 1e-4, Xt = 24, Zt = "collidable", Z = [], Qt = 2 ** 26, $t = {
1093
1010
  let a;
1094
1011
  if (this.blockedAtOne(e, t, n, r, 1)) a = 1;
1095
1012
  else {
1096
- let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l = an((s * n + c * r) / (i * i));
1013
+ let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l = Qt((s * n + c * r) / (i * i));
1097
1014
  if (!this.blockedAtOne(e, t, n, r, l)) return l;
1098
1015
  a = l;
1099
1016
  }
1100
- let o = 0, s = Yt / i;
1101
- for (let i = 0; i < Xt && a - o > s; i++) {
1017
+ let o = 0, s = Ut / i;
1018
+ for (let i = 0; i < Wt && a - o > s; i++) {
1102
1019
  let i = (o + a) / 2;
1103
1020
  this.blockedAtOne(e, t, n, r, i) ? a = i : o = i;
1104
1021
  }
1105
1022
  return o;
1106
1023
  }
1107
1024
  blockedAtOne(e, t, n, r, i) {
1108
- return $(e, Math.fround(e.x + n * i), Math.fround(e.y + r * i), t);
1025
+ return Q(e, Math.fround(e.x + n * i), Math.fround(e.y + r * i), t);
1109
1026
  }
1110
1027
  blockedAt(e, t, n, r, i) {
1111
1028
  let a = Math.fround(e.x + n * i), o = Math.fround(e.y + r * i);
1112
- for (let n of t) if ($(e, a, o, n)) return !0;
1029
+ for (let n of t) if (Q(e, a, o, n)) return !0;
1113
1030
  return !1;
1114
1031
  }
1115
1032
  forEachCandidate(e, t, r, i, a, o) {
1116
1033
  for (let s of this.buckets) if ((e.mask & s.category) !== 0) for (let c of s.index.search(t, r, i, a)) {
1117
1034
  let t = s.entries[c];
1118
- t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[n] !== 1 && (Ce(t.components.body) || o(t));
1035
+ t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[n] !== 1 && (Oe(t.components.body) || o(t));
1119
1036
  }
1120
1037
  }
1121
1038
  };
1122
- function tn(e, t, n, r, i) {
1039
+ function Jt(e, t, n, r, i) {
1123
1040
  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];
1124
- return e.shape === 4 || o === 4 ? Ot(e.shape, e.polygon, t, n, e.width, e.height, e.angle, o, r.components.polygon, s, c, l, u, d, i) : ot(e.shape, t, n, e.width, e.height, e.angle, o, s, c, l, u, d, i);
1041
+ return e.shape === 4 || o === 4 ? kt(e.shape, e.polygon, t, n, e.width, e.height, e.angle, o, r.components.polygon, s, c, l, u, d, i) : lt(e.shape, t, n, e.width, e.height, e.angle, o, s, c, l, u, d, i);
1125
1042
  }
1126
- function nn(e, t) {
1043
+ function Yt(e, t) {
1127
1044
  if (e.length === 0) return t;
1128
1045
  if (t.length === 0) return e;
1129
1046
  let n = [...e];
1130
1047
  for (let e of t) n.some((t) => t.entityId === e.entityId) || n.push(e);
1131
1048
  return n;
1132
1049
  }
1133
- function Q(e) {
1050
+ function Xt(e) {
1134
1051
  let t = e.components.body;
1135
1052
  if (!t) return;
1136
1053
  let n = t[2];
@@ -1147,36 +1064,36 @@ function Q(e) {
1147
1064
  width: a,
1148
1065
  height: o,
1149
1066
  angle: s,
1150
- halfWidth: nt(i, a, o, s),
1151
- halfHeight: rt(i, a, o, s),
1067
+ halfWidth: at(i, a, o, s),
1068
+ halfHeight: ot(i, a, o, s),
1152
1069
  category: t[1],
1153
1070
  mask: n,
1154
1071
  sensor: R(t),
1155
- ccd: xe(t)
1072
+ ccd: Ee(t)
1156
1073
  };
1157
1074
  }
1158
- function rn(e, t, n, r, i, a) {
1075
+ function Zt(e, t, n, r, i, a) {
1159
1076
  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];
1160
1077
  if (e.shape === 1 || e.shape === 4) {
1161
1078
  let c = Math.cos(e.angle), h = Math.sin(e.angle), g = r * c + i * h, _ = -r * h + i * c;
1162
- return on(1, void 0, (t + o) / 2, (n + s) / 2, e.width + Math.abs(g), e.height + Math.abs(_), e.angle, l, a.components.polygon, u, d, f, p, m);
1079
+ return $t(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);
1163
1080
  }
1164
1081
  let h = U(e.shape, e.width, e.height), g = Math.sqrt(r * r + i * i), _ = g > 0 ? Math.atan2(i, r) : e.angle;
1165
- return on(3, void 0, (t + o) / 2, (n + s) / 2, g + h * 2, h * 2, _, l, a.components.polygon, u, d, f, p, m) ? !0 : on(e.shape, e.polygon, o, s, e.width, e.height, e.angle, l, a.components.polygon, u, d, f, p, m);
1082
+ return $t(3, void 0, (t + o) / 2, (n + s) / 2, g + h * 2, h * 2, _, l, a.components.polygon, u, d, f, p, m) ? !0 : $t(e.shape, e.polygon, o, s, e.width, e.height, e.angle, l, a.components.polygon, u, d, f, p, m);
1166
1083
  }
1167
- function an(e) {
1084
+ function Qt(e) {
1168
1085
  return e < 0 ? 0 : e > 1 ? 1 : e;
1169
1086
  }
1170
- function $(e, t, n, r) {
1087
+ function Q(e, t, n, r) {
1171
1088
  let i = r.components.transform;
1172
- return on(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]);
1089
+ return $t(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]);
1173
1090
  }
1174
- function on(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
1175
- return e !== 4 && s !== 4 ? it(e, n, r, i, a, o, s, l, u, d, f, p) : Dt(e, t, n, r, i, a, o, s, c, l, u, d, f, p);
1091
+ function $t(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
1092
+ return e !== 4 && s !== 4 ? st(e, n, r, i, a, o, s, l, u, d, f, p) : Ot(e, t, n, r, i, a, o, s, c, l, u, d, f, p);
1176
1093
  }
1177
1094
  //#endregion
1178
1095
  //#region src/systems/spatial-index.ts
1179
- var sn = class {
1096
+ var en = class {
1180
1097
  entries = [];
1181
1098
  index;
1182
1099
  constructor(e) {
@@ -1184,7 +1101,7 @@ var sn = class {
1184
1101
  for (let n of e) {
1185
1102
  let e = n.components, r = e.transform;
1186
1103
  if (!r) continue;
1187
- let i = e.body, a = i ? L(i) : 1, o = r[2], s = r[3], c = r[4], l = r[0], u = r[1], d = nt(a, o, s, c), f = rt(a, o, s, c);
1104
+ let i = e.body, a = i ? L(i) : 1, o = r[2], s = r[3], c = r[4], l = r[0], u = r[1], d = at(a, o, s, c), f = ot(a, o, s, c);
1188
1105
  this.entries.push({
1189
1106
  entityId: n.entityId,
1190
1107
  components: e
@@ -1216,7 +1133,63 @@ var sn = class {
1216
1133
  let o = this.entries;
1217
1134
  return (i ? a.neighbors(e, t, n, r, (e) => i(o[e])) : a.neighbors(e, t, n, r)).map((e) => o[e]);
1218
1135
  }
1219
- }, cn = {
1136
+ };
1137
+ //#endregion
1138
+ //#region src/actions/get-spatial-map.ts
1139
+ function tn(e) {
1140
+ if (e.spatialMap) return e.spatialMap;
1141
+ if (!e.heap || !e.spatialMapMemory) throw Error("Spatial system world is missing its shared MemoryHeap or spatial map");
1142
+ return e.spatialMap = new o(e.heap, e.spatialMapMemory), e.spatialMap;
1143
+ }
1144
+ //#endregion
1145
+ //#region src/actions/update-spatial-map.ts
1146
+ function $(e, t, n) {
1147
+ if (!e.spatialMap && (!e.heap || !e.spatialMapMemory)) return;
1148
+ let r = tn(e), i = Y(n);
1149
+ r.update(t, i.minX, i.minY, i.maxX - i.minX, i.maxY - i.minY);
1150
+ }
1151
+ //#endregion
1152
+ //#region src/actions/set-entity-position.ts
1153
+ function nn(e, t, n) {
1154
+ let r = t.components.transform;
1155
+ if (!(r instanceof Float32Array)) return;
1156
+ a(r, 0, n.x), a(r, 1, n.y);
1157
+ let i = t.components.body;
1158
+ $(e, t.entityId, {
1159
+ transform: r,
1160
+ ...i instanceof Uint32Array ? { body: i } : {}
1161
+ });
1162
+ }
1163
+ //#endregion
1164
+ //#region src/actions/add-physical-world-data.ts
1165
+ function rn(e, t) {
1166
+ t.spatialMapMemory = e.spatialMap.getSharedMemory();
1167
+ }
1168
+ //#endregion
1169
+ //#region src/actions/snap-entity.ts
1170
+ function an(e) {
1171
+ let { transform: t, interpolation: n } = e.components;
1172
+ t && n && (n.targetX = n.x = t.x, n.targetY = n.y = t.y, n.previousX = t.x, n.previousY = t.y, n.remainingDuration = 0, n.syncedStepDuration = 0, n.syncedDuration = n.totalDuration);
1173
+ }
1174
+ //#endregion
1175
+ //#region src/actions/start-spawn-interpolation.ts
1176
+ function on(e, t) {
1177
+ let { transform: n, velocity: r, interpolation: i } = e.components;
1178
+ if (!n || !r || !i) return;
1179
+ 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;
1180
+ 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;
1181
+ }
1182
+ //#endregion
1183
+ //#region src/actions/integrate-dynamics.ts
1184
+ function sn(e, t, n, r) {
1185
+ 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];
1186
+ if (!r && !o && s < 0 && c === 0) return;
1187
+ let l = e.elapsedTime / 1e3, u = r?.[2] ?? 1, d = s < 0 ? o?.forceX ?? 0 : a[s + 1], f = s < 0 ? o?.forceY ?? 0 : a[s + 2], p = s < 0 ? o?.impulseX ?? 0 : a[s + 3], m = s < 0 ? o?.impulseY ?? 0 : a[s + 4], h = s < 0 ? 0 : a[s + 5], g = s < 0 ? o?.velocityX : h & 1 ? a[s + 6] : void 0, _ = s < 0 ? o?.velocityY : h & 2 ? a[s + 7] : void 0, v = c > 0 ? 1 / (1 + c * l) : 1, y = (n[0] + (r?.[0] ?? 0) * l + d * u * l + p * u) * v, b = (n[1] + (r?.[1] ?? 0) * l + f * u * l + m * u) * v;
1188
+ n[0] = g ?? y, n[1] = _ ?? b;
1189
+ }
1190
+ //#endregion
1191
+ //#region src/systems/bounce.ts
1192
+ var cn = {
1220
1193
  x: 0,
1221
1194
  y: 0
1222
1195
  };
@@ -1249,7 +1222,7 @@ function pn(e, t) {
1249
1222
  }
1250
1223
  function mn(e, t, n) {
1251
1224
  let r = e.components.transform, i = t.components.transform, a = hn(e.components.body), o = hn(t.components.body);
1252
- return a === 4 || o === 4 ? Ot(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) : ot(a, r[0], r[1], r[2], r[3], r[4], o, i[0], i[1], i[2], i[3], i[4], n);
1225
+ return a === 4 || o === 4 ? kt(a, e.components.polygon, r[0], r[1], r[2], r[3], r[4], o, t.components.polygon, i[0], i[1], i[2], i[3], i[4], n) : lt(a, r[0], r[1], r[2], r[3], r[4], o, i[0], i[1], i[2], i[3], i[4], n);
1253
1226
  }
1254
1227
  function hn(e) {
1255
1228
  return e ? L(e) : 1;
@@ -1258,43 +1231,105 @@ function gn(e) {
1258
1231
  return e !== void 0 && R(e);
1259
1232
  }
1260
1233
  //#endregion
1261
- //#region src/systems/physics-update.ts
1262
- function _n(e, t, n) {
1263
- if (!e.spatialMap && (!e.heap || !e.spatialMapMemory)) return;
1264
- let r = Ct(e), i = Y(n);
1265
- r.update(t, i.minX, i.minY, i.maxX - i.minX, i.maxY - i.minY);
1234
+ //#region src/actions/combine-dynamics-commands.ts
1235
+ function _n(e, t) {
1236
+ if (e.size === 0) return t;
1237
+ let n = /* @__PURE__ */ new Map();
1238
+ for (let [t, r] of e) n.set(t, { ...r });
1239
+ return vn(t, (e, t) => {
1240
+ let r = n.get(e) ?? Bt();
1241
+ n.set(e, {
1242
+ forceX: r.forceX + t.forceX,
1243
+ forceY: r.forceY + t.forceY,
1244
+ impulseX: r.impulseX + t.impulseX,
1245
+ impulseY: r.impulseY + t.impulseY,
1246
+ velocityX: t.velocityX ?? r.velocityX,
1247
+ velocityY: t.velocityY ?? r.velocityY
1248
+ });
1249
+ }), Array.from(n, ([e, t]) => ({
1250
+ entityId: e,
1251
+ ...t
1252
+ })).sort((e, t) => e.entityId - t.entityId);
1266
1253
  }
1267
- var vn = "position-updated", yn = {
1254
+ function vn(e, t) {
1255
+ if (e) {
1256
+ if (!(e instanceof Float64Array)) {
1257
+ for (let { entityId: n, ...r } of e) t(n, r);
1258
+ return;
1259
+ }
1260
+ for (let n = 0; n < e.length; n += 8) {
1261
+ let r = e[n + 5];
1262
+ t(e[n + 0], {
1263
+ forceX: e[n + 1],
1264
+ forceY: e[n + 2],
1265
+ impulseX: e[n + 3],
1266
+ impulseY: e[n + 4],
1267
+ velocityX: r & 1 ? e[n + 6] : void 0,
1268
+ velocityY: r & 2 ? e[n + 7] : void 0
1269
+ });
1270
+ }
1271
+ }
1272
+ }
1273
+ //#endregion
1274
+ //#region src/actions/queue-dynamics-vector.ts
1275
+ function yn(e, t, n, r, i, a) {
1276
+ if (bn(n, r, "Force"), bn(i, a, "Impulse"), n === 0 && r === 0 && i === 0 && a === 0) return;
1277
+ let o = e.get(t) ?? Bt(), s = {
1278
+ ...o,
1279
+ forceX: o.forceX + n,
1280
+ forceY: o.forceY + r,
1281
+ impulseX: o.impulseX + i,
1282
+ impulseY: o.impulseY + a
1283
+ };
1284
+ bn(s.forceX, s.forceY, "Accumulated force"), bn(s.impulseX, s.impulseY, "Accumulated impulse"), e.set(t, s);
1285
+ }
1286
+ function bn(e, t, n) {
1287
+ if (!Number.isFinite(e) || !Number.isFinite(t)) throw Error(`${n} must contain finite numbers`);
1288
+ }
1289
+ //#endregion
1290
+ //#region src/actions/queue-velocity-assignment.ts
1291
+ function xn(e, t, n) {
1292
+ Sn(n), (n.velocityX !== void 0 || n.velocityY !== void 0) && e.set(t, {
1293
+ ...e.get(t) ?? Bt(),
1294
+ ...n
1295
+ });
1296
+ }
1297
+ function Sn(e) {
1298
+ if (e.velocityX !== void 0 && !Number.isFinite(e.velocityX) || e.velocityY !== void 0 && !Number.isFinite(e.velocityY)) throw Error("Velocity assignment must contain finite numbers");
1299
+ }
1300
+ //#endregion
1301
+ //#region src/systems/physics-update.ts
1302
+ var Cn = {
1268
1303
  x: 0,
1269
1304
  y: 0
1270
1305
  };
1271
- function bn(e = {}) {
1306
+ function wn(e = {}) {
1272
1307
  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) => {
1273
1308
  if (c.entity?.[n] === 1) return;
1274
- if (c.body !== void 0 && Ce(c.body)) {
1309
+ if (c.body !== void 0 && Oe(c.body)) {
1275
1310
  u.entityDied(r);
1276
1311
  return;
1277
1312
  }
1278
- let d = i ? Sn(c, i) : 0;
1313
+ let d = i ? En(c, i) : 0;
1279
1314
  if (i && e.skipGroup === d) return;
1280
1315
  let f = {
1281
1316
  entityId: r,
1282
1317
  components: c
1283
1318
  }, p = c.interpolation, m = e.elapsedTime / 1e3;
1284
- Ht(e, r, c.velocity, c.dynamics);
1319
+ sn(e, r, c.velocity, c.dynamics);
1285
1320
  let h = c.velocity[0] * m, g = c.velocity[1] * m;
1286
- Dn(p, c.transform, e);
1321
+ jn(p, c.transform, e);
1287
1322
  let _ = i ? s?.get(d) : o;
1288
1323
  if (!_) {
1289
- kn(r, c.transform, h, g, u, e.reportMoves), _n(e, r, c), On(p, e.tick);
1324
+ Nn(r, c.transform, h, g, u, e.reportMoves), $(e, r, c), Mn(p, e.tick);
1290
1325
  return;
1291
1326
  }
1292
1327
  let v = c.bounciness !== void 0, y = _.resolveMove(f, h, g, !v);
1293
- if (kn(r, c.transform, y.moveX, y.moveY, u, e.reportMoves), _n(e, r, c), On(p, e.tick), _.hasBounciness || a || t) {
1328
+ if (Nn(r, c.transform, y.moveX, y.moveY, u, e.reportMoves), $(e, r, c), Mn(p, e.tick), _.hasBounciness || a || t) {
1294
1329
  _.forEachOverlapping(f, (n) => {
1295
- _.claimContact(r, n.entityId) && Cn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
1330
+ _.claimContact(r, n.entityId) && Dn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
1296
1331
  }, y.moveX, y.moveY);
1297
- for (let n of y.blocking) _.claimContact(r, n.entityId) && Cn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
1332
+ for (let n of y.blocking) _.claimContact(r, n.entityId) && Dn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
1298
1333
  }
1299
1334
  }, { physics: {
1300
1335
  collision: !0,
@@ -1303,60 +1338,60 @@ function bn(e = {}) {
1303
1338
  group: i
1304
1339
  } });
1305
1340
  return l.preRun = (e, t, n) => {
1306
- xn(e, c), e.dieAtImpact = (t, n) => {
1307
- Tn(e, i ? s?.get(Sn(t.components, i)) : o, t, n);
1341
+ Tn(e, c), e.dieAtImpact = (t, n) => {
1342
+ kn(e, i ? s?.get(En(t.components, i)) : o, t, n);
1308
1343
  };
1309
1344
  let r = e.elapsedTime / 1e3, a = n.collidable ?? [];
1310
1345
  if (!i) {
1311
- o = new en(a, r, e.dynamicsCommands);
1346
+ o = new qt(a, r, e.dynamicsCommands);
1312
1347
  return;
1313
1348
  }
1314
1349
  let l = /* @__PURE__ */ new Map();
1315
1350
  for (let t of a) {
1316
- let n = Sn(t.components, i);
1351
+ let n = En(t.components, i);
1317
1352
  if (e.skipGroup === n) continue;
1318
1353
  let r = l.get(n);
1319
1354
  r || (r = [], l.set(n, r)), r.push(t);
1320
1355
  }
1321
1356
  s = /* @__PURE__ */ new Map();
1322
- for (let [t, n] of l) s.set(t, new en(n, r, e.dynamicsCommands));
1357
+ for (let [t, n] of l) s.set(t, new qt(n, r, e.dynamicsCommands));
1323
1358
  }, l;
1324
1359
  }
1325
- function xn(e, t) {
1360
+ function Tn(e, t) {
1326
1361
  let n = e, r = e.commandQueueId ?? 0, i = t.get(r);
1327
- i && (e.dynamicsCommands = Vt(i, e.dynamicsCommands), t.delete(r));
1362
+ i && (e.dynamicsCommands = _n(i, e.dynamicsCommands), t.delete(r));
1328
1363
  let a = () => {
1329
1364
  let e = t.get(r);
1330
1365
  return e || (e = /* @__PURE__ */ new Map(), t.set(r, e)), e;
1331
1366
  };
1332
1367
  n.queueForce = (e, t, n) => {
1333
- zt(a(), e, t, n, 0, 0);
1368
+ yn(a(), e, t, n, 0, 0);
1334
1369
  }, n.queueImpulse = (e, t, n) => {
1335
- zt(a(), e, 0, 0, t, n);
1370
+ yn(a(), e, 0, 0, t, n);
1336
1371
  }, n.queueVelocity = (e, t) => {
1337
- Bt(a(), e, t);
1372
+ xn(a(), e, t);
1338
1373
  };
1339
1374
  }
1340
- function Sn(e, t) {
1375
+ function En(e, t) {
1341
1376
  let n = e[t.component];
1342
1377
  return n ? n[t.index] : 0;
1343
1378
  }
1344
- function Cn(e, t, n, r, i, a, o, s, c, l) {
1379
+ function Dn(e, t, n, r, i, a, o, s, c, l) {
1345
1380
  if (ln(n, r, c), !l) return;
1346
1381
  let u = Y(n.components), d = Y(r.components);
1347
- yn.x = 0, yn.y = 0, t.contactNormal(n, r, o, s, yn), l(e, n, r, i, a, {
1348
- normalX: yn.x,
1349
- normalY: yn.y
1350
- }), wn(e, n.entityId, n.components, u), wn(e, r.entityId, r.components, d);
1382
+ Cn.x = 0, Cn.y = 0, t.contactNormal(n, r, o, s, Cn), l(e, n, r, i, a, {
1383
+ normalX: Cn.x,
1384
+ normalY: Cn.y
1385
+ }), On(e, n.entityId, n.components, u), On(e, r.entityId, r.components, d);
1351
1386
  }
1352
- function wn(e, t, n, r) {
1387
+ function On(e, t, n, r) {
1353
1388
  let i = Y(n);
1354
- (i.minX !== r.minX || i.minY !== r.minY || i.maxX !== r.maxX || i.maxY !== r.maxY) && _n(e, t, n);
1389
+ (i.minX !== r.minX || i.minY !== r.minY || i.maxX !== r.maxX || i.maxY !== r.maxY) && $(e, t, n);
1355
1390
  }
1356
- function Tn(e, t, n, r) {
1391
+ function kn(e, t, n, r) {
1357
1392
  let i = n.components.body;
1358
- if (!i || Ce(i)) return;
1359
- we(i);
1393
+ if (!i || Oe(i)) return;
1394
+ ke(i);
1360
1395
  let a = n.components.transform, o = n.components.velocity, s = r.components.transform, c = r.components.body;
1361
1396
  if (!t || !a || !o || !s || !c) return;
1362
1397
  let l = e.elapsedTime / 1e3, u = o[0] * l, d = o[1] * l;
@@ -1373,50 +1408,50 @@ function Tn(e, t, n, r) {
1373
1408
  } }, u, d);
1374
1409
  a[0] = f.x, a[1] = f.y;
1375
1410
  }
1376
- function En(e, t, n, r, i) {
1411
+ function An(e, t, n, r, i) {
1377
1412
  let a = e.elapsedTime / 1e3, o = n.interpolation;
1378
- Ht(e, t, n.velocity, n.dynamics), Dn(o, n.transform, e), kn(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), _n(e, t, n), On(o, e.tick);
1413
+ sn(e, t, n.velocity, n.dynamics), jn(o, n.transform, e), Nn(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), $(e, t, n), Mn(o, e.tick);
1379
1414
  }
1380
- function Dn(e, t, n) {
1415
+ function jn(e, t, n) {
1381
1416
  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);
1382
1417
  }
1383
- function On(e, t) {
1418
+ function Mn(e, t) {
1384
1419
  e && a(e, 4, t);
1385
1420
  }
1386
- function kn(e, t, n, r, i, a) {
1387
- (n !== 0 || r !== 0) && (n !== 0 && c(t, 0, n, Infinity), r !== 0 && c(t, 1, r, Infinity), a !== !1 && i.emitSystemEvent(vn, e));
1421
+ function Nn(e, t, n, r, i, a) {
1422
+ (n !== 0 || r !== 0) && (n !== 0 && c(t, 0, n, Infinity), r !== 0 && c(t, 1, r, Infinity), a !== !1 && i.emitSystemEvent(l, e));
1388
1423
  }
1389
1424
  //#endregion
1390
1425
  //#region src/systems/interpolation-channels.ts
1391
- var An = /* @__PURE__ */ new WeakMap();
1392
- function jn(e, t) {
1393
- let n = An.get(e);
1394
- return n || (n = [void 0], An.set(e, n)), n.push(t), n.length - 1;
1426
+ var Pn = /* @__PURE__ */ new WeakMap();
1427
+ function Fn(e, t) {
1428
+ let n = Pn.get(e);
1429
+ return n || (n = [void 0], Pn.set(e, n)), n.push(t), n.length - 1;
1395
1430
  }
1396
- function Mn(e, t) {
1397
- let n = An.get(e);
1431
+ function In(e, t) {
1432
+ let n = Pn.get(e);
1398
1433
  n && t > 0 && t < n.length && (n[t] = void 0);
1399
1434
  }
1400
- function Nn(e) {
1401
- let t = An.get(e);
1435
+ function Ln(e) {
1436
+ let t = Pn.get(e);
1402
1437
  if (t) return t.map((e) => e ? e.committedTick : NaN);
1403
1438
  }
1404
1439
  //#endregion
1405
1440
  //#region src/systems/physics-system.ts
1406
- var Pn = 50, Fn = 1, In = class extends r {
1441
+ var Rn = 1, zn = class extends r {
1407
1442
  spatialWorld;
1408
1443
  pendingDynamicsCommands = /* @__PURE__ */ new Map();
1409
- commandQueueId = Fn++;
1444
+ commandQueueId = Rn++;
1410
1445
  tick = 0;
1411
1446
  interpolationChannel;
1412
1447
  reportMoves;
1413
1448
  skipGroup;
1414
1449
  constructor(e, t = {}) {
1415
- let n = t.updateFunction ?? En, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = n === En || n.physics?.dynamics === !0, o = n.physics?.group, s = [];
1450
+ let n = t.updateFunction ?? An, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = n === An || n.physics?.dynamics === !0, o = n.physics?.group, s = [];
1416
1451
  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);
1417
1452
  let c = s.length ? [...s, ...r] : r, l = r.includes("bounciness") ? [...r] : ["bounciness", ...r];
1418
1453
  l.includes("polygon") || l.push("polygon"), a && !l.includes("dynamics") && l.push("dynamics"), o && !l.includes(o.component) && l.push(o.component);
1419
- let u = i ? { [Zt]: {
1454
+ let d = i ? { [u]: {
1420
1455
  required: ["transform", "body"],
1421
1456
  optional: [
1422
1457
  "velocity",
@@ -1424,34 +1459,34 @@ var Pn = 50, Fn = 1, In = class extends r {
1424
1459
  ...l
1425
1460
  ],
1426
1461
  filter: t.scope
1427
- } } : void 0, d = u || t.queries ? {
1428
- ...u,
1462
+ } } : void 0, f = d || t.queries ? {
1463
+ ...d,
1429
1464
  ...t.queries
1430
- } : void 0, f = Ln(t.scope, t.filter);
1465
+ } : void 0, p = Bn(t.scope, t.filter);
1431
1466
  super(e, {
1432
1467
  name: t.name ?? "PhysicsSystem",
1433
1468
  deltaBetweenRuns: t.deltaBetweenRuns ?? 50,
1434
1469
  firstRun: t.firstRun,
1435
1470
  required: ["transform", "velocity"],
1436
1471
  optional: c,
1437
- filter: f,
1472
+ filter: p,
1438
1473
  updateFunction: n,
1439
- queries: d,
1474
+ queries: f,
1440
1475
  forceMainThread: t.forceMainThread ?? !t.getWorker,
1441
1476
  getWorker: t.getWorker ?? (() => {
1442
1477
  throw Error("PhysicsSystem cannot start a worker: no getWorker was supplied");
1443
1478
  })
1444
- }), this.spatialWorld = e, this.reportMoves = t.reportMoves, this.skipGroup = t.skipGroup, this.interpolationChannel = jn(e, this);
1479
+ }), this.spatialWorld = e, this.reportMoves = t.reportMoves, this.skipGroup = t.skipGroup, this.interpolationChannel = Fn(e, this);
1445
1480
  }
1446
1481
  get committedTick() {
1447
1482
  return this.isCurrentlyRunning() ? this.tick - 1 : this.tick;
1448
1483
  }
1449
1484
  destroy() {
1450
- Mn(this.world, this.interpolationChannel), super.destroy();
1485
+ In(this.world, this.interpolationChannel), super.destroy();
1451
1486
  }
1452
1487
  startInterpolation(e) {
1453
1488
  let t = this.deltaBetweenRuns;
1454
- t <= 0 || et(e, {
1489
+ t <= 0 || on(e, {
1455
1490
  stepMs: t,
1456
1491
  stepFraction: this.currentDelta / t,
1457
1492
  tick: this.tick
@@ -1465,14 +1500,14 @@ var Pn = 50, Fn = 1, In = class extends r {
1465
1500
  }
1466
1501
  queueVelocity(e, t) {
1467
1502
  let n = typeof e == "number" ? e : e.eid;
1468
- Bt(this.pendingDynamicsCommands, n, t);
1503
+ xn(this.pendingDynamicsCommands, n, t);
1469
1504
  }
1470
1505
  addDataToWorld(e) {
1471
- e.tick = ++this.tick, e.interpolationChannel = this.interpolationChannel, St(this.spatialWorld, e), e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0, e.skipGroup = this.skipGroup, e.commandQueueId = this.commandQueueId, e.dynamicsCommands = this.snapshotDynamicsCommands();
1506
+ e.tick = ++this.tick, e.interpolationChannel = this.interpolationChannel, rn(this.spatialWorld, e), e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0, e.skipGroup = this.skipGroup, e.commandQueueId = this.commandQueueId, e.dynamicsCommands = this.snapshotDynamicsCommands();
1472
1507
  }
1473
1508
  queueDynamics(e, t, n, r, i) {
1474
1509
  let a = typeof e == "number" ? e : e.eid;
1475
- zt(this.pendingDynamicsCommands, a, t, n, r, i);
1510
+ yn(this.pendingDynamicsCommands, a, t, n, r, i);
1476
1511
  }
1477
1512
  snapshotDynamicsCommands() {
1478
1513
  if (this.pendingDynamicsCommands.size === 0) return;
@@ -1488,18 +1523,18 @@ var Pn = 50, Fn = 1, In = class extends r {
1488
1523
  return n;
1489
1524
  }
1490
1525
  };
1491
- function Ln(e, t) {
1526
+ function Bn(e, t) {
1492
1527
  return e ? t ? (n) => e(n) && t(n) : e : t;
1493
1528
  }
1494
1529
  //#endregion
1495
1530
  //#region src/systems/interpolation-update.ts
1496
- var Rn = 1.5, zn = .5, Bn = (e, t, n) => {
1497
- 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]];
1498
- if (p !== void 0 && !Number.isNaN(p) && !(f && d <= p)) {
1531
+ var Vn = (e, t, n) => {
1532
+ let r = n.interpolation, a = n.transform, o = i(r, 4), s = r[3], c = r[5], l = a[0], u = a[1], d = i(r, 4), m = o === d, h = e.committedTicks?.[r[11]];
1533
+ if (h !== void 0 && !Number.isNaN(h) && !(m && d <= h)) {
1499
1534
  let e = i(r, 16);
1500
- s = r[14], c = r[15], l = r[12], u = r[13], d = i(r, 16), f = e === d;
1535
+ s = r[14], c = r[15], l = r[12], u = r[13], d = i(r, 16), m = e === d;
1501
1536
  }
1502
- if (f) r[8] = l, r[9] = u, r[10] = s;
1537
+ if (m) r[8] = l, r[9] = u, r[10] = s;
1503
1538
  else {
1504
1539
  if (s = r[10], s <= 0 || r[7] <= 0) return;
1505
1540
  l = r[8], u = r[9], c = r[6], d = r[2];
@@ -1508,27 +1543,27 @@ var Rn = 1.5, zn = .5, Bn = (e, t, n) => {
1508
1543
  r[2] = d, r[6] = c, r[7] = 0, r[0] = l, r[1] = u;
1509
1544
  return;
1510
1545
  }
1511
- let m = r[7];
1546
+ let g = r[7];
1512
1547
  if (d !== r[2]) {
1513
1548
  let e = r[6], t = c >= e ? c - e : s;
1514
- m += t, r[6] = c, r[2] = d;
1549
+ g += t, r[6] = c, r[2] = d;
1515
1550
  }
1516
- if (m <= 0) {
1551
+ if (g <= 0) {
1517
1552
  r[7] = 0, r[0] = l, r[1] = u;
1518
1553
  return;
1519
1554
  }
1520
- let h = Math.min(Math.max(e.elapsedTime, 0), m), g = s * Rn, _ = m - h;
1521
- _ > g && (h += Math.min(_ - g, h * zn));
1522
- let v = h / m, y = r[0], b = r[1];
1523
- r[0] = y + (l - y) * v, r[1] = b + (u - b) * v, r[7] = m - h;
1524
- }, Vn = class extends r {
1555
+ let _ = Math.min(Math.max(e.elapsedTime, 0), g), v = s * f, y = g - _;
1556
+ y > v && (_ += Math.min(y - v, _ * p));
1557
+ let b = _ / g, x = r[0], S = r[1];
1558
+ r[0] = x + (l - x) * b, r[1] = S + (u - S) * b, r[7] = g - _;
1559
+ }, Hn = class extends r {
1525
1560
  constructor(e, t = {}) {
1526
1561
  super(e, {
1527
1562
  name: t.name ?? "InterpolationSystem",
1528
1563
  deltaBetweenRuns: 0,
1529
1564
  firstRun: t.firstRun,
1530
1565
  required: ["transform", "interpolation"],
1531
- updateFunction: Bn,
1566
+ updateFunction: Vn,
1532
1567
  forceMainThread: t.forceMainThread ?? !t.getWorker,
1533
1568
  getWorker: t.getWorker ?? (() => {
1534
1569
  throw Error("InterpolationSystem cannot start a worker: no getWorker was supplied");
@@ -1536,10 +1571,10 @@ var Rn = 1.5, zn = .5, Bn = (e, t, n) => {
1536
1571
  });
1537
1572
  }
1538
1573
  addDataToWorld(e) {
1539
- e.committedTicks = Nn(this.world);
1574
+ e.committedTicks = Ln(this.world);
1540
1575
  }
1541
1576
  };
1542
1577
  //#endregion
1543
- 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, Zt as COLLIDABLE_QUERY, en as CollisionBroadphase, le as DEFAULT_COLLIDE_CATEGORY, ue as DEFAULT_COLLIDE_MASK, Pn as DEFAULT_PHYSICS_STEP_MS, N as DYNAMICS_ACCELERATION_X_INDEX, P as DYNAMICS_ACCELERATION_Y_INDEX, ee 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, Vn as InterpolationSystem, l as MAX_POLYGON_VERTICES, f as POLYGON_SIZE, u as POLYGON_VERTEX_COUNT_INDEX, d as POLYGON_VERTICES_INDEX, vn as POSITION_UPDATED_EVENT, wt as PhysicalWorld, In as PhysicsSystem, oe as SHAPE_CAPSULE, ae as SHAPE_CIRCLE, se as SHAPE_POLYGON, ie as SHAPE_RECTANGLE, sn 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, St as addPhysicalWorldData, Se as blocksPath, Ee as bodyDefinition, L as bodyShape, Me as bouncinessDefinition, mt as boundsHalfHeight, pt as boundsHalfWidth, de as canCollide, H as capsuleCoreAngle, V as capsuleHalfLength, ot as contactNormal, bn as createPhysicsUpdate, te as dynamicsDefinition, Ct as getSpatialMap, Ht as integrateDynamics, Qe as interpolationDefinition, Bn as interpolationUpdate, xe as isContinuous, Ce as isDying, R as isSensor, we as markDying, ht as orientedBoxesOverlap, tt as physicsRegistry, En as physicsUpdate, q as pointSegmentDistanceSquared, Ot as polygonContactNormal, m as polygonDefinition, Dt as polygonShapesOverlap, h as preparePolygon, _t as segmentBoxDistanceSquared, gt as segmentSegmentDistanceSquared, rt as shapeHalfHeight, nt as shapeHalfWidth, W as shapeIsEmpty, U as shapeRadius, it as shapesOverlap, $e as snapEntity, et as startSpawnInterpolation, T as transformDefinition, _n as updateSpatialMap, j as velocityDefinition };
1578
+ export { Ce as BODY_BLOCKS_PATH_FLAG, ge as BODY_CATEGORY_INDEX, xe as BODY_CCD_FLAG, Se as BODY_DYING_FLAG, he as BODY_FLAGS_INDEX, _e as BODY_MASK_INDEX, be as BODY_SENSOR_FLAG, ye as BODY_SHAPE_MASK, ve as BODY_SIZE, Pe as BOUNCINESS_INDEX, Fe as BOUNCINESS_SIZE, u as COLLIDABLE_QUERY, qt as CollisionBroadphase, pe as DEFAULT_COLLIDE_CATEGORY, me as DEFAULT_COLLIDE_MASK, d as DEFAULT_PHYSICS_STEP_MS, te as DYNAMICS_ACCELERATION_X_INDEX, ne as DYNAMICS_ACCELERATION_Y_INDEX, re as DYNAMICS_INVERSE_MASS_INDEX, ie as DYNAMICS_SIZE, Ye as INTERPOLATION_CHANNEL_INDEX, Ve as INTERPOLATION_DURATION_INDEX, Qe as INTERPOLATION_PREVIOUS_DURATION_INDEX, et as INTERPOLATION_PREVIOUS_TICK_INDEX, $e as INTERPOLATION_PREVIOUS_TOTAL_DURATION_INDEX, Xe as INTERPOLATION_PREVIOUS_X_INDEX, Ze as INTERPOLATION_PREVIOUS_Y_INDEX, Ge as INTERPOLATION_REMAINING_DURATION_INDEX, tt as INTERPOLATION_SIZE, We as INTERPOLATION_SYNCED_DURATION_INDEX, Je as INTERPOLATION_SYNCED_STEP_DURATION_INDEX, Be as INTERPOLATION_SYNCED_TICK_INDEX, Ke as INTERPOLATION_TARGET_X_INDEX, qe as INTERPOLATION_TARGET_Y_INDEX, He as INTERPOLATION_TICK_INDEX, Ue as INTERPOLATION_TOTAL_DURATION_INDEX, Re as INTERPOLATION_X_INDEX, ze as INTERPOLATION_Y_INDEX, Hn as InterpolationSystem, b as MAX_POLYGON_VERTICES, C as POLYGON_SIZE, x as POLYGON_VERTEX_COUNT_INDEX, S as POLYGON_VERTICES_INDEX, l as POSITION_UPDATED_EVENT, Tt as PhysicalWorld, zn as PhysicsSystem, de as SHAPE_CAPSULE, ue as SHAPE_CIRCLE, fe as SHAPE_POLYGON, le as SHAPE_RECTANGLE, en as SpatialIndex, v as TRANSFORM_ANGLE_INDEX, _ as TRANSFORM_HEIGHT_INDEX, y as TRANSFORM_SIZE, g as TRANSFORM_WIDTH_INDEX, m as TRANSFORM_X_INDEX, h as TRANSFORM_Y_INDEX, N as VELOCITY_DAMPING_INDEX, P as VELOCITY_SIZE, j as VELOCITY_X_INDEX, M as VELOCITY_Y_INDEX, rn as addPhysicalWorldData, De as blocksPath, je as bodyDefinition, L as bodyShape, Le as bouncinessDefinition, _t as boundsHalfHeight, gt as boundsHalfWidth, Te as canCollide, H as capsuleCoreAngle, V as capsuleHalfLength, lt as contactNormal, wn as createPhysicsUpdate, oe as dynamicsDefinition, tn as getSpatialMap, sn as integrateDynamics, rt as interpolationDefinition, Vn as interpolationUpdate, Ee as isContinuous, Oe as isDying, R as isSensor, ke as markDying, vt as orientedBoxesOverlap, it as physicsRegistry, An as physicsUpdate, q as pointSegmentDistanceSquared, kt as polygonContactNormal, T as polygonDefinition, Ot as polygonShapesOverlap, E as preparePolygon, bt as segmentBoxDistanceSquared, yt as segmentSegmentDistanceSquared, nn as setEntityPosition, ot as shapeHalfHeight, at as shapeHalfWidth, W as shapeIsEmpty, U as shapeRadius, st as shapesOverlap, an as snapEntity, on as startSpawnInterpolation, A as transformDefinition, $ as updateSpatialMap, F as velocityDefinition };
1544
1579
 
1545
1580
  //# sourceMappingURL=index.js.map