@daneren2005/shared-memory-physics 1.0.0 → 1.1.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 +236 -21
- package/dist/components/interpolation-component.d.ts +32 -0
- package/dist/components/registry.d.ts +12 -0
- package/dist/index.d.ts +9 -3
- package/dist/index.js +185 -94
- package/dist/index.js.map +1 -1
- package/dist/systems/interpolation-system.d.ts +10 -0
- package/dist/systems/interpolation-update.d.ts +4 -0
- package/dist/systems/physics-system.d.ts +9 -4
- package/dist/systems/physics-update.d.ts +8 -4
- package/package.json +6 -2
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import e from "flatbush";
|
|
2
|
-
import { addAtomicFloat32 as t } from "@daneren2005/shared-memory-objects";
|
|
3
|
-
import { ComponentSystem as
|
|
2
|
+
import { addAtomicFloat32 as t, loadFloat32 as n, storeFloat32 as r } from "@daneren2005/shared-memory-objects";
|
|
3
|
+
import { ComponentSystem as i } from "@daneren2005/shared-memory-ecs";
|
|
4
4
|
//#region src/components/transform-component.ts
|
|
5
|
-
var
|
|
5
|
+
var a = 0, o = 1, s = 2, c = 3, l = 4, u = 5, d = {
|
|
6
6
|
type: Float32Array,
|
|
7
7
|
size: 5,
|
|
8
8
|
loadProperties: [
|
|
@@ -63,7 +63,7 @@ var r = 0, i = 1, a = 2, o = 3, s = 4, c = 5, l = {
|
|
|
63
63
|
y: e.y
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
|
-
},
|
|
66
|
+
}, f = 0, p = 1, m = 2, h = {
|
|
67
67
|
type: Float32Array,
|
|
68
68
|
size: 2,
|
|
69
69
|
loadProperties: ["velocityX", "velocityY"],
|
|
@@ -91,15 +91,15 @@ var r = 0, i = 1, a = 2, o = 3, s = 4, c = 5, l = {
|
|
|
91
91
|
velocityY: e.velocityY
|
|
92
92
|
};
|
|
93
93
|
}
|
|
94
|
-
},
|
|
94
|
+
}, g = 1, _ = 2, v = 3, y = [
|
|
95
95
|
1,
|
|
96
96
|
2,
|
|
97
97
|
3
|
|
98
|
-
],
|
|
99
|
-
function
|
|
98
|
+
], b = 1, x = 4294967295;
|
|
99
|
+
function ee(e, t, n, r) {
|
|
100
100
|
return (t & n) !== 0 && (r & e) !== 0;
|
|
101
101
|
}
|
|
102
|
-
var
|
|
102
|
+
var te = 0, ne = 1, re = 2, ie = 3, S = {
|
|
103
103
|
type: Uint32Array,
|
|
104
104
|
size: 3,
|
|
105
105
|
loadProperties: [
|
|
@@ -112,7 +112,7 @@ var x = 0, S = 1, C = 2, w = 3, T = {
|
|
|
112
112
|
],
|
|
113
113
|
load(e, t, n) {
|
|
114
114
|
let r = t.create([
|
|
115
|
-
|
|
115
|
+
ae(n),
|
|
116
116
|
n.collideCategory ?? 1,
|
|
117
117
|
n.collideMask ?? 4294967295
|
|
118
118
|
]), i = t.getBlock(r);
|
|
@@ -139,102 +139,153 @@ var x = 0, S = 1, C = 2, w = 3, T = {
|
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
141
|
};
|
|
142
|
-
function
|
|
142
|
+
function ae(e) {
|
|
143
143
|
let t = e.shape;
|
|
144
144
|
if (t === void 0) return e.radius === void 0 ? 1 : 2;
|
|
145
|
-
if (!
|
|
145
|
+
if (!y.includes(t)) throw Error(`Unknown body shape: ${t}`);
|
|
146
146
|
return t;
|
|
147
147
|
}
|
|
148
148
|
//#endregion
|
|
149
|
+
//#region src/components/interpolation-component.ts
|
|
150
|
+
var oe = 0, se = 1, ce = 2, le = 3, ue = 4, de = 5, fe = 6, C = 7, pe = 8, w = {
|
|
151
|
+
type: Float32Array,
|
|
152
|
+
size: 8,
|
|
153
|
+
loadProperties: ["interpolate"],
|
|
154
|
+
load(e, t, n) {
|
|
155
|
+
let r = n.x ?? 0, i = n.y ?? 0, a = t.create([
|
|
156
|
+
r,
|
|
157
|
+
i,
|
|
158
|
+
r,
|
|
159
|
+
i,
|
|
160
|
+
0,
|
|
161
|
+
0,
|
|
162
|
+
0,
|
|
163
|
+
0
|
|
164
|
+
]), o = t.getBlock(a);
|
|
165
|
+
return {
|
|
166
|
+
index: a,
|
|
167
|
+
get x() {
|
|
168
|
+
return o[0];
|
|
169
|
+
},
|
|
170
|
+
set x(e) {
|
|
171
|
+
o[0] = e;
|
|
172
|
+
},
|
|
173
|
+
get y() {
|
|
174
|
+
return o[1];
|
|
175
|
+
},
|
|
176
|
+
set y(e) {
|
|
177
|
+
o[1] = e;
|
|
178
|
+
},
|
|
179
|
+
get prevX() {
|
|
180
|
+
return o[2];
|
|
181
|
+
},
|
|
182
|
+
set prevX(e) {
|
|
183
|
+
o[2] = e;
|
|
184
|
+
},
|
|
185
|
+
get prevY() {
|
|
186
|
+
return o[3];
|
|
187
|
+
},
|
|
188
|
+
set prevY(e) {
|
|
189
|
+
o[3] = e;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
function me(e) {
|
|
195
|
+
let { transform: t, interpolation: n } = e.components;
|
|
196
|
+
!t || !n || (n.prevX = n.x = t.x, n.prevY = n.y = t.y);
|
|
197
|
+
}
|
|
198
|
+
//#endregion
|
|
149
199
|
//#region src/components/registry.ts
|
|
150
|
-
var
|
|
151
|
-
transform:
|
|
152
|
-
velocity:
|
|
153
|
-
body:
|
|
200
|
+
var he = {
|
|
201
|
+
transform: d,
|
|
202
|
+
velocity: h,
|
|
203
|
+
body: S,
|
|
204
|
+
interpolation: w
|
|
154
205
|
};
|
|
155
206
|
//#endregion
|
|
156
207
|
//#region src/math/shapes.ts
|
|
157
|
-
function
|
|
208
|
+
function T(e, t) {
|
|
158
209
|
return Math.max(0, (e - t) / 2);
|
|
159
210
|
}
|
|
160
|
-
function
|
|
211
|
+
function E(e, t, n) {
|
|
161
212
|
return e === 2 ? t / 2 : e === 3 ? n / 2 : 0;
|
|
162
213
|
}
|
|
163
|
-
function
|
|
214
|
+
function D(e, t, n) {
|
|
164
215
|
return e === 2 ? t <= 0 : e === 3 ? n <= 0 : t <= 0 || n <= 0;
|
|
165
216
|
}
|
|
166
|
-
function
|
|
167
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) *
|
|
217
|
+
function O(e, t, n, r) {
|
|
218
|
+
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) * T(t, n) + n / 2 : M(t, n, r);
|
|
168
219
|
}
|
|
169
|
-
function
|
|
170
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) *
|
|
220
|
+
function k(e, t, n, r) {
|
|
221
|
+
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) * T(t, n) + n / 2 : N(t, n, r);
|
|
171
222
|
}
|
|
172
|
-
function
|
|
173
|
-
if (
|
|
223
|
+
function A(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
224
|
+
if (D(e, r, i) || D(o, l, u)) return !1;
|
|
174
225
|
let f = e !== 1, p = o !== 1;
|
|
175
|
-
if (!f && !p) return
|
|
176
|
-
if (f && !p) return
|
|
177
|
-
let m =
|
|
178
|
-
if (!f) return
|
|
179
|
-
let v =
|
|
180
|
-
return
|
|
226
|
+
if (!f && !p) return P(t, n, r, i, a, s, c, l, u, d);
|
|
227
|
+
if (f && !p) return A(o, s, c, l, u, d, e, t, n, r, i, a);
|
|
228
|
+
let m = j(o, l, u), h = Math.cos(d) * m, g = Math.sin(d) * m, _ = E(o, l, u);
|
|
229
|
+
if (!f) return L(s - h, c - g, s + h, c + g, t, n, r, i, a) < _ * _;
|
|
230
|
+
let v = j(e, r, i), y = Math.cos(a) * v, b = Math.sin(a) * v, x = E(e, r, i) + _;
|
|
231
|
+
return I(t - y, n - b, t + y, n + b, s - h, c - g, s + h, c + g) < x * x;
|
|
181
232
|
}
|
|
182
|
-
function
|
|
183
|
-
return e === 3 ?
|
|
233
|
+
function j(e, t, n) {
|
|
234
|
+
return e === 3 ? T(t, n) : 0;
|
|
184
235
|
}
|
|
185
|
-
function
|
|
236
|
+
function M(e, t, n) {
|
|
186
237
|
return (Math.abs(Math.cos(n)) * e + Math.abs(Math.sin(n)) * t) / 2;
|
|
187
238
|
}
|
|
188
|
-
function
|
|
239
|
+
function N(e, t, n) {
|
|
189
240
|
return (Math.abs(Math.sin(n)) * e + Math.abs(Math.cos(n)) * t) / 2;
|
|
190
241
|
}
|
|
191
|
-
function
|
|
242
|
+
function P(e, t, n, r, i, a, o, s, c, l) {
|
|
192
243
|
if (n <= 0 || r <= 0 || s <= 0 || c <= 0) return !1;
|
|
193
244
|
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;
|
|
194
|
-
return !
|
|
245
|
+
return !F(u, d, v, y, m, h, u, d, g, _, f, p) && !F(-d, u, v, y, m, h, u, d, g, _, f, p) && !F(f, p, v, y, m, h, u, d, g, _, f, p) && !F(-p, f, v, y, m, h, u, d, g, _, f, p);
|
|
195
246
|
}
|
|
196
|
-
function
|
|
247
|
+
function F(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
197
248
|
let f = i * Math.abs(o * e + s * t) + a * Math.abs(-s * e + o * t), p = c * Math.abs(u * e + d * t) + l * Math.abs(-d * e + u * t);
|
|
198
249
|
return Math.abs(n * e + r * t) >= f + p;
|
|
199
250
|
}
|
|
200
|
-
function
|
|
251
|
+
function I(e, t, n, r, i, a, o, s) {
|
|
201
252
|
let c = n - e, l = r - t, u = o - i, d = s - a, f = e - i, p = t - a, m = c * c + l * l, h = u * u + d * d, g = u * f + d * p, _ = 0, v = 0;
|
|
202
253
|
if (m <= 0 && h <= 0) return f * f + p * p;
|
|
203
|
-
if (m <= 0) v =
|
|
254
|
+
if (m <= 0) v = V(g / h);
|
|
204
255
|
else {
|
|
205
256
|
let e = c * f + l * p;
|
|
206
|
-
if (h <= 0) _ =
|
|
257
|
+
if (h <= 0) _ = V(-e / m);
|
|
207
258
|
else {
|
|
208
259
|
let t = c * u + l * d, n = m * h - t * t;
|
|
209
|
-
n !== 0 && (_ =
|
|
260
|
+
n !== 0 && (_ = V((t * g - e * h) / n)), v = (t * _ + g) / h, v < 0 ? (v = 0, _ = V(-e / m)) : v > 1 && (v = 1, _ = V((t - e) / m));
|
|
210
261
|
}
|
|
211
262
|
}
|
|
212
263
|
let y = e + c * _ - (i + u * v), b = t + l * _ - (a + d * v);
|
|
213
264
|
return y * y + b * b;
|
|
214
265
|
}
|
|
215
|
-
function
|
|
266
|
+
function L(e, t, n, r, i, a, o, s, c) {
|
|
216
267
|
let l = Math.cos(c), u = Math.sin(c), d = o / 2, f = s / 2, p = e - i, m = t - a, h = n - i, g = r - a, _ = p * l + m * u, v = -p * u + m * l, y = h * l + g * u, b = -h * u + g * l;
|
|
217
|
-
return
|
|
268
|
+
return z(_, v, y, b, d, f) ? Math.min(B(_, v, d, f), B(y, b, d, f), R(-d, -f, _, v, y, b), R(d, -f, _, v, y, b), R(d, f, _, v, y, b), R(-d, f, _, v, y, b)) : 0;
|
|
218
269
|
}
|
|
219
|
-
function
|
|
220
|
-
let o = i - n, s = a - r, c = o * o + s * s, l = c > 0 ?
|
|
270
|
+
function R(e, t, n, r, i, a) {
|
|
271
|
+
let o = i - n, s = a - r, c = o * o + s * s, l = c > 0 ? V(((e - n) * o + (t - r) * s) / c) : 0, u = e - (n + o * l), d = t - (r + s * l);
|
|
221
272
|
return u * u + d * d;
|
|
222
273
|
}
|
|
223
|
-
function
|
|
274
|
+
function z(e, t, n, r, i, a) {
|
|
224
275
|
if (Math.max(e, n) < -i || Math.min(e, n) > i || Math.max(t, r) < -a || Math.min(t, r) > a) return !0;
|
|
225
276
|
let o = -(r - t), s = n - e;
|
|
226
277
|
return Math.abs(o * e + s * t) > i * Math.abs(o) + a * Math.abs(s);
|
|
227
278
|
}
|
|
228
|
-
function
|
|
279
|
+
function B(e, t, n, r) {
|
|
229
280
|
let i = Math.abs(e) - n, a = Math.abs(t) - r, o = i > 0 ? i : 0, s = a > 0 ? a : 0;
|
|
230
281
|
return o * o + s * s;
|
|
231
282
|
}
|
|
232
|
-
function
|
|
283
|
+
function V(e) {
|
|
233
284
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
234
285
|
}
|
|
235
286
|
//#endregion
|
|
236
287
|
//#region src/systems/collision.ts
|
|
237
|
-
var
|
|
288
|
+
var H = 1e-4, ge = 24, U = "collidable", W = [], G = class {
|
|
238
289
|
buckets = [];
|
|
239
290
|
constructor(t, n) {
|
|
240
291
|
let r = /* @__PURE__ */ new Map();
|
|
@@ -244,8 +295,8 @@ var G = 1e-4, ee = 24, K = "collidable", q = [], J = class {
|
|
|
244
295
|
let o = a[1];
|
|
245
296
|
if (o === 0) continue;
|
|
246
297
|
let s = a[0], c = i[2], l = i[3];
|
|
247
|
-
if (
|
|
248
|
-
let u = i[4], d =
|
|
298
|
+
if (D(s, c, l)) continue;
|
|
299
|
+
let u = i[4], d = O(s, c, l, u), f = k(s, c, l, u), p = t.velocity, m = p ? Math.abs(p[0]) * n : 0, h = p ? Math.abs(p[1]) * n : 0, g = i[0], _ = i[1], v = r.get(o);
|
|
249
300
|
v || (v = {
|
|
250
301
|
entries: [],
|
|
251
302
|
bounds: []
|
|
@@ -265,41 +316,41 @@ var G = 1e-4, ee = 24, K = "collidable", q = [], J = class {
|
|
|
265
316
|
}
|
|
266
317
|
}
|
|
267
318
|
forEachOverlapping(e, t) {
|
|
268
|
-
let n =
|
|
319
|
+
let n = K(e);
|
|
269
320
|
if (!n) return;
|
|
270
321
|
let { x: r, y: i, halfWidth: a, halfHeight: o } = n;
|
|
271
322
|
this.forEachCandidate(n, r - a, i - o, r + a, i + o, (e) => {
|
|
272
|
-
|
|
323
|
+
q(n, r, i, e) && t(e);
|
|
273
324
|
});
|
|
274
325
|
}
|
|
275
326
|
sweep(e, t, n) {
|
|
276
|
-
let r = Math.sqrt(t * t + n * n), i =
|
|
327
|
+
let r = Math.sqrt(t * t + n * n), i = K(e);
|
|
277
328
|
if (!i || r === 0) return {
|
|
278
329
|
fraction: 1,
|
|
279
|
-
blocking:
|
|
330
|
+
blocking: W
|
|
280
331
|
};
|
|
281
332
|
let { x: a, y: o, halfWidth: s, halfHeight: c } = i, l = a + t, u = o + n, d = [];
|
|
282
333
|
if (this.forEachCandidate(i, l - s, u - c, l + s, u + c, (e) => {
|
|
283
|
-
|
|
334
|
+
q(i, l, u, e) && (q(i, a, o, e) || d.push(e));
|
|
284
335
|
}), d.length === 0) return {
|
|
285
336
|
fraction: 1,
|
|
286
|
-
blocking:
|
|
337
|
+
blocking: W
|
|
287
338
|
};
|
|
288
|
-
let f = 0, p = 1, m =
|
|
289
|
-
for (let e = 0; e <
|
|
339
|
+
let f = 0, p = 1, m = H / r;
|
|
340
|
+
for (let e = 0; e < ge && p - f > m; e++) {
|
|
290
341
|
let e = (f + p) / 2;
|
|
291
342
|
this.blockedAt(i, d, t, n, e) ? p = e : f = e;
|
|
292
343
|
}
|
|
293
344
|
let h = [], g = a + t * p, _ = o + n * p;
|
|
294
|
-
for (let e of d)
|
|
345
|
+
for (let e of d) q(i, g, _, e) && h.push(e);
|
|
295
346
|
return {
|
|
296
|
-
fraction: f * r >
|
|
347
|
+
fraction: f * r > H ? f : 0,
|
|
297
348
|
blocking: h
|
|
298
349
|
};
|
|
299
350
|
}
|
|
300
351
|
blockedAt(e, t, n, r, i) {
|
|
301
352
|
let a = e.x + n * i, o = e.y + r * i;
|
|
302
|
-
for (let n of t) if (
|
|
353
|
+
for (let n of t) if (q(e, a, o, n)) return !0;
|
|
303
354
|
return !1;
|
|
304
355
|
}
|
|
305
356
|
forEachCandidate(e, t, n, r, i, a) {
|
|
@@ -309,13 +360,13 @@ var G = 1e-4, ee = 24, K = "collidable", q = [], J = class {
|
|
|
309
360
|
}
|
|
310
361
|
}
|
|
311
362
|
};
|
|
312
|
-
function
|
|
363
|
+
function K(e) {
|
|
313
364
|
let t = e.components.body;
|
|
314
365
|
if (!t) return;
|
|
315
366
|
let n = t[2];
|
|
316
367
|
if (n === 0) return;
|
|
317
368
|
let r = e.components.transform, i = t[0], a = r[2], o = r[3];
|
|
318
|
-
if (
|
|
369
|
+
if (D(i, a, o)) return;
|
|
319
370
|
let s = r[4];
|
|
320
371
|
return {
|
|
321
372
|
entityId: e.entityId,
|
|
@@ -325,19 +376,19 @@ function Y(e) {
|
|
|
325
376
|
width: a,
|
|
326
377
|
height: o,
|
|
327
378
|
angle: s,
|
|
328
|
-
halfWidth:
|
|
329
|
-
halfHeight:
|
|
379
|
+
halfWidth: O(i, a, o, s),
|
|
380
|
+
halfHeight: k(i, a, o, s),
|
|
330
381
|
category: t[1],
|
|
331
382
|
mask: n
|
|
332
383
|
};
|
|
333
384
|
}
|
|
334
|
-
function
|
|
385
|
+
function q(e, t, n, r) {
|
|
335
386
|
let i = r.components.transform;
|
|
336
|
-
return
|
|
387
|
+
return A(e.shape, t, n, e.width, e.height, e.angle, r.components.body[0], i[0], i[1], i[2], i[3], i[4]);
|
|
337
388
|
}
|
|
338
389
|
//#endregion
|
|
339
390
|
//#region src/systems/spatial-index.ts
|
|
340
|
-
var
|
|
391
|
+
var _e = class {
|
|
341
392
|
entries = [];
|
|
342
393
|
index;
|
|
343
394
|
constructor(t) {
|
|
@@ -345,7 +396,7 @@ var te = class {
|
|
|
345
396
|
for (let e of t) {
|
|
346
397
|
let t = e.components, r = t.transform;
|
|
347
398
|
if (!r) continue;
|
|
348
|
-
let i = t.body, a = i ? i[0] : 1, o = r[2], s = r[3], c = r[4], l = r[0], u = r[1], d =
|
|
399
|
+
let i = t.body, a = i ? i[0] : 1, o = r[2], s = r[3], c = r[4], l = r[0], u = r[1], d = O(a, o, s, c), f = k(a, o, s, c);
|
|
349
400
|
this.entries.push({
|
|
350
401
|
entityId: e.entityId,
|
|
351
402
|
components: t
|
|
@@ -377,48 +428,62 @@ var te = class {
|
|
|
377
428
|
let o = this.entries;
|
|
378
429
|
return (i ? a.neighbors(e, t, n, r, (e) => i(o[e])) : a.neighbors(e, t, n, r)).map((e) => o[e]);
|
|
379
430
|
}
|
|
380
|
-
},
|
|
381
|
-
function
|
|
431
|
+
}, J = "position-updated";
|
|
432
|
+
function ve(e = {}) {
|
|
382
433
|
let { onCollision: t, optional: n = [] } = e, r, i = Object.assign((e, n, i, a, o) => {
|
|
383
434
|
let s = {
|
|
384
435
|
entityId: n,
|
|
385
436
|
components: i
|
|
386
|
-
}, c = e.elapsedTime / 1e3,
|
|
387
|
-
if (r) {
|
|
388
|
-
|
|
389
|
-
|
|
437
|
+
}, c = i.interpolation, l = e.elapsedTime / 1e3, u = i.velocity[0] * l, d = i.velocity[1] * l;
|
|
438
|
+
if (X(c, i.transform, e.elapsedTime), !r) {
|
|
439
|
+
Q(n, i.transform, u, d, o, e.reportMoves), Z(c, e.tick);
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
let f = r.sweep(s, u, d);
|
|
443
|
+
if (Q(n, i.transform, u * f.fraction, d * f.fraction, o, e.reportMoves), Z(c, e.tick), t) {
|
|
444
|
+
r.forEachOverlapping(s, (n) => {
|
|
445
|
+
t(e, s, n, a, o);
|
|
446
|
+
});
|
|
447
|
+
for (let n of f.blocking) t(e, s, n, a, o);
|
|
390
448
|
}
|
|
391
|
-
if ($(n, i.transform, l, u, o), !(!t || !r) && (r.forEachOverlapping(s, (n) => {
|
|
392
|
-
t(e, s, n, a, o);
|
|
393
|
-
}), d)) for (let n of d) t(e, s, n, a, o);
|
|
394
449
|
}, { physics: {
|
|
395
|
-
collision:
|
|
450
|
+
collision: !0,
|
|
396
451
|
optional: n
|
|
397
452
|
} });
|
|
398
|
-
return
|
|
399
|
-
r = new
|
|
400
|
-
}
|
|
453
|
+
return i.preRun = (e, t, n) => {
|
|
454
|
+
r = new G(n.collidable ?? [], e.elapsedTime / 1e3);
|
|
455
|
+
}, i;
|
|
401
456
|
}
|
|
402
|
-
var
|
|
403
|
-
let a = e.elapsedTime / 1e3;
|
|
404
|
-
|
|
457
|
+
var Y = (e, t, n, r, i) => {
|
|
458
|
+
let a = e.elapsedTime / 1e3, o = n.interpolation;
|
|
459
|
+
X(o, n.transform, e.elapsedTime), Q(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), Z(o, e.tick);
|
|
405
460
|
};
|
|
406
|
-
function
|
|
407
|
-
|
|
461
|
+
function X(e, t, n) {
|
|
462
|
+
e && (e[2] = t[0], e[3] = t[1], e[6] = n);
|
|
463
|
+
}
|
|
464
|
+
function Z(e, t) {
|
|
465
|
+
e && r(e, 7, t);
|
|
466
|
+
}
|
|
467
|
+
function Q(e, n, r, i, a, o) {
|
|
468
|
+
r === 0 && i === 0 || (r !== 0 && t(n, 0, r, Infinity), i !== 0 && t(n, 1, i, Infinity), o !== !1 && a.emitSystemEvent(J, e));
|
|
408
469
|
}
|
|
409
470
|
//#endregion
|
|
410
471
|
//#region src/systems/physics-system.ts
|
|
411
|
-
var
|
|
472
|
+
var ye = 50, be = class extends i {
|
|
473
|
+
tick = 0;
|
|
474
|
+
reportMoves;
|
|
412
475
|
constructor(e, t = {}) {
|
|
413
|
-
let n = t.updateFunction ??
|
|
476
|
+
let n = t.updateFunction ?? Y, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = [];
|
|
477
|
+
i && !r.includes("body") && a.push("body"), r.includes("interpolation") || a.push("interpolation");
|
|
478
|
+
let o = a.length ? [...a, ...r] : r;
|
|
414
479
|
super(e, {
|
|
415
480
|
name: t.name ?? "PhysicsSystem",
|
|
416
|
-
deltaBetweenRuns: t.deltaBetweenRuns,
|
|
481
|
+
deltaBetweenRuns: t.deltaBetweenRuns ?? 50,
|
|
417
482
|
firstRun: t.firstRun,
|
|
418
483
|
required: ["transform", "velocity"],
|
|
419
|
-
optional:
|
|
484
|
+
optional: o,
|
|
420
485
|
updateFunction: n,
|
|
421
|
-
queries: i ? { [
|
|
486
|
+
queries: i ? { [U]: {
|
|
422
487
|
required: ["transform", "body"],
|
|
423
488
|
optional: ["velocity", ...r]
|
|
424
489
|
} } : void 0,
|
|
@@ -426,10 +491,36 @@ var re = class extends n {
|
|
|
426
491
|
getWorker: t.getWorker ?? (() => {
|
|
427
492
|
throw Error("PhysicsSystem cannot start a worker: no getWorker was supplied");
|
|
428
493
|
})
|
|
494
|
+
}), this.reportMoves = t.reportMoves;
|
|
495
|
+
}
|
|
496
|
+
addDataToWorld(e) {
|
|
497
|
+
e.tick = ++this.tick, e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0;
|
|
498
|
+
}
|
|
499
|
+
}, $ = (e, t, r) => {
|
|
500
|
+
let i = r.interpolation, a = r.transform, o = n(i, 7), s = i[2], c = i[3], l = i[6], u = a[0], d = a[1], f = n(i, 7);
|
|
501
|
+
if (o !== f) return;
|
|
502
|
+
if (l <= 0) {
|
|
503
|
+
i[4] = 1, i[5] = f, i[0] = u, i[1] = d;
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
let p = i[4];
|
|
507
|
+
f !== i[5] && (p = 0, i[5] = f), p += e.elapsedTime / l, p > 1 && (p = 1), i[4] = p, i[0] = s + (u - s) * p, i[1] = c + (d - c) * p;
|
|
508
|
+
}, xe = class extends i {
|
|
509
|
+
constructor(e, t = {}) {
|
|
510
|
+
super(e, {
|
|
511
|
+
name: t.name ?? "InterpolationSystem",
|
|
512
|
+
deltaBetweenRuns: 0,
|
|
513
|
+
firstRun: t.firstRun,
|
|
514
|
+
required: ["transform", "interpolation"],
|
|
515
|
+
updateFunction: $,
|
|
516
|
+
forceMainThread: t.forceMainThread ?? !t.getWorker,
|
|
517
|
+
getWorker: t.getWorker ?? (() => {
|
|
518
|
+
throw Error("InterpolationSystem cannot start a worker: no getWorker was supplied");
|
|
519
|
+
})
|
|
429
520
|
});
|
|
430
521
|
}
|
|
431
522
|
};
|
|
432
523
|
//#endregion
|
|
433
|
-
export {
|
|
524
|
+
export { ne as BODY_CATEGORY_INDEX, re as BODY_MASK_INDEX, te as BODY_SHAPE_INDEX, ie as BODY_SIZE, U as COLLIDABLE_QUERY, G as CollisionBroadphase, b as DEFAULT_COLLIDE_CATEGORY, x as DEFAULT_COLLIDE_MASK, ye as DEFAULT_PHYSICS_STEP_MS, fe as INTERPOLATION_DURATION_INDEX, ce as INTERPOLATION_PREV_X_INDEX, le as INTERPOLATION_PREV_Y_INDEX, ue as INTERPOLATION_PROGRESS_INDEX, pe as INTERPOLATION_SIZE, de as INTERPOLATION_SYNCED_TICK_INDEX, C as INTERPOLATION_TICK_INDEX, oe as INTERPOLATION_X_INDEX, se as INTERPOLATION_Y_INDEX, xe as InterpolationSystem, J as POSITION_UPDATED_EVENT, be as PhysicsSystem, v as SHAPE_CAPSULE, _ as SHAPE_CIRCLE, g as SHAPE_RECTANGLE, _e as SpatialIndex, l as TRANSFORM_ANGLE_INDEX, c as TRANSFORM_HEIGHT_INDEX, u as TRANSFORM_SIZE, s as TRANSFORM_WIDTH_INDEX, a as TRANSFORM_X_INDEX, o as TRANSFORM_Y_INDEX, m as VELOCITY_SIZE, f as VELOCITY_X_INDEX, p as VELOCITY_Y_INDEX, S as bodyDefinition, N as boundsHalfHeight, M as boundsHalfWidth, ee as canCollide, T as capsuleHalfLength, ve as createPhysicsUpdate, w as interpolationDefinition, $ as interpolationUpdate, P as orientedBoxesOverlap, he as physicsRegistry, Y as physicsUpdate, R as pointSegmentDistanceSquared, L as segmentBoxDistanceSquared, I as segmentSegmentDistanceSquared, k as shapeHalfHeight, O as shapeHalfWidth, D as shapeIsEmpty, E as shapeRadius, A as shapesOverlap, me as snapEntity, d as transformDefinition, h as velocityDefinition };
|
|
434
525
|
|
|
435
526
|
//# sourceMappingURL=index.js.map
|