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