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