@daneren2005/shared-memory-physics 1.8.0 → 1.9.0

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