@daneren2005/shared-memory-physics 1.8.0 → 1.9.1

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