@daneren2005/shared-memory-physics 1.5.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +159 -25
- package/dist/components/body-component.d.ts +7 -4
- package/dist/components/dynamics-component.d.ts +19 -0
- package/dist/components/polygon-component.d.ts +22 -0
- package/dist/components/registry.d.ts +8 -0
- package/dist/components/transform-component.d.ts +2 -0
- package/dist/components/velocity-component.d.ts +4 -1
- package/dist/index.d.ts +14 -5
- package/dist/index.js +713 -297
- package/dist/index.js.map +1 -1
- package/dist/math/polygons.d.ts +3 -0
- package/dist/systems/bounce.d.ts +2 -1
- package/dist/systems/collision.d.ts +13 -3
- package/dist/systems/dynamics.d.ts +43 -0
- package/dist/systems/interpolation-system.d.ts +2 -2
- package/dist/systems/physics-system.d.ts +13 -4
- package/dist/systems/physics-update.d.ts +10 -4
- package/dist/world.d.ts +12 -12
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -1,10 +1,68 @@
|
|
|
1
|
-
import { BaseWorld as e, Component as t,
|
|
1
|
+
import { BaseWorld as e, Component as t, DEAD_INDEX as n, EntityWorkerSystem as r } from "@daneren2005/shared-memory-ecs";
|
|
2
2
|
import { loadFloat32 as i, storeFloat32 as a } from "@daneren2005/shared-memory-objects/utils/float32-atomics";
|
|
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/components/polygon-component.ts
|
|
7
|
+
var l = 16, u = 0, d = 1, f = 33, p = class extends t {
|
|
8
|
+
get vertexCount() {
|
|
9
|
+
return this.block[0];
|
|
10
|
+
}
|
|
11
|
+
}, m = {
|
|
12
|
+
type: Float32Array,
|
|
13
|
+
size: 33,
|
|
14
|
+
loadProperties: ["vertices"],
|
|
15
|
+
toBlock(e) {
|
|
16
|
+
let t = h(e.vertices);
|
|
17
|
+
return [t.vertices.length / 2, ...t.vertices];
|
|
18
|
+
},
|
|
19
|
+
attach(e, t, n) {
|
|
20
|
+
return new p(t.getBlock(n), n);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
function h(e) {
|
|
24
|
+
if (!e || e.length < 3 || e.length > 16) throw Error("A polygon needs between 3 and 16 vertices");
|
|
25
|
+
let t = Infinity, n = Infinity, r = -Infinity, i = -Infinity;
|
|
26
|
+
for (let [a, o] of e) {
|
|
27
|
+
if (!Number.isFinite(a) || !Number.isFinite(o)) throw Error("Polygon vertices must be finite numbers");
|
|
28
|
+
t = Math.min(t, a), n = Math.min(n, o), r = Math.max(r, a), i = Math.max(i, o);
|
|
29
|
+
}
|
|
30
|
+
let a = r - t, o = i - n;
|
|
31
|
+
if (a <= 0 || o <= 0) throw Error("A polygon must have nonzero width and height");
|
|
32
|
+
let s = 0;
|
|
33
|
+
for (let t = 0; t < e.length; t++) {
|
|
34
|
+
let n = e[(t + e.length - 1) % e.length], r = e[t], i = e[(t + 1) % e.length], a = (r[0] - n[0]) * (i[1] - r[1]) - (r[1] - n[1]) * (i[0] - r[0]);
|
|
35
|
+
if (a === 0) throw Error("A polygon cannot contain duplicate or collinear adjacent vertices");
|
|
36
|
+
let o = Math.sign(a);
|
|
37
|
+
if (s === 0) s = o;
|
|
38
|
+
else if (o !== s) throw Error("Polygon vertices must describe a convex polygon in boundary order");
|
|
39
|
+
}
|
|
40
|
+
for (let t = 0; t < e.length; t++) {
|
|
41
|
+
let n = e[t], r = e[(t + 1) % e.length];
|
|
42
|
+
for (let i = t + 1; i < e.length; i++) {
|
|
43
|
+
if (i === t || i === t + 1 || t === 0 && i === e.length - 1) continue;
|
|
44
|
+
let a = e[i], o = e[(i + 1) % e.length];
|
|
45
|
+
if (g(n, r, a, o)) throw Error("Polygon edges cannot cross or share non-adjacent vertices");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
let c = (t + r) / 2, l = (n + i) / 2, u = [], d = s > 0 ? e : e.toReversed();
|
|
49
|
+
for (let [e, t] of d) u.push((e - c) / a, (t - l) / o);
|
|
50
|
+
return {
|
|
51
|
+
width: a,
|
|
52
|
+
height: o,
|
|
53
|
+
vertices: u
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function g(e, t, n, r) {
|
|
57
|
+
let i = _(e, t, n), a = _(e, t, r), o = _(n, r, e), s = _(n, r, t);
|
|
58
|
+
return i * a <= 0 && o * s <= 0;
|
|
59
|
+
}
|
|
60
|
+
function _(e, t, n) {
|
|
61
|
+
return (t[0] - e[0]) * (n[1] - e[1]) - (t[1] - e[1]) * (n[0] - e[0]);
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
6
64
|
//#region src/components/transform-component.ts
|
|
7
|
-
var
|
|
65
|
+
var v = 0, y = 1, b = 2, x = 3, S = 4, C = 5, w = class extends t {
|
|
8
66
|
get x() {
|
|
9
67
|
return this.block[0];
|
|
10
68
|
}
|
|
@@ -35,30 +93,36 @@ var l = 0, u = 1, d = 2, f = 3, p = 4, m = 5, h = class extends t {
|
|
|
35
93
|
set angle(e) {
|
|
36
94
|
this.block[4] = e;
|
|
37
95
|
}
|
|
38
|
-
},
|
|
96
|
+
}, T = {
|
|
39
97
|
type: Float32Array,
|
|
40
98
|
size: 5,
|
|
41
99
|
loadProperties: [
|
|
42
100
|
"width",
|
|
43
101
|
"height",
|
|
44
|
-
"radius"
|
|
102
|
+
"radius",
|
|
103
|
+
"vertices"
|
|
45
104
|
],
|
|
46
105
|
toBlock(e) {
|
|
47
|
-
let t = e.radius, n = e.
|
|
106
|
+
let t = e.radius, n = e.vertices, r = e.width, i = e.height;
|
|
107
|
+
if (n !== void 0) {
|
|
108
|
+
if (t !== void 0 || r !== void 0 || i !== void 0) throw Error("A transform takes polygon vertices, a radius, or a width and height");
|
|
109
|
+
let e = h(n);
|
|
110
|
+
r = e.width, i = e.height;
|
|
111
|
+
}
|
|
48
112
|
if (t !== void 0) {
|
|
49
|
-
if (
|
|
50
|
-
|
|
113
|
+
if (r !== void 0 || i !== void 0) throw Error("A transform takes either a radius or a width and height, not both");
|
|
114
|
+
r = i = t * 2;
|
|
51
115
|
}
|
|
52
116
|
return [
|
|
53
117
|
e.x,
|
|
54
118
|
e.y,
|
|
55
|
-
n,
|
|
56
119
|
r,
|
|
120
|
+
i,
|
|
57
121
|
e.angle ?? 0
|
|
58
122
|
];
|
|
59
123
|
},
|
|
60
124
|
attach(e, t, n) {
|
|
61
|
-
return new
|
|
125
|
+
return new w(t.getBlock(n), n);
|
|
62
126
|
},
|
|
63
127
|
save(e) {
|
|
64
128
|
return {
|
|
@@ -67,7 +131,7 @@ var l = 0, u = 1, d = 2, f = 3, p = 4, m = 5, h = class extends t {
|
|
|
67
131
|
angle: e.angle
|
|
68
132
|
};
|
|
69
133
|
}
|
|
70
|
-
},
|
|
134
|
+
}, E = 0, D = 1, O = 2, k = 3, A = class extends t {
|
|
71
135
|
get velocityX() {
|
|
72
136
|
return this.block[0];
|
|
73
137
|
}
|
|
@@ -80,52 +144,129 @@ var l = 0, u = 1, d = 2, f = 3, p = 4, m = 5, h = class extends t {
|
|
|
80
144
|
set velocityY(e) {
|
|
81
145
|
this.block[1] = e;
|
|
82
146
|
}
|
|
83
|
-
|
|
147
|
+
get damping() {
|
|
148
|
+
return this.block[2];
|
|
149
|
+
}
|
|
150
|
+
set damping(e) {
|
|
151
|
+
M(e), this.block[2] = e;
|
|
152
|
+
}
|
|
153
|
+
}, j = {
|
|
84
154
|
type: Float32Array,
|
|
85
|
-
size:
|
|
86
|
-
loadProperties: [
|
|
155
|
+
size: 3,
|
|
156
|
+
loadProperties: [
|
|
157
|
+
"velocityX",
|
|
158
|
+
"velocityY",
|
|
159
|
+
"damping"
|
|
160
|
+
],
|
|
87
161
|
toBlock(e) {
|
|
88
|
-
|
|
162
|
+
let t = e.damping ?? 0;
|
|
163
|
+
return M(t), [
|
|
164
|
+
e.velocityX ?? 0,
|
|
165
|
+
e.velocityY ?? 0,
|
|
166
|
+
t
|
|
167
|
+
];
|
|
89
168
|
},
|
|
90
169
|
attach(e, t, n) {
|
|
91
|
-
return new
|
|
170
|
+
return new A(t.getBlock(n), n);
|
|
92
171
|
},
|
|
93
172
|
save(e) {
|
|
94
173
|
return {
|
|
95
174
|
velocityX: e.velocityX,
|
|
96
|
-
velocityY: e.velocityY
|
|
175
|
+
velocityY: e.velocityY,
|
|
176
|
+
damping: e.damping
|
|
97
177
|
};
|
|
98
178
|
}
|
|
99
|
-
}
|
|
179
|
+
};
|
|
180
|
+
function M(e) {
|
|
181
|
+
if (!Number.isFinite(e) || e < 0) throw Error("Damping must be a finite number of at least zero");
|
|
182
|
+
}
|
|
183
|
+
//#endregion
|
|
184
|
+
//#region src/components/dynamics-component.ts
|
|
185
|
+
var N = 0, ee = 1, P = 2, F = 3, I = class extends t {
|
|
186
|
+
get accelerationX() {
|
|
187
|
+
return this.block[0];
|
|
188
|
+
}
|
|
189
|
+
set accelerationX(e) {
|
|
190
|
+
re(e, "Acceleration"), this.block[0] = e;
|
|
191
|
+
}
|
|
192
|
+
get accelerationY() {
|
|
193
|
+
return this.block[1];
|
|
194
|
+
}
|
|
195
|
+
set accelerationY(e) {
|
|
196
|
+
re(e, "Acceleration"), this.block[1] = e;
|
|
197
|
+
}
|
|
198
|
+
get mass() {
|
|
199
|
+
return 1 / this.block[2];
|
|
200
|
+
}
|
|
201
|
+
set mass(e) {
|
|
202
|
+
ne(e), this.block[2] = 1 / e;
|
|
203
|
+
}
|
|
204
|
+
}, te = {
|
|
205
|
+
type: Float32Array,
|
|
206
|
+
size: 3,
|
|
207
|
+
loadProperties: [
|
|
208
|
+
"accelerationX",
|
|
209
|
+
"accelerationY",
|
|
210
|
+
"mass"
|
|
211
|
+
],
|
|
212
|
+
toBlock(e) {
|
|
213
|
+
let t = e.accelerationX ?? 0, n = e.accelerationY ?? 0, r = e.mass ?? 1;
|
|
214
|
+
return re(t, "Acceleration"), re(n, "Acceleration"), ne(r), [
|
|
215
|
+
t,
|
|
216
|
+
n,
|
|
217
|
+
1 / r
|
|
218
|
+
];
|
|
219
|
+
},
|
|
220
|
+
attach(e, t, n) {
|
|
221
|
+
return new I(t.getBlock(n), n);
|
|
222
|
+
},
|
|
223
|
+
save(e) {
|
|
224
|
+
return {
|
|
225
|
+
accelerationX: e.accelerationX,
|
|
226
|
+
accelerationY: e.accelerationY,
|
|
227
|
+
mass: e.mass
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
function ne(e) {
|
|
232
|
+
if (!Number.isFinite(e) || e <= 0) throw Error("Mass must be a finite number greater than zero");
|
|
233
|
+
}
|
|
234
|
+
function re(e, t) {
|
|
235
|
+
if (!Number.isFinite(e)) throw Error(`${t} must be a finite number`);
|
|
236
|
+
}
|
|
237
|
+
//#endregion
|
|
238
|
+
//#region src/components/body-component.ts
|
|
239
|
+
var ie = 1, ae = 2, oe = 3, se = 4, ce = [
|
|
100
240
|
1,
|
|
101
241
|
2,
|
|
102
|
-
3
|
|
103
|
-
|
|
104
|
-
|
|
242
|
+
3,
|
|
243
|
+
4
|
|
244
|
+
], le = 1, ue = 4294967295;
|
|
245
|
+
function de(e, t, n, r) {
|
|
105
246
|
return (t & n) !== 0 && (r & e) !== 0;
|
|
106
247
|
}
|
|
107
|
-
var
|
|
108
|
-
function
|
|
109
|
-
return e[0] &
|
|
110
|
-
}
|
|
111
|
-
function A(e) {
|
|
112
|
-
return (e[0] & 4) != 0;
|
|
248
|
+
var fe = 0, pe = 1, me = 2, he = 3, ge = 7, _e = 8, ve = 16, ye = 32;
|
|
249
|
+
function L(e) {
|
|
250
|
+
return e[0] & 7;
|
|
113
251
|
}
|
|
114
|
-
function
|
|
252
|
+
function R(e) {
|
|
115
253
|
return (e[0] & 8) != 0;
|
|
116
254
|
}
|
|
117
|
-
function
|
|
255
|
+
function be(e) {
|
|
118
256
|
return (e[0] & 16) != 0;
|
|
119
257
|
}
|
|
120
|
-
function
|
|
121
|
-
e[0]
|
|
258
|
+
function xe(e) {
|
|
259
|
+
return (e[0] & 32) != 0;
|
|
122
260
|
}
|
|
123
|
-
|
|
261
|
+
function Se(e) {
|
|
262
|
+
e[0] |= 32;
|
|
263
|
+
}
|
|
264
|
+
var Ce = class extends t {
|
|
124
265
|
get shape() {
|
|
125
|
-
return this.block[0] &
|
|
266
|
+
return this.block[0] & 7;
|
|
126
267
|
}
|
|
127
268
|
set shape(e) {
|
|
128
|
-
this.block[0] = this.block[0] & -
|
|
269
|
+
this.block[0] = this.block[0] & -8 | e & 7;
|
|
129
270
|
}
|
|
130
271
|
get collideCategory() {
|
|
131
272
|
return this.block[1];
|
|
@@ -140,24 +281,25 @@ var ue = class extends t {
|
|
|
140
281
|
this.block[2] = e;
|
|
141
282
|
}
|
|
142
283
|
get sensor() {
|
|
143
|
-
return (this.block[0] &
|
|
284
|
+
return (this.block[0] & 8) != 0;
|
|
144
285
|
}
|
|
145
286
|
set sensor(e) {
|
|
146
|
-
this.block[0] = e ? this.block[0] |
|
|
287
|
+
this.block[0] = e ? this.block[0] | 8 : this.block[0] & -9;
|
|
147
288
|
}
|
|
148
289
|
get continuousCollisionDetection() {
|
|
149
|
-
return (this.block[0] &
|
|
290
|
+
return (this.block[0] & 16) != 0;
|
|
150
291
|
}
|
|
151
292
|
set continuousCollisionDetection(e) {
|
|
152
|
-
this.block[0] = e ? this.block[0] |
|
|
293
|
+
this.block[0] = e ? this.block[0] | 16 : this.block[0] & -17;
|
|
153
294
|
}
|
|
154
|
-
},
|
|
295
|
+
}, we = {
|
|
155
296
|
type: Uint32Array,
|
|
156
297
|
size: 3,
|
|
157
298
|
loadProperties: [
|
|
158
299
|
"width",
|
|
159
300
|
"height",
|
|
160
301
|
"radius",
|
|
302
|
+
"vertices",
|
|
161
303
|
"shape",
|
|
162
304
|
"collideCategory",
|
|
163
305
|
"collideMask",
|
|
@@ -166,35 +308,36 @@ var ue = class extends t {
|
|
|
166
308
|
],
|
|
167
309
|
toBlock(e) {
|
|
168
310
|
return [
|
|
169
|
-
|
|
311
|
+
Te(e),
|
|
170
312
|
e.collideCategory ?? 1,
|
|
171
313
|
e.collideMask ?? 4294967295
|
|
172
314
|
];
|
|
173
315
|
},
|
|
174
316
|
attach(e, t, n) {
|
|
175
|
-
return new
|
|
317
|
+
return new Ce(t.getBlock(n), n);
|
|
176
318
|
}
|
|
177
319
|
};
|
|
178
|
-
function
|
|
179
|
-
let t =
|
|
180
|
-
return e.sensor && (t |=
|
|
320
|
+
function Te(e) {
|
|
321
|
+
let t = Ee(e);
|
|
322
|
+
return e.sensor && (t |= 8), e.continuousCollisionDetection && (t |= 16), t;
|
|
181
323
|
}
|
|
182
|
-
function
|
|
324
|
+
function Ee(e) {
|
|
183
325
|
let t = e.shape;
|
|
184
|
-
if (t === void 0) return e.radius === void 0 ? 1 : 2;
|
|
185
|
-
if (!
|
|
326
|
+
if (t === void 0) return e.vertices === void 0 ? e.radius === void 0 ? 1 : 2 : 4;
|
|
327
|
+
if (!ce.includes(t)) throw Error(`Unknown body shape: ${t}`);
|
|
328
|
+
if (t === 4 && e.vertices === void 0) throw Error("A polygon body requires vertices");
|
|
186
329
|
return t;
|
|
187
330
|
}
|
|
188
331
|
//#endregion
|
|
189
332
|
//#region src/components/bounciness-component.ts
|
|
190
|
-
var
|
|
333
|
+
var De = 0, Oe = 1, ke = class extends t {
|
|
191
334
|
get bounciness() {
|
|
192
335
|
return this.block[0];
|
|
193
336
|
}
|
|
194
337
|
set bounciness(e) {
|
|
195
338
|
this.block[0] = e;
|
|
196
339
|
}
|
|
197
|
-
},
|
|
340
|
+
}, Ae = {
|
|
198
341
|
type: Float32Array,
|
|
199
342
|
size: 1,
|
|
200
343
|
loadProperties: ["bounciness"],
|
|
@@ -202,9 +345,9 @@ var me = 0, he = 1, ge = class extends t {
|
|
|
202
345
|
return [e.bounciness ?? 0];
|
|
203
346
|
},
|
|
204
347
|
attach(e, t, n) {
|
|
205
|
-
return new
|
|
348
|
+
return new ke(t.getBlock(n), n);
|
|
206
349
|
}
|
|
207
|
-
},
|
|
350
|
+
}, je = 0, Me = 1, Ne = 2, Pe = 3, Fe = 4, Ie = 5, Le = 6, Re = 7, ze = 8, Be = class extends t {
|
|
208
351
|
get x() {
|
|
209
352
|
return this.block[0];
|
|
210
353
|
}
|
|
@@ -253,7 +396,7 @@ var me = 0, he = 1, ge = class extends t {
|
|
|
253
396
|
set tick(e) {
|
|
254
397
|
a(this.block, 7, e);
|
|
255
398
|
}
|
|
256
|
-
},
|
|
399
|
+
}, Ve = {
|
|
257
400
|
type: Float32Array,
|
|
258
401
|
size: 8,
|
|
259
402
|
loadProperties: ["interpolate"],
|
|
@@ -271,14 +414,14 @@ var me = 0, he = 1, ge = class extends t {
|
|
|
271
414
|
];
|
|
272
415
|
},
|
|
273
416
|
attach(e, t, n) {
|
|
274
|
-
return new
|
|
417
|
+
return new Be(t.getBlock(n), n);
|
|
275
418
|
}
|
|
276
419
|
};
|
|
277
|
-
function
|
|
420
|
+
function He(e) {
|
|
278
421
|
let { transform: t, interpolation: n } = e.components;
|
|
279
422
|
!t || !n || (n.prevX = n.x = t.x, n.prevY = n.y = t.y);
|
|
280
423
|
}
|
|
281
|
-
function
|
|
424
|
+
function Ue(e, t) {
|
|
282
425
|
let { transform: n, velocity: r, interpolation: i } = e.components;
|
|
283
426
|
if (!n || !r || !i) return;
|
|
284
427
|
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;
|
|
@@ -286,142 +429,144 @@ function Ae(e, t) {
|
|
|
286
429
|
}
|
|
287
430
|
//#endregion
|
|
288
431
|
//#region src/components/registry.ts
|
|
289
|
-
var
|
|
290
|
-
transform:
|
|
291
|
-
velocity:
|
|
292
|
-
body:
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
432
|
+
var We = {
|
|
433
|
+
transform: T,
|
|
434
|
+
velocity: j,
|
|
435
|
+
body: we,
|
|
436
|
+
polygon: m,
|
|
437
|
+
bounciness: Ae,
|
|
438
|
+
dynamics: te,
|
|
439
|
+
interpolation: Ve
|
|
440
|
+
}, z = {
|
|
296
441
|
x: 0,
|
|
297
442
|
y: 0
|
|
298
|
-
},
|
|
443
|
+
}, B = {
|
|
299
444
|
x: 0,
|
|
300
445
|
y: 0
|
|
301
446
|
};
|
|
302
|
-
function
|
|
447
|
+
function V(e, t) {
|
|
303
448
|
return Math.max(0, (e - t) / 2);
|
|
304
449
|
}
|
|
305
|
-
function
|
|
450
|
+
function H(e, t, n) {
|
|
306
451
|
return e === 2 ? t / 2 : e === 3 ? n / 2 : 0;
|
|
307
452
|
}
|
|
308
|
-
function
|
|
453
|
+
function U(e, t, n) {
|
|
309
454
|
return e === 2 ? t <= 0 : e === 3 ? n <= 0 : t <= 0 || n <= 0;
|
|
310
455
|
}
|
|
311
|
-
function
|
|
312
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) *
|
|
456
|
+
function W(e, t, n, r) {
|
|
457
|
+
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) * V(t, n) + n / 2 : $e(t, n, r);
|
|
313
458
|
}
|
|
314
|
-
function
|
|
315
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) *
|
|
459
|
+
function G(e, t, n, r) {
|
|
460
|
+
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) * V(t, n) + n / 2 : et(t, n, r);
|
|
316
461
|
}
|
|
317
|
-
function
|
|
318
|
-
if (
|
|
462
|
+
function Ge(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
463
|
+
if (U(e, r, i) || U(o, l, u)) return !1;
|
|
319
464
|
let f = e !== 1, p = o !== 1;
|
|
320
|
-
if (!f && !p) return
|
|
321
|
-
if (f && !p) return
|
|
322
|
-
let m =
|
|
323
|
-
if (!f) return
|
|
324
|
-
let v =
|
|
325
|
-
return
|
|
465
|
+
if (!f && !p) return tt(t, n, r, i, a, s, c, l, u, d);
|
|
466
|
+
if (f && !p) return Ge(o, s, c, l, u, d, e, t, n, r, i, a);
|
|
467
|
+
let m = K(o, l, u), h = Math.cos(d) * m, g = Math.sin(d) * m, _ = H(o, l, u);
|
|
468
|
+
if (!f) return rt(s - h, c - g, s + h, c + g, t, n, r, i, a) < _ * _;
|
|
469
|
+
let v = K(e, r, i), y = Math.cos(a) * v, b = Math.sin(a) * v, x = H(e, r, i) + _;
|
|
470
|
+
return nt(t - y, n - b, t + y, n + b, s - h, c - g, s + h, c + g) < x * x;
|
|
326
471
|
}
|
|
327
|
-
function
|
|
328
|
-
return e === 3 ?
|
|
472
|
+
function K(e, t, n) {
|
|
473
|
+
return e === 3 ? V(t, n) : 0;
|
|
329
474
|
}
|
|
330
|
-
function
|
|
475
|
+
function Ke(e, t, n, r, i, a, o, s, c, l, u, d, f) {
|
|
331
476
|
let p = e !== 1, m = o !== 1;
|
|
332
|
-
return !p && !m ?
|
|
477
|
+
return !p && !m ? qe(t, n, r, i, a, s, c, l, u, d, f) : p && m ? Je(e, t, n, r, i, a, o, s, c, l, u, d, f) : p ? Ye(s, c, l, u, d, e, t, n, r, i, a, f) : Ye(t, n, r, i, a, o, s, c, l, u, d, f) ? (f.x = -f.x, f.y = -f.y, !0) : !1;
|
|
333
478
|
}
|
|
334
|
-
function
|
|
335
|
-
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 =
|
|
479
|
+
function qe(e, t, n, r, i, a, o, s, c, l, u) {
|
|
480
|
+
let d = Math.cos(i), f = Math.sin(i), p = Math.cos(l), m = Math.sin(l), h = n / 2, g = r / 2, _ = s / 2, v = c / 2, y = e - a, b = t - o, x = q(d, f, y, b, h, g, d, f, _, v, p, m);
|
|
336
481
|
u.x = d, u.y = f;
|
|
337
|
-
let S =
|
|
338
|
-
return S < x && (x = S, u.x = -f, u.y = d), S =
|
|
482
|
+
let S = q(-f, d, y, b, h, g, d, f, _, v, p, m);
|
|
483
|
+
return S < x && (x = S, u.x = -f, u.y = d), S = q(p, m, y, b, h, g, d, f, _, v, p, m), S < x && (x = S, u.x = p, u.y = m), S = q(-m, p, y, b, h, g, d, f, _, v, p, m), S < x && (u.x = -m, u.y = p), Ze(y, b, u), !0;
|
|
339
484
|
}
|
|
340
|
-
function
|
|
341
|
-
let p =
|
|
342
|
-
return y > 0 ? (f.x =
|
|
485
|
+
function Je(e, t, n, r, i, a, o, s, c, l, u, d, f) {
|
|
486
|
+
let p = K(e, r, i), m = Math.cos(a) * p, h = Math.sin(a) * p, g = K(o, l, u), _ = Math.cos(d) * g, v = Math.sin(d) * g, y = Math.sqrt(nt(t - m, n - h, t + m, n + h, s - _, c - v, s + _, c + v, z));
|
|
487
|
+
return y > 0 ? (f.x = z.x / y, f.y = z.y / y, !0) : Qe(t - s, n - c, f);
|
|
343
488
|
}
|
|
344
|
-
function
|
|
345
|
-
let f =
|
|
346
|
-
if (h > 0) return d.x =
|
|
347
|
-
let g = Math.cos(i), _ = Math.sin(i), v = o - e, y = s - t, b = v * g + y * _, x = -v * _ + y * g, S = p * g + m * _, C = -p * _ + m * g, w =
|
|
489
|
+
function Ye(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
490
|
+
let f = K(a, c, l), p = Math.cos(u) * f, m = Math.sin(u) * f, h = Math.sqrt(rt(o - p, s - m, o + p, s + m, e, t, n, r, i, z));
|
|
491
|
+
if (h > 0) return d.x = z.x / h, d.y = z.y / h, !0;
|
|
492
|
+
let g = Math.cos(i), _ = Math.sin(i), v = o - e, y = s - t, b = v * g + y * _, x = -v * _ + y * g, S = p * g + m * _, C = -p * _ + m * g, w = H(a, c, l), T = n / 2, E = r / 2, D = Xe(1, 0, b, x, S, C, w, T, E);
|
|
348
493
|
d.x = 1, d.y = 0;
|
|
349
|
-
let O =
|
|
350
|
-
O < D && (D = O, d.x = 0, d.y = 1),
|
|
351
|
-
let
|
|
352
|
-
return d.x =
|
|
494
|
+
let O = Xe(0, 1, b, x, S, C, w, T, E);
|
|
495
|
+
O < D && (D = O, d.x = 0, d.y = 1), Qe(-C, S, B) && (O = Xe(B.x, B.y, b, x, S, C, w, T, E), O < D && (d.x = B.x, d.y = B.y)), Ze(b, x, d);
|
|
496
|
+
let k = d.x, A = d.y;
|
|
497
|
+
return d.x = k * g - A * _, d.y = k * _ + A * g, !0;
|
|
353
498
|
}
|
|
354
|
-
function
|
|
499
|
+
function Xe(e, t, n, r, i, a, o, s, c) {
|
|
355
500
|
return s * Math.abs(e) + c * Math.abs(t) + (Math.abs(i * e + a * t) + o) - Math.abs(n * e + r * t);
|
|
356
501
|
}
|
|
357
|
-
function
|
|
502
|
+
function Ze(e, t, n) {
|
|
358
503
|
e * n.x + t * n.y < 0 && (n.x = -n.x, n.y = -n.y);
|
|
359
504
|
}
|
|
360
|
-
function
|
|
505
|
+
function Qe(e, t, n) {
|
|
361
506
|
let r = Math.sqrt(e * e + t * t);
|
|
362
507
|
return r === 0 ? !1 : (n.x = e / r, n.y = t / r, !0);
|
|
363
508
|
}
|
|
364
|
-
function
|
|
509
|
+
function $e(e, t, n) {
|
|
365
510
|
return (Math.abs(Math.cos(n)) * e + Math.abs(Math.sin(n)) * t) / 2;
|
|
366
511
|
}
|
|
367
|
-
function
|
|
512
|
+
function et(e, t, n) {
|
|
368
513
|
return (Math.abs(Math.sin(n)) * e + Math.abs(Math.cos(n)) * t) / 2;
|
|
369
514
|
}
|
|
370
|
-
function
|
|
515
|
+
function tt(e, t, n, r, i, a, o, s, c, l) {
|
|
371
516
|
if (n <= 0 || r <= 0 || s <= 0 || c <= 0) return !1;
|
|
372
517
|
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;
|
|
373
|
-
return
|
|
518
|
+
return q(u, d, v, y, m, h, u, d, g, _, f, p) > 0 && q(-d, u, v, y, m, h, u, d, g, _, f, p) > 0 && q(f, p, v, y, m, h, u, d, g, _, f, p) > 0 && q(-p, f, v, y, m, h, u, d, g, _, f, p) > 0;
|
|
374
519
|
}
|
|
375
|
-
function
|
|
520
|
+
function q(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
376
521
|
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);
|
|
377
522
|
}
|
|
378
|
-
function
|
|
523
|
+
function nt(e, t, n, r, i, a, o, s, c) {
|
|
379
524
|
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;
|
|
380
525
|
if (h <= 0 && g <= 0) return c && (c.x = p, c.y = m), p * p + m * m;
|
|
381
|
-
if (h <= 0) y =
|
|
526
|
+
if (h <= 0) y = Y(_ / g);
|
|
382
527
|
else {
|
|
383
528
|
let e = l * p + u * m;
|
|
384
|
-
if (g <= 0) v =
|
|
529
|
+
if (g <= 0) v = Y(-e / h);
|
|
385
530
|
else {
|
|
386
531
|
let t = l * d + u * f, n = h * g - t * t;
|
|
387
|
-
n !== 0 && (v =
|
|
532
|
+
n !== 0 && (v = Y((t * _ - e * g) / n)), y = (t * v + _) / g, y < 0 ? (y = 0, v = Y(-e / h)) : y > 1 && (y = 1, v = Y((t - e) / h));
|
|
388
533
|
}
|
|
389
534
|
}
|
|
390
535
|
let b = e + l * v - (i + d * y), x = t + u * v - (a + f * y);
|
|
391
536
|
return c && (c.x = b, c.y = x), b * b + x * x;
|
|
392
537
|
}
|
|
393
|
-
function
|
|
538
|
+
function rt(e, t, n, r, i, a, o, s, c, l) {
|
|
394
539
|
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;
|
|
395
|
-
if (!
|
|
396
|
-
if (!l) return Math.min(
|
|
397
|
-
let S =
|
|
398
|
-
S =
|
|
540
|
+
if (!at(v, y, b, x, f, p)) return l && (l.x = 0, l.y = 0), 0;
|
|
541
|
+
if (!l) return Math.min(ot(v, y, f, p), ot(b, x, f, p), J(-f, -p, v, y, b, x), J(f, -p, v, y, b, x), J(f, p, v, y, b, x), J(-f, p, v, y, b, x));
|
|
542
|
+
let S = ot(v, y, f, p, l);
|
|
543
|
+
S = it(S, ot(b, x, f, p, B), B, l, !1), S = it(S, J(-f, -p, v, y, b, x, B), B, l, !0), S = it(S, J(f, -p, v, y, b, x, B), B, l, !0), S = it(S, J(f, p, v, y, b, x, B), B, l, !0), S = it(S, J(-f, p, v, y, b, x, B), B, l, !0);
|
|
399
544
|
let C = l.x, w = l.y;
|
|
400
545
|
return l.x = C * u - w * d, l.y = C * d + w * u, S;
|
|
401
546
|
}
|
|
402
|
-
function
|
|
547
|
+
function it(e, t, n, r, i) {
|
|
403
548
|
return t >= e ? e : (r.x = i ? -n.x : n.x, r.y = i ? -n.y : n.y, t);
|
|
404
549
|
}
|
|
405
|
-
function
|
|
406
|
-
let s = i - n, c = a - r, l = s * s + c * c, u = l > 0 ?
|
|
550
|
+
function J(e, t, n, r, i, a, o) {
|
|
551
|
+
let s = i - n, c = a - r, l = s * s + c * c, u = l > 0 ? Y(((e - n) * s + (t - r) * c) / l) : 0, d = e - (n + s * u), f = t - (r + c * u);
|
|
407
552
|
return o && (o.x = d, o.y = f), d * d + f * f;
|
|
408
553
|
}
|
|
409
|
-
function
|
|
554
|
+
function at(e, t, n, r, i, a) {
|
|
410
555
|
if (Math.max(e, n) < -i || Math.min(e, n) > i || Math.max(t, r) < -a || Math.min(t, r) > a) return !0;
|
|
411
556
|
let o = -(r - t), s = n - e;
|
|
412
557
|
return Math.abs(o * e + s * t) > i * Math.abs(o) + a * Math.abs(s);
|
|
413
558
|
}
|
|
414
|
-
function
|
|
559
|
+
function ot(e, t, n, r, i) {
|
|
415
560
|
let a = Math.abs(e) - n, o = Math.abs(t) - r, s = a > 0 ? a : 0, c = o > 0 ? o : 0;
|
|
416
561
|
return i && (i.x = e < 0 ? -s : s, i.y = t < 0 ? -c : c), s * s + c * c;
|
|
417
562
|
}
|
|
418
|
-
function
|
|
563
|
+
function Y(e) {
|
|
419
564
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
420
565
|
}
|
|
421
566
|
//#endregion
|
|
422
567
|
//#region src/systems/spatial-bounds.ts
|
|
423
|
-
function
|
|
424
|
-
let t = e.transform, n = e.body ?
|
|
568
|
+
function X(e) {
|
|
569
|
+
let t = e.transform, n = e.body ? L(e.body) : 1, r = t[2], i = t[3], a = t[4], o = W(n, r, i, a), s = G(n, r, i, a), c = t[0], l = t[1];
|
|
425
570
|
return {
|
|
426
571
|
minX: c - o,
|
|
427
572
|
minY: l - s,
|
|
@@ -429,23 +574,23 @@ function K(e) {
|
|
|
429
574
|
maxY: l + s
|
|
430
575
|
};
|
|
431
576
|
}
|
|
432
|
-
function
|
|
577
|
+
function st(e, t, n, r, i) {
|
|
433
578
|
return e.minX <= r && e.maxX >= t && e.minY <= i && e.maxY >= n;
|
|
434
579
|
}
|
|
435
|
-
function
|
|
580
|
+
function ct(e, t) {
|
|
436
581
|
return t > e ? t - e : Math.max(1, Math.abs(e)) * 2 ** -52;
|
|
437
582
|
}
|
|
438
583
|
//#endregion
|
|
439
584
|
//#region src/world.ts
|
|
440
|
-
function
|
|
585
|
+
function lt(e, t) {
|
|
441
586
|
t.spatialMapMemory = e.spatialMap.getSharedMemory();
|
|
442
587
|
}
|
|
443
|
-
function
|
|
588
|
+
function ut(e) {
|
|
444
589
|
if (e.spatialMap) return e.spatialMap;
|
|
445
590
|
if (!e.heap || !e.spatialMapMemory) throw Error("Spatial system world is missing its shared MemoryHeap or spatial map");
|
|
446
591
|
return e.spatialMap = new o(e.heap, e.spatialMapMemory), e.spatialMap;
|
|
447
592
|
}
|
|
448
|
-
var
|
|
593
|
+
var dt = class extends e {
|
|
449
594
|
spatialMap;
|
|
450
595
|
spatialIds = /* @__PURE__ */ new Set();
|
|
451
596
|
constructor(e, t = {}) {
|
|
@@ -468,7 +613,7 @@ var Ye = class extends e {
|
|
|
468
613
|
this.spatialIds.delete(t.eid), this.spatialMap.remove(t.eid);
|
|
469
614
|
return;
|
|
470
615
|
}
|
|
471
|
-
let i =
|
|
616
|
+
let i = X({
|
|
472
617
|
transform: r,
|
|
473
618
|
body: n.body?.block
|
|
474
619
|
});
|
|
@@ -476,12 +621,12 @@ var Ye = class extends e {
|
|
|
476
621
|
}
|
|
477
622
|
searchSpatial(e, t, n, r, i) {
|
|
478
623
|
if (n < e || r < t) return [];
|
|
479
|
-
let a = [], o = Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(r) ? this.spatialMap.search(e, t,
|
|
624
|
+
let a = [], o = Number.isFinite(e) && Number.isFinite(t) && Number.isFinite(n) && Number.isFinite(r) ? this.spatialMap.search(e, t, ct(e, n), ct(t, r)) : this.spatialIds;
|
|
480
625
|
for (let s of o) {
|
|
481
626
|
let o = this.getEntityByEid(s);
|
|
482
627
|
if (!o || i && !i(o)) continue;
|
|
483
628
|
let c = o.components, l = c.transform?.block;
|
|
484
|
-
l &&
|
|
629
|
+
l && st(X({
|
|
485
630
|
transform: l,
|
|
486
631
|
body: c.body?.block
|
|
487
632
|
}), e, t, n, r) && a.push(o);
|
|
@@ -503,64 +648,255 @@ var Ye = class extends e {
|
|
|
503
648
|
return t ? [t] : [];
|
|
504
649
|
});
|
|
505
650
|
}
|
|
506
|
-
},
|
|
651
|
+
}, ft = {
|
|
652
|
+
min: 0,
|
|
653
|
+
max: 0
|
|
654
|
+
}, pt = {
|
|
655
|
+
min: 0,
|
|
656
|
+
max: 0
|
|
657
|
+
}, Z = {
|
|
658
|
+
overlap: !0,
|
|
659
|
+
depth: Infinity,
|
|
660
|
+
x: 0,
|
|
661
|
+
y: 0
|
|
662
|
+
};
|
|
663
|
+
function mt(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
|
|
664
|
+
return gt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !1);
|
|
665
|
+
}
|
|
666
|
+
function ht(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
|
|
667
|
+
return Z.depth = Infinity, !gt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, !0) || Z.depth === Infinity ? !1 : (m.x = Z.x, m.y = Z.y, !0);
|
|
668
|
+
}
|
|
669
|
+
function gt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) {
|
|
670
|
+
return !(e === 4 && (!t || !_t(t, n, r, i, a, o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || s === 4 && (!c || !_t(c, l, u, d, f, p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)) || e === 1 && !vt(o, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || s === 1 && !vt(p, e, t, n, r, i, a, o, s, c, l, u, d, f, p, m) || Tt(e) && c && !yt(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) || Tt(s) && t && !yt(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));
|
|
671
|
+
}
|
|
672
|
+
function _t(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b) {
|
|
673
|
+
let x = e[0], S = Math.cos(a), C = Math.sin(a);
|
|
674
|
+
for (let a = 0; a < x; a++) {
|
|
675
|
+
let w = (a + 1) % x, T = St(e, a, t, r, i, S, C), E = Ct(e, a, n, r, i, S, C), D = St(e, w, t, r, i, S, C);
|
|
676
|
+
if (!bt(E - Ct(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;
|
|
677
|
+
}
|
|
678
|
+
return !0;
|
|
679
|
+
}
|
|
680
|
+
function vt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) {
|
|
681
|
+
let g = Math.cos(e), _ = Math.sin(e);
|
|
682
|
+
return bt(g, _, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h) && bt(-_, g, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h);
|
|
683
|
+
}
|
|
684
|
+
function yt(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) {
|
|
685
|
+
let D = e === 3 ? V(r, i) : 0, O = Math.cos(a) * D, k = Math.sin(a) * D, A = t - O, j = n - k, M = t + O, N = n + k, ee = o[0], P = Math.cos(d), F = Math.sin(d);
|
|
686
|
+
for (let e = 0; e < ee; e++) {
|
|
687
|
+
let t = St(o, e, s, l, u, P, F), n = Ct(o, e, c, l, u, P, F), r = wt(A, j, M, N, t, n), i = A + (M - A) * r, a = j + (N - j) * r;
|
|
688
|
+
if (!bt(t - i, n - a, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E)) return !1;
|
|
689
|
+
}
|
|
690
|
+
return !0;
|
|
691
|
+
}
|
|
692
|
+
function bt(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
693
|
+
let _ = Math.hypot(e, t);
|
|
694
|
+
if (_ === 0) return !0;
|
|
695
|
+
e /= _, t /= _, xt(n, r, i, a, o, s, c, e, t, ft), xt(l, u, d, f, p, m, h, e, t, pt);
|
|
696
|
+
let v = ft.max - pt.min, y = pt.max - ft.min;
|
|
697
|
+
if (!g && (v <= 0 || y <= 0)) return !1;
|
|
698
|
+
if (g) {
|
|
699
|
+
let n, r;
|
|
700
|
+
v <= 0 ? (n = -v, r = -1) : y <= 0 ? (n = -y, r = 1) : v < y ? (n = v, r = -1) : (n = y, r = 1), n < Z.depth && (Z.depth = n, Z.x = e * r, Z.y = t * r);
|
|
701
|
+
}
|
|
702
|
+
return !0;
|
|
703
|
+
}
|
|
704
|
+
function xt(e, t, n, r, i, a, o, s, c, l) {
|
|
705
|
+
let u = n * s + r * c;
|
|
706
|
+
if (e === 2) {
|
|
707
|
+
let e = i / 2;
|
|
708
|
+
l.min = u - e, l.max = u + e;
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
if (e === 3) {
|
|
712
|
+
let e = V(i, a), t = Math.abs(s * Math.cos(o) + c * Math.sin(o)) * e + a / 2;
|
|
713
|
+
l.min = u - t, l.max = u + t;
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
716
|
+
if (e === 1) {
|
|
717
|
+
let e = Math.cos(o), t = Math.sin(o), n = Math.abs(s * e + c * t) * i / 2 + Math.abs(s * -t + c * e) * a / 2;
|
|
718
|
+
l.min = u - n, l.max = u + n;
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
if (!t) {
|
|
722
|
+
l.min = Infinity, l.max = -Infinity;
|
|
723
|
+
return;
|
|
724
|
+
}
|
|
725
|
+
let d = t[0], f = Math.cos(o), p = Math.sin(o);
|
|
726
|
+
l.min = Infinity, l.max = -Infinity;
|
|
727
|
+
for (let e = 0; e < d; e++) {
|
|
728
|
+
let o = St(t, e, n, i, a, f, p), u = Ct(t, e, r, i, a, f, p), d = o * s + u * c;
|
|
729
|
+
l.min = Math.min(l.min, d), l.max = Math.max(l.max, d);
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
function St(e, t, n, r, i, a, o) {
|
|
733
|
+
let s = 1 + t * 2;
|
|
734
|
+
return n + e[s] * r * a - e[s + 1] * i * o;
|
|
735
|
+
}
|
|
736
|
+
function Ct(e, t, n, r, i, a, o) {
|
|
737
|
+
let s = 1 + t * 2;
|
|
738
|
+
return n + e[s] * r * o + e[s + 1] * i * a;
|
|
739
|
+
}
|
|
740
|
+
function wt(e, t, n, r, i, a) {
|
|
741
|
+
let o = n - e, s = r - t, c = o * o + s * s;
|
|
742
|
+
return c === 0 ? 0 : Math.min(1, Math.max(0, ((i - e) * o + (a - t) * s) / c));
|
|
743
|
+
}
|
|
744
|
+
function Tt(e) {
|
|
745
|
+
return e === 2 || e === 3;
|
|
746
|
+
}
|
|
747
|
+
function Et(e, t, n, r, i, a) {
|
|
748
|
+
if (Pt(n, r, "Force"), Pt(i, a, "Impulse"), n === 0 && r === 0 && i === 0 && a === 0) return;
|
|
749
|
+
let o = e.get(t) ?? Nt(), s = {
|
|
750
|
+
...o,
|
|
751
|
+
forceX: o.forceX + n,
|
|
752
|
+
forceY: o.forceY + r,
|
|
753
|
+
impulseX: o.impulseX + i,
|
|
754
|
+
impulseY: o.impulseY + a
|
|
755
|
+
};
|
|
756
|
+
Pt(s.forceX, s.forceY, "Accumulated force"), Pt(s.impulseX, s.impulseY, "Accumulated impulse"), e.set(t, s);
|
|
757
|
+
}
|
|
758
|
+
function Dt(e, t, n) {
|
|
759
|
+
Ft(n), !(n.velocityX === void 0 && n.velocityY === void 0) && e.set(t, {
|
|
760
|
+
...e.get(t) ?? Nt(),
|
|
761
|
+
...n
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
function Ot(e, t) {
|
|
765
|
+
if (e.size === 0) return t;
|
|
766
|
+
let n = /* @__PURE__ */ new Map();
|
|
767
|
+
for (let [t, r] of e) n.set(t, { ...r });
|
|
768
|
+
return Mt(t, (e, t) => {
|
|
769
|
+
let r = n.get(e) ?? Nt();
|
|
770
|
+
n.set(e, {
|
|
771
|
+
forceX: r.forceX + t.forceX,
|
|
772
|
+
forceY: r.forceY + t.forceY,
|
|
773
|
+
impulseX: r.impulseX + t.impulseX,
|
|
774
|
+
impulseY: r.impulseY + t.impulseY,
|
|
775
|
+
velocityX: t.velocityX ?? r.velocityX,
|
|
776
|
+
velocityY: t.velocityY ?? r.velocityY
|
|
777
|
+
});
|
|
778
|
+
}), Array.from(n, ([e, t]) => ({
|
|
779
|
+
entityId: e,
|
|
780
|
+
...t
|
|
781
|
+
})).sort((e, t) => e.entityId - t.entityId);
|
|
782
|
+
}
|
|
783
|
+
function kt(e, t, n, r) {
|
|
784
|
+
let i = e.dynamicsCommands, a = i instanceof Float64Array ? i : void 0, o = At(i && !(i instanceof Float64Array) ? i : void 0, t), s = a ? jt(a, t) : -1, c = n[2];
|
|
785
|
+
if (!r && !o && s < 0 && c === 0) return;
|
|
786
|
+
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;
|
|
787
|
+
n[0] = g ?? y, n[1] = _ ?? b;
|
|
788
|
+
}
|
|
789
|
+
function At(e, t) {
|
|
790
|
+
if (!e) return;
|
|
791
|
+
let n = 0, r = e.length - 1;
|
|
792
|
+
for (; n <= r;) {
|
|
793
|
+
let i = n + r >>> 1, a = e[i];
|
|
794
|
+
if (a.entityId === t) return a;
|
|
795
|
+
a.entityId < t ? n = i + 1 : r = i - 1;
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
function jt(e, t) {
|
|
799
|
+
let n = 0, r = e.length / 8 - 1;
|
|
800
|
+
for (; n <= r;) {
|
|
801
|
+
let i = n + r >>> 1, a = i * 8, o = e[a + 0];
|
|
802
|
+
if (o === t) return a;
|
|
803
|
+
o < t ? n = i + 1 : r = i - 1;
|
|
804
|
+
}
|
|
805
|
+
return -1;
|
|
806
|
+
}
|
|
807
|
+
function Mt(e, t) {
|
|
808
|
+
if (e) {
|
|
809
|
+
if (!(e instanceof Float64Array)) {
|
|
810
|
+
for (let { entityId: n, ...r } of e) t(n, r);
|
|
811
|
+
return;
|
|
812
|
+
}
|
|
813
|
+
for (let n = 0; n < e.length; n += 8) {
|
|
814
|
+
let r = e[n + 5];
|
|
815
|
+
t(e[n + 0], {
|
|
816
|
+
forceX: e[n + 1],
|
|
817
|
+
forceY: e[n + 2],
|
|
818
|
+
impulseX: e[n + 3],
|
|
819
|
+
impulseY: e[n + 4],
|
|
820
|
+
velocityX: r & 1 ? e[n + 6] : void 0,
|
|
821
|
+
velocityY: r & 2 ? e[n + 7] : void 0
|
|
822
|
+
});
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
function Nt() {
|
|
827
|
+
return {
|
|
828
|
+
forceX: 0,
|
|
829
|
+
forceY: 0,
|
|
830
|
+
impulseX: 0,
|
|
831
|
+
impulseY: 0
|
|
832
|
+
};
|
|
833
|
+
}
|
|
834
|
+
function Pt(e, t, n) {
|
|
835
|
+
if (!Number.isFinite(e) || !Number.isFinite(t)) throw Error(`${n} must contain finite numbers`);
|
|
836
|
+
}
|
|
837
|
+
function Ft(e) {
|
|
838
|
+
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");
|
|
839
|
+
}
|
|
840
|
+
//#endregion
|
|
841
|
+
//#region src/systems/collision.ts
|
|
842
|
+
var It = 1e-4, Lt = 24, Rt = "collidable", Q = [], zt = 2 ** 26, Bt = {
|
|
507
843
|
fraction: 1,
|
|
508
|
-
blocking:
|
|
509
|
-
},
|
|
844
|
+
blocking: Q
|
|
845
|
+
}, Vt = class {
|
|
510
846
|
buckets = [];
|
|
511
847
|
hasBounciness = !1;
|
|
512
848
|
resolved = /* @__PURE__ */ new Set();
|
|
513
|
-
constructor(e, t) {
|
|
514
|
-
let
|
|
515
|
-
for (let
|
|
516
|
-
let e =
|
|
517
|
-
if (!
|
|
518
|
-
let
|
|
519
|
-
if (
|
|
520
|
-
let
|
|
521
|
-
if (
|
|
522
|
-
let
|
|
849
|
+
constructor(e, t, n) {
|
|
850
|
+
let r = /* @__PURE__ */ new Map(), i = n instanceof Float64Array ? n : void 0, a = n && !(n instanceof Float64Array) ? n : void 0;
|
|
851
|
+
for (let n of e) {
|
|
852
|
+
let e = n.components, o = e.transform, s = e.body;
|
|
853
|
+
if (!o || !s) continue;
|
|
854
|
+
let c = s[1];
|
|
855
|
+
if (c === 0) continue;
|
|
856
|
+
let l = L(s), u = o[2], d = o[3];
|
|
857
|
+
if (U(l, u, d)) continue;
|
|
858
|
+
let f = o[4], p = W(l, u, d, f), m = G(l, u, d, f);
|
|
523
859
|
e.bounciness && (this.hasBounciness = !0);
|
|
524
|
-
let
|
|
525
|
-
|
|
860
|
+
let h = e.velocity, g = e.dynamics, _ = At(a, n.entityId), v = i ? jt(i, n.entityId) : -1, y = g?.[2] ?? 1, b = v < 0 ? _?.forceX ?? 0 : i[v + 1], x = v < 0 ? _?.forceY ?? 0 : i[v + 2], S = v < 0 ? _?.impulseX ?? 0 : i[v + 3], C = v < 0 ? _?.impulseY ?? 0 : i[v + 4], w = v < 0 ? 0 : i[v + 5], T = v < 0 ? _?.velocityX : w & 1 ? i[v + 6] : void 0, E = v < 0 ? _?.velocityY : w & 2 ? i[v + 7] : void 0, D = h?.[0] ?? 0, O = h?.[1] ?? 0, k = D + (g?.[0] ?? 0) * t + b * y * t + S * y, A = O + (g?.[1] ?? 0) * t + x * y * t + C * y, j = T ?? k, M = E ?? A, N = Math.max(Math.abs(D), Math.abs(j)) * t, ee = Math.max(Math.abs(O), Math.abs(M)) * t, P = o[0], F = o[1], I = r.get(c);
|
|
861
|
+
I || (I = {
|
|
526
862
|
entries: [],
|
|
527
863
|
bounds: []
|
|
528
|
-
},
|
|
529
|
-
entityId:
|
|
864
|
+
}, r.set(c, I)), I.entries.push({
|
|
865
|
+
entityId: n.entityId,
|
|
530
866
|
components: e
|
|
531
|
-
}),
|
|
867
|
+
}), I.bounds.push(P - p - N, F - m - ee, P + p + N, F + m + ee);
|
|
532
868
|
}
|
|
533
|
-
for (let [e, { entries: t, bounds:
|
|
534
|
-
let
|
|
535
|
-
for (let e = 0; e < t.length; e++)
|
|
536
|
-
|
|
869
|
+
for (let [e, { entries: t, bounds: n }] of r) {
|
|
870
|
+
let r = new s(t.length);
|
|
871
|
+
for (let e = 0; e < t.length; e++) r.add(n[e * 4], n[e * 4 + 1], n[e * 4 + 2], n[e * 4 + 3]);
|
|
872
|
+
r.finish(), this.buckets.push({
|
|
537
873
|
category: e,
|
|
538
874
|
entries: t,
|
|
539
|
-
index:
|
|
875
|
+
index: r
|
|
540
876
|
});
|
|
541
877
|
}
|
|
542
878
|
}
|
|
543
879
|
claimContact(e, t) {
|
|
544
|
-
let n = e < t ? e *
|
|
880
|
+
let n = e < t ? e * zt + t : t * zt + e;
|
|
545
881
|
return this.resolved.has(n) ? !1 : (this.resolved.add(n), !0);
|
|
546
882
|
}
|
|
547
883
|
forEachOverlapping(e, t, n = 0, r = 0) {
|
|
548
|
-
let i =
|
|
884
|
+
let i = Wt(e);
|
|
549
885
|
if (!i) return;
|
|
550
886
|
let { x: a, y: o, halfWidth: s, halfHeight: c } = i;
|
|
551
887
|
if (i.ccd && (n !== 0 || r !== 0)) {
|
|
552
888
|
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;
|
|
553
889
|
this.forEachCandidate(i, u, d, f, p, (a) => {
|
|
554
|
-
|
|
890
|
+
Gt(i, e, l, n, r, a) && t(a);
|
|
555
891
|
});
|
|
556
892
|
return;
|
|
557
893
|
}
|
|
558
894
|
this.forEachCandidate(i, a - s, o - c, a + s, o + c, (e) => {
|
|
559
|
-
|
|
895
|
+
$(i, a, o, e) && t(e);
|
|
560
896
|
});
|
|
561
897
|
}
|
|
562
898
|
contactPoint(e, t, n, r) {
|
|
563
|
-
let i = e.components.transform, a = i[0], o = i[1], s = Math.sqrt(n * n + r * r), c =
|
|
899
|
+
let i = e.components.transform, a = i[0], o = i[1], s = Math.sqrt(n * n + r * r), c = Wt(e);
|
|
564
900
|
if (!c || s === 0) return {
|
|
565
901
|
x: a,
|
|
566
902
|
y: o
|
|
@@ -572,25 +908,34 @@ var Ye = class extends e {
|
|
|
572
908
|
y: c.y + r * l
|
|
573
909
|
};
|
|
574
910
|
}
|
|
911
|
+
contactNormal(e, t, n, r, i) {
|
|
912
|
+
let a = Wt(e);
|
|
913
|
+
if (!a) return !1;
|
|
914
|
+
let o = n === 0 && r === 0 ? {
|
|
915
|
+
x: a.x,
|
|
916
|
+
y: a.y
|
|
917
|
+
} : this.contactPoint(e, t, n, r);
|
|
918
|
+
return Ht(a, o.x, o.y, t, i);
|
|
919
|
+
}
|
|
575
920
|
sweep(e, t, n) {
|
|
576
|
-
let r = Math.sqrt(t * t + n * n), i =
|
|
921
|
+
let r = Math.sqrt(t * t + n * n), i = Wt(e);
|
|
577
922
|
if (!i || r === 0) return {
|
|
578
923
|
fraction: 1,
|
|
579
|
-
blocking:
|
|
924
|
+
blocking: Q
|
|
580
925
|
};
|
|
581
926
|
if (i.ccd) return this.sweepContinuous(i, t, n, r);
|
|
582
927
|
let a = this.gatherCandidates(i, t, n);
|
|
583
928
|
return a.length === 0 ? {
|
|
584
929
|
fraction: 1,
|
|
585
|
-
blocking:
|
|
930
|
+
blocking: Q
|
|
586
931
|
} : this.refine(i, a, t, n, r);
|
|
587
932
|
}
|
|
588
933
|
resolveMove(e, t, n, r) {
|
|
589
|
-
let i = Math.sqrt(t * t + n * n), a =
|
|
934
|
+
let i = Math.sqrt(t * t + n * n), a = Wt(e);
|
|
590
935
|
if (!a || i === 0) return {
|
|
591
936
|
moveX: t,
|
|
592
937
|
moveY: n,
|
|
593
|
-
blocking:
|
|
938
|
+
blocking: Q
|
|
594
939
|
};
|
|
595
940
|
if (a.ccd) {
|
|
596
941
|
let e = this.sweepContinuous(a, t, n, i);
|
|
@@ -604,20 +949,20 @@ var Ye = class extends e {
|
|
|
604
949
|
if (o.length === 0) return {
|
|
605
950
|
moveX: t,
|
|
606
951
|
moveY: n,
|
|
607
|
-
blocking:
|
|
952
|
+
blocking: Q
|
|
608
953
|
};
|
|
609
954
|
if (r && t !== 0 && n !== 0) {
|
|
610
955
|
let e = this.gatherCandidates(a, t, 0), r = this.gatherCandidates(a, 0, n);
|
|
611
956
|
if (e.length === 0 && r.length === 0) return Math.abs(t) >= Math.abs(n) ? {
|
|
612
957
|
moveX: t,
|
|
613
958
|
moveY: 0,
|
|
614
|
-
blocking:
|
|
959
|
+
blocking: Q
|
|
615
960
|
} : {
|
|
616
961
|
moveX: 0,
|
|
617
962
|
moveY: n,
|
|
618
|
-
blocking:
|
|
963
|
+
blocking: Q
|
|
619
964
|
};
|
|
620
|
-
let i = e.length === 0 ?
|
|
965
|
+
let i = e.length === 0 ? Bt : this.refine(a, e, t, 0, Math.abs(t)), o = r.length === 0 ? Bt : this.refine(a, r, 0, n, Math.abs(n)), s = t * i.fraction, c = n * o.fraction;
|
|
621
966
|
if (s !== 0 && c !== 0) {
|
|
622
967
|
let e = this.gatherCandidates(a, s, c);
|
|
623
968
|
if (e.length > 0) {
|
|
@@ -632,7 +977,7 @@ var Ye = class extends e {
|
|
|
632
977
|
return {
|
|
633
978
|
moveX: s,
|
|
634
979
|
moveY: c,
|
|
635
|
-
blocking:
|
|
980
|
+
blocking: Ut(i.blocking, o.blocking)
|
|
636
981
|
};
|
|
637
982
|
}
|
|
638
983
|
let s = this.refine(a, o, t, n, i);
|
|
@@ -647,19 +992,19 @@ var Ye = class extends e {
|
|
|
647
992
|
if (e.sensor) return [];
|
|
648
993
|
let s = r + t, c = i + n, l = [];
|
|
649
994
|
return this.forEachCandidate(e, s - a, c - o, s + a, c + o, (t) => {
|
|
650
|
-
|
|
995
|
+
$(e, s, c, t) && (R(t.components.body) || $(e, r, i, t) || l.push(t));
|
|
651
996
|
}), l;
|
|
652
997
|
}
|
|
653
998
|
refine(e, t, n, r, i) {
|
|
654
|
-
let { x: a, y: o } = e, s = 0, c = 1, l =
|
|
655
|
-
for (let i = 0; i <
|
|
999
|
+
let { x: a, y: o } = e, s = 0, c = 1, l = It / i;
|
|
1000
|
+
for (let i = 0; i < Lt && c - s > l; i++) {
|
|
656
1001
|
let i = (s + c) / 2;
|
|
657
1002
|
this.blockedAt(e, t, n, r, i) ? c = i : s = i;
|
|
658
1003
|
}
|
|
659
1004
|
let u = [], d = a + n * c, f = o + r * c;
|
|
660
|
-
for (let n of t)
|
|
1005
|
+
for (let n of t) $(e, d, f, n) && u.push(n);
|
|
661
1006
|
return {
|
|
662
|
-
fraction: s * i >
|
|
1007
|
+
fraction: s * i > It ? s : 0,
|
|
663
1008
|
blocking: u
|
|
664
1009
|
};
|
|
665
1010
|
}
|
|
@@ -667,22 +1012,22 @@ var Ye = class extends e {
|
|
|
667
1012
|
if (e.sensor) return [];
|
|
668
1013
|
let { x: r, y: i, halfWidth: a, halfHeight: o } = e, s = r + t, c = i + n, l = [];
|
|
669
1014
|
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) => {
|
|
670
|
-
|
|
1015
|
+
R(a.components.body) || $(e, r, i, a) || Gt(e, r, i, t, n, a) && l.push(a);
|
|
671
1016
|
}), l;
|
|
672
1017
|
}
|
|
673
1018
|
sweepContinuous(e, t, n, r) {
|
|
674
1019
|
let i = this.gatherContinuousCandidates(e, t, n);
|
|
675
1020
|
if (i.length === 0) return {
|
|
676
1021
|
fraction: 1,
|
|
677
|
-
blocking:
|
|
1022
|
+
blocking: Q
|
|
678
1023
|
};
|
|
679
|
-
let a = 1, o = [], s =
|
|
1024
|
+
let a = 1, o = [], s = It / r;
|
|
680
1025
|
for (let c of i) {
|
|
681
1026
|
let i = this.entryFraction(e, c, t, n, r);
|
|
682
1027
|
i < a - s ? (a = i, o = [c]) : i <= a + s && o.push(c);
|
|
683
1028
|
}
|
|
684
1029
|
return {
|
|
685
|
-
fraction: a * r >
|
|
1030
|
+
fraction: a * r > It ? a : 0,
|
|
686
1031
|
blocking: o
|
|
687
1032
|
};
|
|
688
1033
|
}
|
|
@@ -690,82 +1035,90 @@ var Ye = class extends e {
|
|
|
690
1035
|
let a;
|
|
691
1036
|
if (this.blockedAtOne(e, t, n, r, 1)) a = 1;
|
|
692
1037
|
else {
|
|
693
|
-
let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l =
|
|
1038
|
+
let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l = Kt((s * n + c * r) / (i * i));
|
|
694
1039
|
if (!this.blockedAtOne(e, t, n, r, l)) return l;
|
|
695
1040
|
a = l;
|
|
696
1041
|
}
|
|
697
|
-
let o = 0, s =
|
|
698
|
-
for (let i = 0; i <
|
|
1042
|
+
let o = 0, s = It / i;
|
|
1043
|
+
for (let i = 0; i < Lt && a - o > s; i++) {
|
|
699
1044
|
let i = (o + a) / 2;
|
|
700
1045
|
this.blockedAtOne(e, t, n, r, i) ? a = i : o = i;
|
|
701
1046
|
}
|
|
702
1047
|
return o;
|
|
703
1048
|
}
|
|
704
1049
|
blockedAtOne(e, t, n, r, i) {
|
|
705
|
-
return
|
|
1050
|
+
return $(e, Math.fround(e.x + n * i), Math.fround(e.y + r * i), t);
|
|
706
1051
|
}
|
|
707
1052
|
blockedAt(e, t, n, r, i) {
|
|
708
1053
|
let a = Math.fround(e.x + n * i), o = Math.fround(e.y + r * i);
|
|
709
|
-
for (let n of t) if (
|
|
1054
|
+
for (let n of t) if ($(e, a, o, n)) return !0;
|
|
710
1055
|
return !1;
|
|
711
1056
|
}
|
|
712
|
-
forEachCandidate(e, t,
|
|
713
|
-
for (let s of this.buckets) if ((e.mask & s.category) !== 0) for (let c of s.index.search(t,
|
|
1057
|
+
forEachCandidate(e, t, r, i, a, o) {
|
|
1058
|
+
for (let s of this.buckets) if ((e.mask & s.category) !== 0) for (let c of s.index.search(t, r, i, a)) {
|
|
714
1059
|
let t = s.entries[c];
|
|
715
|
-
t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[
|
|
1060
|
+
t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[n] !== 1 && (xe(t.components.body) || o(t));
|
|
716
1061
|
}
|
|
717
1062
|
}
|
|
718
1063
|
};
|
|
719
|
-
function
|
|
1064
|
+
function Ht(e, t, n, r, i) {
|
|
1065
|
+
let a = r.components.transform, o = L(r.components.body), s = a[0], c = a[1], l = a[2], u = a[3], d = a[4];
|
|
1066
|
+
return e.shape === 4 || o === 4 ? ht(e.shape, e.polygon, t, n, e.width, e.height, e.angle, o, r.components.polygon, s, c, l, u, d, i) : Ke(e.shape, t, n, e.width, e.height, e.angle, o, s, c, l, u, d, i);
|
|
1067
|
+
}
|
|
1068
|
+
function Ut(e, t) {
|
|
720
1069
|
if (e.length === 0) return t;
|
|
721
1070
|
if (t.length === 0) return e;
|
|
722
1071
|
let n = [...e];
|
|
723
1072
|
for (let e of t) n.some((t) => t.entityId === e.entityId) || n.push(e);
|
|
724
1073
|
return n;
|
|
725
1074
|
}
|
|
726
|
-
function
|
|
1075
|
+
function Wt(e) {
|
|
727
1076
|
let t = e.components.body;
|
|
728
1077
|
if (!t) return;
|
|
729
1078
|
let n = t[2];
|
|
730
1079
|
if (n === 0) return;
|
|
731
|
-
let r = e.components.transform, i =
|
|
732
|
-
if (
|
|
733
|
-
let s = r[4];
|
|
734
|
-
return {
|
|
1080
|
+
let r = e.components.transform, i = L(t), a = r[2], o = r[3];
|
|
1081
|
+
if (U(i, a, o)) return;
|
|
1082
|
+
let s = r[4], c = e.components.polygon;
|
|
1083
|
+
if (!(i === 4 && !c)) return {
|
|
735
1084
|
entityId: e.entityId,
|
|
736
1085
|
shape: i,
|
|
1086
|
+
polygon: c,
|
|
737
1087
|
x: r[0],
|
|
738
1088
|
y: r[1],
|
|
739
1089
|
width: a,
|
|
740
1090
|
height: o,
|
|
741
1091
|
angle: s,
|
|
742
|
-
halfWidth:
|
|
743
|
-
halfHeight:
|
|
1092
|
+
halfWidth: W(i, a, o, s),
|
|
1093
|
+
halfHeight: G(i, a, o, s),
|
|
744
1094
|
category: t[1],
|
|
745
1095
|
mask: n,
|
|
746
|
-
sensor:
|
|
747
|
-
ccd:
|
|
1096
|
+
sensor: R(t),
|
|
1097
|
+
ccd: be(t)
|
|
748
1098
|
};
|
|
749
1099
|
}
|
|
750
|
-
function
|
|
751
|
-
let o = t + r, s = n + i, c = a.components.transform, l =
|
|
752
|
-
if (e.shape === 1) {
|
|
753
|
-
let
|
|
754
|
-
return
|
|
755
|
-
}
|
|
756
|
-
let h =
|
|
757
|
-
return
|
|
1100
|
+
function Gt(e, t, n, r, i, a) {
|
|
1101
|
+
let o = t + r, s = n + i, c = a.components.transform, l = L(a.components.body), u = c[0], d = c[1], f = c[2], p = c[3], m = c[4];
|
|
1102
|
+
if (e.shape === 1 || e.shape === 4) {
|
|
1103
|
+
let c = Math.cos(e.angle), h = Math.sin(e.angle), g = r * c + i * h, _ = -r * h + i * c;
|
|
1104
|
+
return qt(1, void 0, (t + o) / 2, (n + s) / 2, e.width + Math.abs(g), e.height + Math.abs(_), e.angle, l, a.components.polygon, u, d, f, p, m);
|
|
1105
|
+
}
|
|
1106
|
+
let h = H(e.shape, e.width, e.height), g = Math.sqrt(r * r + i * i), _ = g > 0 ? Math.atan2(i, r) : e.angle;
|
|
1107
|
+
return qt(3, void 0, (t + o) / 2, (n + s) / 2, g + h * 2, h * 2, _, l, a.components.polygon, u, d, f, p, m) ? !0 : qt(e.shape, e.polygon, o, s, e.width, e.height, e.angle, l, a.components.polygon, u, d, f, p, m);
|
|
758
1108
|
}
|
|
759
|
-
function
|
|
1109
|
+
function Kt(e) {
|
|
760
1110
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
761
1111
|
}
|
|
762
|
-
function
|
|
1112
|
+
function $(e, t, n, r) {
|
|
763
1113
|
let i = r.components.transform;
|
|
764
|
-
return
|
|
1114
|
+
return qt(e.shape, e.polygon, t, n, e.width, e.height, e.angle, L(r.components.body), r.components.polygon, i[0], i[1], i[2], i[3], i[4]);
|
|
1115
|
+
}
|
|
1116
|
+
function qt(e, t, n, r, i, a, o, s, c, l, u, d, f, p) {
|
|
1117
|
+
return e !== 4 && s !== 4 ? Ge(e, n, r, i, a, o, s, l, u, d, f, p) : mt(e, t, n, r, i, a, o, s, c, l, u, d, f, p);
|
|
765
1118
|
}
|
|
766
1119
|
//#endregion
|
|
767
1120
|
//#region src/systems/spatial-index.ts
|
|
768
|
-
var
|
|
1121
|
+
var Jt = class {
|
|
769
1122
|
entries = [];
|
|
770
1123
|
index;
|
|
771
1124
|
constructor(e) {
|
|
@@ -773,7 +1126,7 @@ var it = class {
|
|
|
773
1126
|
for (let n of e) {
|
|
774
1127
|
let e = n.components, r = e.transform;
|
|
775
1128
|
if (!r) continue;
|
|
776
|
-
let i = e.body, a = i ?
|
|
1129
|
+
let i = e.body, a = i ? L(i) : 1, o = r[2], s = r[3], c = r[4], l = r[0], u = r[1], d = W(a, o, s, c), f = G(a, o, s, c);
|
|
777
1130
|
this.entries.push({
|
|
778
1131
|
entityId: n.entityId,
|
|
779
1132
|
components: e
|
|
@@ -805,14 +1158,14 @@ var it = class {
|
|
|
805
1158
|
let o = this.entries;
|
|
806
1159
|
return (i ? a.neighbors(e, t, n, r, (e) => i(o[e])) : a.neighbors(e, t, n, r)).map((e) => o[e]);
|
|
807
1160
|
}
|
|
808
|
-
},
|
|
1161
|
+
}, Yt = {
|
|
809
1162
|
x: 0,
|
|
810
1163
|
y: 0
|
|
811
1164
|
};
|
|
812
|
-
function
|
|
813
|
-
|
|
1165
|
+
function Xt(e, t, n = !1) {
|
|
1166
|
+
!$t(e, n) && !$t(t, n) || en(e, t) && tn(e, t, Yt) && (Qt(e, Yt.x, Yt.y, n), Qt(t, -Yt.x, -Yt.y, n));
|
|
814
1167
|
}
|
|
815
|
-
function
|
|
1168
|
+
function Zt(e, t, n) {
|
|
816
1169
|
let r = e.components.bounciness, i = e.components.velocity;
|
|
817
1170
|
if (!r || !i) return;
|
|
818
1171
|
let a = i[0], o = i[1], s = a * t + o * n;
|
|
@@ -820,98 +1173,132 @@ function ot(e, t, n) {
|
|
|
820
1173
|
let c = (1 + r[0]) * s;
|
|
821
1174
|
i[0] = a - c * t, i[1] = o - c * n;
|
|
822
1175
|
}
|
|
823
|
-
function
|
|
824
|
-
|
|
1176
|
+
function Qt(e, t, n, r) {
|
|
1177
|
+
if (e.components.bounciness) {
|
|
1178
|
+
Zt(e, t, n);
|
|
1179
|
+
return;
|
|
1180
|
+
}
|
|
1181
|
+
let i = e.components.velocity;
|
|
1182
|
+
if (!r || !i) return;
|
|
1183
|
+
let a = i[0], o = i[1], s = a * t + o * n;
|
|
1184
|
+
s < 0 && (i[0] = a - s * t, i[1] = o - s * n);
|
|
825
1185
|
}
|
|
826
|
-
function
|
|
827
|
-
return
|
|
1186
|
+
function $t(e, t) {
|
|
1187
|
+
return e.components.velocity !== void 0 && (t || e.components.bounciness !== void 0);
|
|
828
1188
|
}
|
|
829
|
-
function
|
|
830
|
-
|
|
831
|
-
return Me(ut(e.components.body), r[0], r[1], r[2], r[3], r[4], ut(t.components.body), i[0], i[1], i[2], i[3], i[4], n);
|
|
1189
|
+
function en(e, t) {
|
|
1190
|
+
return !rn(e.components.body) && !rn(t.components.body);
|
|
832
1191
|
}
|
|
833
|
-
function
|
|
834
|
-
|
|
1192
|
+
function tn(e, t, n) {
|
|
1193
|
+
let r = e.components.transform, i = t.components.transform, a = nn(e.components.body), o = nn(t.components.body);
|
|
1194
|
+
return a === 4 || o === 4 ? ht(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) : Ke(a, r[0], r[1], r[2], r[3], r[4], o, i[0], i[1], i[2], i[3], i[4], n);
|
|
1195
|
+
}
|
|
1196
|
+
function nn(e) {
|
|
1197
|
+
return e ? L(e) : 1;
|
|
835
1198
|
}
|
|
836
|
-
function
|
|
837
|
-
return e !== void 0 &&
|
|
1199
|
+
function rn(e) {
|
|
1200
|
+
return e !== void 0 && R(e);
|
|
838
1201
|
}
|
|
839
1202
|
//#endregion
|
|
840
1203
|
//#region src/systems/physics-update.ts
|
|
841
|
-
function
|
|
1204
|
+
function an(e, t, n) {
|
|
842
1205
|
if (!e.spatialMap && (!e.heap || !e.spatialMapMemory)) return;
|
|
843
|
-
let r =
|
|
1206
|
+
let r = ut(e), i = X(n);
|
|
844
1207
|
r.update(t, i.minX, i.minY, i.maxX - i.minX, i.maxY - i.minY);
|
|
845
1208
|
}
|
|
846
|
-
var
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
1209
|
+
var on = "position-updated", sn = {
|
|
1210
|
+
x: 0,
|
|
1211
|
+
y: 0
|
|
1212
|
+
};
|
|
1213
|
+
function cn(e = {}) {
|
|
1214
|
+
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) => {
|
|
1215
|
+
if (c.entity?.[n] === 1) return;
|
|
1216
|
+
if (c.body !== void 0 && xe(c.body)) {
|
|
1217
|
+
u.entityDied(r);
|
|
852
1218
|
return;
|
|
853
1219
|
}
|
|
854
|
-
let
|
|
855
|
-
if (i && e.skipGroup ===
|
|
856
|
-
let
|
|
857
|
-
entityId:
|
|
858
|
-
components:
|
|
859
|
-
},
|
|
860
|
-
|
|
861
|
-
let
|
|
862
|
-
|
|
863
|
-
|
|
1220
|
+
let d = i ? un(c, i) : 0;
|
|
1221
|
+
if (i && e.skipGroup === d) return;
|
|
1222
|
+
let f = {
|
|
1223
|
+
entityId: r,
|
|
1224
|
+
components: c
|
|
1225
|
+
}, p = c.interpolation, m = e.elapsedTime / 1e3;
|
|
1226
|
+
kt(e, r, c.velocity, c.dynamics);
|
|
1227
|
+
let h = c.velocity[0] * m, g = c.velocity[1] * m;
|
|
1228
|
+
hn(p, c.transform, e.elapsedTime);
|
|
1229
|
+
let _ = i ? s?.get(d) : o;
|
|
1230
|
+
if (!_) {
|
|
1231
|
+
_n(r, c.transform, h, g, u, e.reportMoves), an(e, r, c), gn(p, e.tick);
|
|
864
1232
|
return;
|
|
865
1233
|
}
|
|
866
|
-
let
|
|
867
|
-
if (
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
},
|
|
871
|
-
for (let
|
|
1234
|
+
let v = c.bounciness !== void 0, y = _.resolveMove(f, h, g, !v);
|
|
1235
|
+
if (_n(r, c.transform, y.moveX, y.moveY, u, e.reportMoves), an(e, r, c), gn(p, e.tick), !(!_.hasBounciness && !a && !t)) {
|
|
1236
|
+
_.forEachOverlapping(f, (n) => {
|
|
1237
|
+
_.claimContact(r, n.entityId) && dn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
|
|
1238
|
+
}, y.moveX, y.moveY);
|
|
1239
|
+
for (let n of y.blocking) _.claimContact(r, n.entityId) && dn(e, _, f, n, l, u, y.moveX, y.moveY, a, t);
|
|
872
1240
|
}
|
|
873
1241
|
}, { physics: {
|
|
874
1242
|
collision: !0,
|
|
875
|
-
|
|
1243
|
+
dynamics: !0,
|
|
1244
|
+
optional: r,
|
|
876
1245
|
group: i
|
|
877
1246
|
} });
|
|
878
|
-
return
|
|
879
|
-
e.dieAtImpact = (t, n) => {
|
|
880
|
-
|
|
1247
|
+
return l.preRun = (e, t, n) => {
|
|
1248
|
+
ln(e, c), e.dieAtImpact = (t, n) => {
|
|
1249
|
+
pn(e, i ? s?.get(un(t.components, i)) : o, t, n);
|
|
881
1250
|
};
|
|
882
|
-
let r = e.elapsedTime / 1e3,
|
|
1251
|
+
let r = e.elapsedTime / 1e3, a = n.collidable ?? [];
|
|
883
1252
|
if (!i) {
|
|
884
|
-
|
|
1253
|
+
o = new Vt(a, r, e.dynamicsCommands);
|
|
885
1254
|
return;
|
|
886
1255
|
}
|
|
887
|
-
let
|
|
888
|
-
for (let t of
|
|
889
|
-
let n =
|
|
1256
|
+
let l = /* @__PURE__ */ new Map();
|
|
1257
|
+
for (let t of a) {
|
|
1258
|
+
let n = un(t.components, i);
|
|
890
1259
|
if (e.skipGroup === n) continue;
|
|
891
|
-
let r =
|
|
892
|
-
r || (r = [],
|
|
1260
|
+
let r = l.get(n);
|
|
1261
|
+
r || (r = [], l.set(n, r)), r.push(t);
|
|
893
1262
|
}
|
|
894
|
-
|
|
895
|
-
for (let [
|
|
896
|
-
},
|
|
1263
|
+
s = /* @__PURE__ */ new Map();
|
|
1264
|
+
for (let [t, n] of l) s.set(t, new Vt(n, r, e.dynamicsCommands));
|
|
1265
|
+
}, l;
|
|
1266
|
+
}
|
|
1267
|
+
function ln(e, t) {
|
|
1268
|
+
let n = e, r = e.commandQueueId ?? 0, i = t.get(r);
|
|
1269
|
+
i && (e.dynamicsCommands = Ot(i, e.dynamicsCommands), t.delete(r));
|
|
1270
|
+
let a = () => {
|
|
1271
|
+
let e = t.get(r);
|
|
1272
|
+
return e || (e = /* @__PURE__ */ new Map(), t.set(r, e)), e;
|
|
1273
|
+
};
|
|
1274
|
+
n.queueForce = (e, t, n) => {
|
|
1275
|
+
Et(a(), e, t, n, 0, 0);
|
|
1276
|
+
}, n.queueImpulse = (e, t, n) => {
|
|
1277
|
+
Et(a(), e, 0, 0, t, n);
|
|
1278
|
+
}, n.queueVelocity = (e, t) => {
|
|
1279
|
+
Dt(a(), e, t);
|
|
1280
|
+
};
|
|
897
1281
|
}
|
|
898
|
-
function
|
|
1282
|
+
function un(e, t) {
|
|
899
1283
|
let n = e[t.component];
|
|
900
1284
|
return n ? n[t.index] : 0;
|
|
901
1285
|
}
|
|
902
|
-
function
|
|
903
|
-
if (
|
|
904
|
-
let
|
|
905
|
-
|
|
1286
|
+
function dn(e, t, n, r, i, a, o, s, c, l) {
|
|
1287
|
+
if (Xt(n, r, c), !l) return;
|
|
1288
|
+
let u = X(n.components), d = X(r.components);
|
|
1289
|
+
sn.x = 0, sn.y = 0, t.contactNormal(n, r, o, s, sn), l(e, n, r, i, a, {
|
|
1290
|
+
normalX: sn.x,
|
|
1291
|
+
normalY: sn.y
|
|
1292
|
+
}), fn(e, n.entityId, n.components, u), fn(e, r.entityId, r.components, d);
|
|
906
1293
|
}
|
|
907
|
-
function
|
|
908
|
-
let i =
|
|
909
|
-
(i.minX !== r.minX || i.minY !== r.minY || i.maxX !== r.maxX || i.maxY !== r.maxY) &&
|
|
1294
|
+
function fn(e, t, n, r) {
|
|
1295
|
+
let i = X(n);
|
|
1296
|
+
(i.minX !== r.minX || i.minY !== r.minY || i.maxX !== r.maxX || i.maxY !== r.maxY) && an(e, t, n);
|
|
910
1297
|
}
|
|
911
|
-
function
|
|
1298
|
+
function pn(e, t, n, r) {
|
|
912
1299
|
let i = n.components.body;
|
|
913
|
-
if (!i ||
|
|
914
|
-
|
|
1300
|
+
if (!i || xe(i)) return;
|
|
1301
|
+
Se(i);
|
|
915
1302
|
let a = n.components.transform, o = n.components.velocity, s = r.components.transform, c = r.components.body;
|
|
916
1303
|
if (!t || !a || !o || !s || !c) return;
|
|
917
1304
|
let l = e.elapsedTime / 1e3, u = o[0] * l, d = o[1] * l;
|
|
@@ -928,52 +1315,54 @@ function gt(e, t, n, r) {
|
|
|
928
1315
|
} }, u, d);
|
|
929
1316
|
a[0] = f.x, a[1] = f.y;
|
|
930
1317
|
}
|
|
931
|
-
function
|
|
1318
|
+
function mn(e, t, n, r, i) {
|
|
932
1319
|
let a = e.elapsedTime / 1e3, o = n.interpolation;
|
|
933
|
-
|
|
1320
|
+
kt(e, t, n.velocity, n.dynamics), hn(o, n.transform, e.elapsedTime), _n(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), an(e, t, n), gn(o, e.tick);
|
|
934
1321
|
}
|
|
935
|
-
function
|
|
1322
|
+
function hn(e, t, n) {
|
|
936
1323
|
e && (e[2] = t[0], e[3] = t[1], e[6] = n);
|
|
937
1324
|
}
|
|
938
|
-
function
|
|
1325
|
+
function gn(e, t) {
|
|
939
1326
|
e && a(e, 7, t);
|
|
940
1327
|
}
|
|
941
|
-
function
|
|
942
|
-
n === 0 && r === 0 || (n !== 0 && c(t, 0, n, Infinity), r !== 0 && c(t, 1, r, Infinity), a !== !1 && i.emitSystemEvent(
|
|
1328
|
+
function _n(e, t, n, r, i, a) {
|
|
1329
|
+
n === 0 && r === 0 || (n !== 0 && c(t, 0, n, Infinity), r !== 0 && c(t, 1, r, Infinity), a !== !1 && i.emitSystemEvent(on, e));
|
|
943
1330
|
}
|
|
944
1331
|
//#endregion
|
|
945
1332
|
//#region src/systems/physics-system.ts
|
|
946
|
-
var
|
|
1333
|
+
var vn = 50, yn = 1, bn = class extends r {
|
|
947
1334
|
spatialWorld;
|
|
1335
|
+
pendingDynamicsCommands = /* @__PURE__ */ new Map();
|
|
1336
|
+
commandQueueId = yn++;
|
|
948
1337
|
tick = 0;
|
|
949
1338
|
reportMoves;
|
|
950
1339
|
skipGroup;
|
|
951
1340
|
constructor(e, t = {}) {
|
|
952
|
-
let n = t.updateFunction ??
|
|
953
|
-
i && !r.includes("body") &&
|
|
954
|
-
let
|
|
955
|
-
a && !
|
|
956
|
-
let
|
|
1341
|
+
let n = t.updateFunction ?? mn, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = n === mn || n.physics?.dynamics === !0, o = n.physics?.group, s = [];
|
|
1342
|
+
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);
|
|
1343
|
+
let c = s.length ? [...s, ...r] : r, l = r.includes("bounciness") ? [...r] : ["bounciness", ...r];
|
|
1344
|
+
l.includes("polygon") || l.push("polygon"), a && !l.includes("dynamics") && l.push("dynamics"), o && !l.includes(o.component) && l.push(o.component);
|
|
1345
|
+
let u = i ? { [Rt]: {
|
|
957
1346
|
required: ["transform", "body"],
|
|
958
1347
|
optional: [
|
|
959
1348
|
"velocity",
|
|
960
1349
|
"entity",
|
|
961
|
-
...
|
|
1350
|
+
...l
|
|
962
1351
|
],
|
|
963
1352
|
filter: t.scope
|
|
964
|
-
} } : void 0,
|
|
965
|
-
...
|
|
1353
|
+
} } : void 0, d = u || t.queries ? {
|
|
1354
|
+
...u,
|
|
966
1355
|
...t.queries
|
|
967
|
-
} : void 0,
|
|
1356
|
+
} : void 0, f = xn(t.scope, t.filter);
|
|
968
1357
|
super(e, {
|
|
969
1358
|
name: t.name ?? "PhysicsSystem",
|
|
970
1359
|
deltaBetweenRuns: t.deltaBetweenRuns ?? 50,
|
|
971
1360
|
firstRun: t.firstRun,
|
|
972
1361
|
required: ["transform", "velocity"],
|
|
973
|
-
optional:
|
|
974
|
-
filter:
|
|
1362
|
+
optional: c,
|
|
1363
|
+
filter: f,
|
|
975
1364
|
updateFunction: n,
|
|
976
|
-
queries:
|
|
1365
|
+
queries: d,
|
|
977
1366
|
forceMainThread: t.forceMainThread ?? !t.getWorker,
|
|
978
1367
|
getWorker: t.getWorker ?? (() => {
|
|
979
1368
|
throw Error("PhysicsSystem cannot start a worker: no getWorker was supplied");
|
|
@@ -982,22 +1371,49 @@ var xt = 50, St = class extends n {
|
|
|
982
1371
|
}
|
|
983
1372
|
startInterpolation(e) {
|
|
984
1373
|
let t = this.deltaBetweenRuns;
|
|
985
|
-
t <= 0 ||
|
|
1374
|
+
t <= 0 || Ue(e, {
|
|
986
1375
|
stepMs: t,
|
|
987
1376
|
stepFraction: this.currentDelta / t,
|
|
988
1377
|
tick: this.tick
|
|
989
1378
|
});
|
|
990
1379
|
}
|
|
1380
|
+
queueForce(e, t, n) {
|
|
1381
|
+
this.queueDynamics(e, t, n, 0, 0);
|
|
1382
|
+
}
|
|
1383
|
+
queueImpulse(e, t, n) {
|
|
1384
|
+
this.queueDynamics(e, 0, 0, t, n);
|
|
1385
|
+
}
|
|
1386
|
+
queueVelocity(e, t) {
|
|
1387
|
+
let n = typeof e == "number" ? e : e.eid;
|
|
1388
|
+
Dt(this.pendingDynamicsCommands, n, t);
|
|
1389
|
+
}
|
|
991
1390
|
addDataToWorld(e) {
|
|
992
|
-
e.tick = ++this.tick,
|
|
1391
|
+
e.tick = ++this.tick, lt(this.spatialWorld, e), e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0, e.skipGroup = this.skipGroup, e.commandQueueId = this.commandQueueId, e.dynamicsCommands = this.snapshotDynamicsCommands();
|
|
1392
|
+
}
|
|
1393
|
+
queueDynamics(e, t, n, r, i) {
|
|
1394
|
+
let a = typeof e == "number" ? e : e.eid;
|
|
1395
|
+
Et(this.pendingDynamicsCommands, a, t, n, r, i);
|
|
1396
|
+
}
|
|
1397
|
+
snapshotDynamicsCommands() {
|
|
1398
|
+
if (this.pendingDynamicsCommands.size === 0) return;
|
|
1399
|
+
let e = this.pendingDynamicsCommands;
|
|
1400
|
+
this.pendingDynamicsCommands = /* @__PURE__ */ new Map();
|
|
1401
|
+
let t = Array.from(e.keys()).sort((e, t) => e - t), n = new Float64Array(t.length * 8);
|
|
1402
|
+
for (let r = 0; r < t.length; r++) {
|
|
1403
|
+
let i = t[r], a = e.get(i), o = r * 8;
|
|
1404
|
+
n[o + 0] = i, n[o + 1] = a.forceX, n[o + 2] = a.forceY, n[o + 3] = a.impulseX, n[o + 4] = a.impulseY;
|
|
1405
|
+
let s = (a.velocityX === void 0 ? 0 : 1) | (a.velocityY === void 0 ? 0 : 2);
|
|
1406
|
+
n[o + 5] = s, n[o + 6] = a.velocityX ?? 0, n[o + 7] = a.velocityY ?? 0;
|
|
1407
|
+
}
|
|
1408
|
+
return n;
|
|
993
1409
|
}
|
|
994
1410
|
};
|
|
995
|
-
function
|
|
1411
|
+
function xn(e, t) {
|
|
996
1412
|
return e ? t ? (n) => e(n) && t(n) : e : t;
|
|
997
1413
|
}
|
|
998
1414
|
//#endregion
|
|
999
1415
|
//#region src/systems/interpolation-update.ts
|
|
1000
|
-
var
|
|
1416
|
+
var Sn = (e, t, n) => {
|
|
1001
1417
|
let r = n.interpolation, a = n.transform, o = i(r, 7), s = r[2], c = r[3], l = r[6], u = a[0], d = a[1], f = i(r, 7);
|
|
1002
1418
|
if (o !== f) return;
|
|
1003
1419
|
if (l <= 0) {
|
|
@@ -1006,14 +1422,14 @@ var wt = (e, t, n) => {
|
|
|
1006
1422
|
}
|
|
1007
1423
|
let p = r[4];
|
|
1008
1424
|
f !== r[5] && (p = 0, r[5] = f), p += e.elapsedTime / l, p > 1 && (p = 1), r[4] = p, r[0] = s + (u - s) * p, r[1] = c + (d - c) * p;
|
|
1009
|
-
},
|
|
1425
|
+
}, Cn = class extends r {
|
|
1010
1426
|
constructor(e, t = {}) {
|
|
1011
1427
|
super(e, {
|
|
1012
1428
|
name: t.name ?? "InterpolationSystem",
|
|
1013
1429
|
deltaBetweenRuns: 0,
|
|
1014
1430
|
firstRun: t.firstRun,
|
|
1015
1431
|
required: ["transform", "interpolation"],
|
|
1016
|
-
updateFunction:
|
|
1432
|
+
updateFunction: Sn,
|
|
1017
1433
|
forceMainThread: t.forceMainThread ?? !t.getWorker,
|
|
1018
1434
|
getWorker: t.getWorker ?? (() => {
|
|
1019
1435
|
throw Error("InterpolationSystem cannot start a worker: no getWorker was supplied");
|
|
@@ -1022,6 +1438,6 @@ var wt = (e, t, n) => {
|
|
|
1022
1438
|
}
|
|
1023
1439
|
};
|
|
1024
1440
|
//#endregion
|
|
1025
|
-
export {
|
|
1441
|
+
export { pe as BODY_CATEGORY_INDEX, ve as BODY_CCD_FLAG, ye as BODY_DYING_FLAG, fe as BODY_FLAGS_INDEX, me as BODY_MASK_INDEX, _e as BODY_SENSOR_FLAG, ge as BODY_SHAPE_MASK, he as BODY_SIZE, De as BOUNCINESS_INDEX, Oe as BOUNCINESS_SIZE, Rt as COLLIDABLE_QUERY, Vt as CollisionBroadphase, le as DEFAULT_COLLIDE_CATEGORY, ue as DEFAULT_COLLIDE_MASK, vn as DEFAULT_PHYSICS_STEP_MS, N as DYNAMICS_ACCELERATION_X_INDEX, ee as DYNAMICS_ACCELERATION_Y_INDEX, P as DYNAMICS_INVERSE_MASS_INDEX, F as DYNAMICS_SIZE, Le as INTERPOLATION_DURATION_INDEX, Ne as INTERPOLATION_PREV_X_INDEX, Pe as INTERPOLATION_PREV_Y_INDEX, Fe as INTERPOLATION_PROGRESS_INDEX, ze as INTERPOLATION_SIZE, Ie as INTERPOLATION_SYNCED_TICK_INDEX, Re as INTERPOLATION_TICK_INDEX, je as INTERPOLATION_X_INDEX, Me as INTERPOLATION_Y_INDEX, Cn as InterpolationSystem, l as MAX_POLYGON_VERTICES, f as POLYGON_SIZE, u as POLYGON_VERTEX_COUNT_INDEX, d as POLYGON_VERTICES_INDEX, on as POSITION_UPDATED_EVENT, dt as PhysicalWorld, bn as PhysicsSystem, oe as SHAPE_CAPSULE, ae as SHAPE_CIRCLE, se as SHAPE_POLYGON, ie as SHAPE_RECTANGLE, Jt as SpatialIndex, S as TRANSFORM_ANGLE_INDEX, x as TRANSFORM_HEIGHT_INDEX, C as TRANSFORM_SIZE, b as TRANSFORM_WIDTH_INDEX, v as TRANSFORM_X_INDEX, y as TRANSFORM_Y_INDEX, O as VELOCITY_DAMPING_INDEX, k as VELOCITY_SIZE, E as VELOCITY_X_INDEX, D as VELOCITY_Y_INDEX, lt as addPhysicalWorldData, we as bodyDefinition, L as bodyShape, Ae as bouncinessDefinition, et as boundsHalfHeight, $e as boundsHalfWidth, de as canCollide, V as capsuleHalfLength, Ke as contactNormal, cn as createPhysicsUpdate, te as dynamicsDefinition, ut as getSpatialMap, kt as integrateDynamics, Ve as interpolationDefinition, Sn as interpolationUpdate, be as isContinuous, xe as isDying, R as isSensor, Se as markDying, tt as orientedBoxesOverlap, We as physicsRegistry, mn as physicsUpdate, J as pointSegmentDistanceSquared, ht as polygonContactNormal, m as polygonDefinition, mt as polygonShapesOverlap, h as preparePolygon, rt as segmentBoxDistanceSquared, nt as segmentSegmentDistanceSquared, G as shapeHalfHeight, W as shapeHalfWidth, U as shapeIsEmpty, H as shapeRadius, Ge as shapesOverlap, He as snapEntity, Ue as startSpawnInterpolation, T as transformDefinition, an as updateSpatialMap, j as velocityDefinition };
|
|
1026
1442
|
|
|
1027
1443
|
//# sourceMappingURL=index.js.map
|