@daneren2005/shared-memory-physics 1.7.3 → 1.9.0

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