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