@daneren2005/shared-memory-physics 0.0.1 → 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 +297 -27
- package/dist/components/interpolation-component.d.ts +32 -0
- package/dist/components/registry.d.ts +12 -0
- package/dist/index.d.ts +13 -5
- package/dist/index.js +230 -117
- package/dist/index.js.map +1 -1
- package/dist/math/shapes.d.ts +0 -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 +9 -4
- package/dist/systems/spatial-index.d.ts +23 -0
- 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, ee = 1, S = 2, C = 3, w = {
|
|
|
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,105 +139,153 @@ var x = 0, ee = 1, S = 2, C = 3, w = {
|
|
|
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)) *
|
|
168
|
-
}
|
|
169
|
-
function j(e, t, n, r) {
|
|
170
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) * D(t, n) + n / 2 : I(t, n, 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);
|
|
171
219
|
}
|
|
172
|
-
function
|
|
173
|
-
return e === 2 ? t / 2 : e === 3 ? n / 2 :
|
|
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);
|
|
174
222
|
}
|
|
175
|
-
function
|
|
176
|
-
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;
|
|
177
225
|
let f = e !== 1, p = o !== 1;
|
|
178
|
-
if (!f && !p) return
|
|
179
|
-
if (f && !p) return
|
|
180
|
-
let m =
|
|
181
|
-
if (!f) return
|
|
182
|
-
let v =
|
|
183
|
-
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;
|
|
184
232
|
}
|
|
185
|
-
function
|
|
186
|
-
return e === 3 ?
|
|
233
|
+
function j(e, t, n) {
|
|
234
|
+
return e === 3 ? T(t, n) : 0;
|
|
187
235
|
}
|
|
188
|
-
function
|
|
236
|
+
function M(e, t, n) {
|
|
189
237
|
return (Math.abs(Math.cos(n)) * e + Math.abs(Math.sin(n)) * t) / 2;
|
|
190
238
|
}
|
|
191
|
-
function
|
|
239
|
+
function N(e, t, n) {
|
|
192
240
|
return (Math.abs(Math.sin(n)) * e + Math.abs(Math.cos(n)) * t) / 2;
|
|
193
241
|
}
|
|
194
|
-
function
|
|
242
|
+
function P(e, t, n, r, i, a, o, s, c, l) {
|
|
195
243
|
if (n <= 0 || r <= 0 || s <= 0 || c <= 0) return !1;
|
|
196
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;
|
|
197
|
-
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);
|
|
198
246
|
}
|
|
199
|
-
function
|
|
247
|
+
function F(e, t, n, r, i, a, o, s, c, l, u, d) {
|
|
200
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);
|
|
201
249
|
return Math.abs(n * e + r * t) >= f + p;
|
|
202
250
|
}
|
|
203
|
-
function
|
|
251
|
+
function I(e, t, n, r, i, a, o, s) {
|
|
204
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;
|
|
205
253
|
if (m <= 0 && h <= 0) return f * f + p * p;
|
|
206
|
-
if (m <= 0) v =
|
|
254
|
+
if (m <= 0) v = V(g / h);
|
|
207
255
|
else {
|
|
208
256
|
let e = c * f + l * p;
|
|
209
|
-
if (h <= 0) _ =
|
|
257
|
+
if (h <= 0) _ = V(-e / m);
|
|
210
258
|
else {
|
|
211
259
|
let t = c * u + l * d, n = m * h - t * t;
|
|
212
|
-
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));
|
|
213
261
|
}
|
|
214
262
|
}
|
|
215
263
|
let y = e + c * _ - (i + u * v), b = t + l * _ - (a + d * v);
|
|
216
264
|
return y * y + b * b;
|
|
217
265
|
}
|
|
218
|
-
function
|
|
266
|
+
function L(e, t, n, r, i, a, o, s, c) {
|
|
219
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;
|
|
220
|
-
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;
|
|
221
269
|
}
|
|
222
|
-
function
|
|
223
|
-
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);
|
|
224
272
|
return u * u + d * d;
|
|
225
273
|
}
|
|
226
|
-
function
|
|
274
|
+
function z(e, t, n, r, i, a) {
|
|
227
275
|
if (Math.max(e, n) < -i || Math.min(e, n) > i || Math.max(t, r) < -a || Math.min(t, r) > a) return !0;
|
|
228
276
|
let o = -(r - t), s = n - e;
|
|
229
277
|
return Math.abs(o * e + s * t) > i * Math.abs(o) + a * Math.abs(s);
|
|
230
278
|
}
|
|
231
|
-
function
|
|
279
|
+
function B(e, t, n, r) {
|
|
232
280
|
let i = Math.abs(e) - n, a = Math.abs(t) - r, o = i > 0 ? i : 0, s = a > 0 ? a : 0;
|
|
233
281
|
return o * o + s * s;
|
|
234
282
|
}
|
|
235
|
-
function
|
|
283
|
+
function V(e) {
|
|
236
284
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
237
285
|
}
|
|
238
286
|
//#endregion
|
|
239
287
|
//#region src/systems/collision.ts
|
|
240
|
-
var
|
|
288
|
+
var H = 1e-4, ge = 24, U = "collidable", W = [], G = class {
|
|
241
289
|
buckets = [];
|
|
242
290
|
constructor(t, n) {
|
|
243
291
|
let r = /* @__PURE__ */ new Map();
|
|
@@ -247,8 +295,8 @@ var G = 1e-4, K = 20, te = 64, q = "collidable", J = [], Y = class {
|
|
|
247
295
|
let o = a[1];
|
|
248
296
|
if (o === 0) continue;
|
|
249
297
|
let s = a[0], c = i[2], l = i[3];
|
|
250
|
-
if (
|
|
251
|
-
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);
|
|
252
300
|
v || (v = {
|
|
253
301
|
entries: [],
|
|
254
302
|
bounds: []
|
|
@@ -268,57 +316,41 @@ var G = 1e-4, K = 20, te = 64, q = "collidable", J = [], Y = class {
|
|
|
268
316
|
}
|
|
269
317
|
}
|
|
270
318
|
forEachOverlapping(e, t) {
|
|
271
|
-
let n =
|
|
319
|
+
let n = K(e);
|
|
272
320
|
if (!n) return;
|
|
273
321
|
let { x: r, y: i, halfWidth: a, halfHeight: o } = n;
|
|
274
322
|
this.forEachCandidate(n, r - a, i - o, r + a, i + o, (e) => {
|
|
275
|
-
|
|
323
|
+
q(n, r, i, e) && t(e);
|
|
276
324
|
});
|
|
277
325
|
}
|
|
278
326
|
sweep(e, t, n) {
|
|
279
|
-
let r = Math.sqrt(t * t + n * n), i =
|
|
327
|
+
let r = Math.sqrt(t * t + n * n), i = K(e);
|
|
280
328
|
if (!i || r === 0) return {
|
|
281
329
|
fraction: 1,
|
|
282
|
-
blocking:
|
|
330
|
+
blocking: W
|
|
283
331
|
};
|
|
284
|
-
let { x: a, y: o, halfWidth: s, halfHeight: c } = i, l = a + t, u = o + n, d = []
|
|
285
|
-
if (this.forEachCandidate(i,
|
|
286
|
-
|
|
287
|
-
d.push(e);
|
|
288
|
-
let t = e.components.body, n = e.components.transform;
|
|
289
|
-
f = Math.min(f, M(t[0], n[2], n[3]));
|
|
332
|
+
let { x: a, y: o, halfWidth: s, halfHeight: c } = i, l = a + t, u = o + n, d = [];
|
|
333
|
+
if (this.forEachCandidate(i, l - s, u - c, l + s, u + c, (e) => {
|
|
334
|
+
q(i, l, u, e) && (q(i, a, o, e) || d.push(e));
|
|
290
335
|
}), d.length === 0) return {
|
|
291
336
|
fraction: 1,
|
|
292
|
-
blocking:
|
|
293
|
-
};
|
|
294
|
-
let p = 0, m = -1, h = Math.min(te, Math.max(1, Math.ceil(r / f)));
|
|
295
|
-
for (let e = 1; e <= h; e++) {
|
|
296
|
-
let r = e / h;
|
|
297
|
-
if (this.blockedAt(i, d, t, n, r)) {
|
|
298
|
-
m = r;
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
p = r;
|
|
302
|
-
}
|
|
303
|
-
if (m < 0) return {
|
|
304
|
-
fraction: 1,
|
|
305
|
-
blocking: J
|
|
337
|
+
blocking: W
|
|
306
338
|
};
|
|
307
|
-
let
|
|
308
|
-
for (let e = 0; e <
|
|
309
|
-
let e = (
|
|
310
|
-
this.blockedAt(i, d, t, n, e) ?
|
|
339
|
+
let f = 0, p = 1, m = H / r;
|
|
340
|
+
for (let e = 0; e < ge && p - f > m; e++) {
|
|
341
|
+
let e = (f + p) / 2;
|
|
342
|
+
this.blockedAt(i, d, t, n, e) ? p = e : f = e;
|
|
311
343
|
}
|
|
312
|
-
let
|
|
313
|
-
for (let e of d)
|
|
344
|
+
let h = [], g = a + t * p, _ = o + n * p;
|
|
345
|
+
for (let e of d) q(i, g, _, e) && h.push(e);
|
|
314
346
|
return {
|
|
315
|
-
fraction:
|
|
316
|
-
blocking:
|
|
347
|
+
fraction: f * r > H ? f : 0,
|
|
348
|
+
blocking: h
|
|
317
349
|
};
|
|
318
350
|
}
|
|
319
351
|
blockedAt(e, t, n, r, i) {
|
|
320
352
|
let a = e.x + n * i, o = e.y + r * i;
|
|
321
|
-
for (let n of t) if (
|
|
353
|
+
for (let n of t) if (q(e, a, o, n)) return !0;
|
|
322
354
|
return !1;
|
|
323
355
|
}
|
|
324
356
|
forEachCandidate(e, t, n, r, i, a) {
|
|
@@ -328,13 +360,13 @@ var G = 1e-4, K = 20, te = 64, q = "collidable", J = [], Y = class {
|
|
|
328
360
|
}
|
|
329
361
|
}
|
|
330
362
|
};
|
|
331
|
-
function
|
|
363
|
+
function K(e) {
|
|
332
364
|
let t = e.components.body;
|
|
333
365
|
if (!t) return;
|
|
334
366
|
let n = t[2];
|
|
335
367
|
if (n === 0) return;
|
|
336
368
|
let r = e.components.transform, i = t[0], a = r[2], o = r[3];
|
|
337
|
-
if (
|
|
369
|
+
if (D(i, a, o)) return;
|
|
338
370
|
let s = r[4];
|
|
339
371
|
return {
|
|
340
372
|
entityId: e.entityId,
|
|
@@ -344,59 +376,114 @@ function X(e) {
|
|
|
344
376
|
width: a,
|
|
345
377
|
height: o,
|
|
346
378
|
angle: s,
|
|
347
|
-
halfWidth:
|
|
348
|
-
halfHeight:
|
|
379
|
+
halfWidth: O(i, a, o, s),
|
|
380
|
+
halfHeight: k(i, a, o, s),
|
|
349
381
|
category: t[1],
|
|
350
382
|
mask: n
|
|
351
383
|
};
|
|
352
384
|
}
|
|
353
|
-
function
|
|
385
|
+
function q(e, t, n, r) {
|
|
354
386
|
let i = r.components.transform;
|
|
355
|
-
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]);
|
|
356
388
|
}
|
|
357
389
|
//#endregion
|
|
358
|
-
//#region src/systems/
|
|
359
|
-
|
|
390
|
+
//#region src/systems/spatial-index.ts
|
|
391
|
+
var _e = class {
|
|
392
|
+
entries = [];
|
|
393
|
+
index;
|
|
394
|
+
constructor(t) {
|
|
395
|
+
let n = [];
|
|
396
|
+
for (let e of t) {
|
|
397
|
+
let t = e.components, r = t.transform;
|
|
398
|
+
if (!r) continue;
|
|
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);
|
|
400
|
+
this.entries.push({
|
|
401
|
+
entityId: e.entityId,
|
|
402
|
+
components: t
|
|
403
|
+
}), n.push(l - d, u - f, l + d, u + f);
|
|
404
|
+
}
|
|
405
|
+
if (this.entries.length === 0) return;
|
|
406
|
+
let r = new e(this.entries.length);
|
|
407
|
+
for (let e = 0; e < this.entries.length; e++) r.add(n[e * 4], n[e * 4 + 1], n[e * 4 + 2], n[e * 4 + 3]);
|
|
408
|
+
r.finish(), this.index = r;
|
|
409
|
+
}
|
|
410
|
+
get size() {
|
|
411
|
+
return this.entries.length;
|
|
412
|
+
}
|
|
413
|
+
search(e, t, n, r, i) {
|
|
414
|
+
let a = this.index;
|
|
415
|
+
if (!a) return [];
|
|
416
|
+
let o = this.entries;
|
|
417
|
+
return (i ? a.search(e, t, n, r, (e) => i(o[e])) : a.search(e, t, n, r)).map((e) => o[e]);
|
|
418
|
+
}
|
|
419
|
+
searchAround(e, t, n, r, i) {
|
|
420
|
+
return this.search(e - n, t - r, e + n, t + r, i);
|
|
421
|
+
}
|
|
422
|
+
findNearest(e, t, n = Infinity, r) {
|
|
423
|
+
return this.findNearby(e, t, 1, n, r)[0];
|
|
424
|
+
}
|
|
425
|
+
findNearby(e, t, n, r = Infinity, i) {
|
|
426
|
+
let a = this.index;
|
|
427
|
+
if (!a) return [];
|
|
428
|
+
let o = this.entries;
|
|
429
|
+
return (i ? a.neighbors(e, t, n, r, (e) => i(o[e])) : a.neighbors(e, t, n, r)).map((e) => o[e]);
|
|
430
|
+
}
|
|
431
|
+
}, J = "position-updated";
|
|
432
|
+
function ve(e = {}) {
|
|
360
433
|
let { onCollision: t, optional: n = [] } = e, r, i = Object.assign((e, n, i, a, o) => {
|
|
361
434
|
let s = {
|
|
362
435
|
entityId: n,
|
|
363
436
|
components: i
|
|
364
|
-
}, c = e.elapsedTime / 1e3,
|
|
365
|
-
if (r) {
|
|
366
|
-
|
|
367
|
-
|
|
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);
|
|
368
448
|
}
|
|
369
|
-
if ($(n, i.transform, l, u, o), !(!t || !r) && (r.forEachOverlapping(s, (n) => {
|
|
370
|
-
t(e, s, n, a, o);
|
|
371
|
-
}), d)) for (let n of d) t(e, s, n, a, o);
|
|
372
449
|
}, { physics: {
|
|
373
|
-
collision:
|
|
450
|
+
collision: !0,
|
|
374
451
|
optional: n
|
|
375
452
|
} });
|
|
376
|
-
return
|
|
377
|
-
r = new
|
|
378
|
-
}
|
|
453
|
+
return i.preRun = (e, t, n) => {
|
|
454
|
+
r = new G(n.collidable ?? [], e.elapsedTime / 1e3);
|
|
455
|
+
}, i;
|
|
379
456
|
}
|
|
380
|
-
var
|
|
381
|
-
let a = e.elapsedTime / 1e3;
|
|
382
|
-
|
|
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);
|
|
383
460
|
};
|
|
384
|
-
function
|
|
385
|
-
|
|
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));
|
|
386
469
|
}
|
|
387
470
|
//#endregion
|
|
388
471
|
//#region src/systems/physics-system.ts
|
|
389
|
-
var
|
|
472
|
+
var ye = 50, be = class extends i {
|
|
473
|
+
tick = 0;
|
|
474
|
+
reportMoves;
|
|
390
475
|
constructor(e, t = {}) {
|
|
391
|
-
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;
|
|
392
479
|
super(e, {
|
|
393
480
|
name: t.name ?? "PhysicsSystem",
|
|
394
|
-
deltaBetweenRuns: t.deltaBetweenRuns,
|
|
481
|
+
deltaBetweenRuns: t.deltaBetweenRuns ?? 50,
|
|
395
482
|
firstRun: t.firstRun,
|
|
396
483
|
required: ["transform", "velocity"],
|
|
397
|
-
optional:
|
|
484
|
+
optional: o,
|
|
398
485
|
updateFunction: n,
|
|
399
|
-
queries: i ? { [
|
|
486
|
+
queries: i ? { [U]: {
|
|
400
487
|
required: ["transform", "body"],
|
|
401
488
|
optional: ["velocity", ...r]
|
|
402
489
|
} } : void 0,
|
|
@@ -404,10 +491,36 @@ var re = class extends n {
|
|
|
404
491
|
getWorker: t.getWorker ?? (() => {
|
|
405
492
|
throw Error("PhysicsSystem cannot start a worker: no getWorker was supplied");
|
|
406
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
|
+
})
|
|
407
520
|
});
|
|
408
521
|
}
|
|
409
522
|
};
|
|
410
523
|
//#endregion
|
|
411
|
-
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 };
|
|
412
525
|
|
|
413
526
|
//# sourceMappingURL=index.js.map
|