@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/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 n } from "@daneren2005/shared-memory-ecs";
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 r = 0, i = 1, a = 2, o = 3, s = 4, c = 5, l = {
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
- }, u = 0, d = 1, f = 2, p = {
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
- }, m = 1, h = 2, g = 3, _ = [
94
+ }, g = 1, _ = 2, v = 3, y = [
95
95
  1,
96
96
  2,
97
97
  3
98
- ], v = 1, y = 4294967295;
99
- function b(e, t, n, r) {
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 x = 0, ee = 1, S = 2, C = 3, w = {
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
- T(n),
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 T(e) {
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 (!_.includes(t)) throw Error(`Unknown body shape: ${t}`);
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 E = {
151
- transform: l,
152
- velocity: p,
153
- body: w
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 D(e, t) {
208
+ function T(e, t) {
158
209
  return Math.max(0, (e - t) / 2);
159
210
  }
160
- function O(e, t, n) {
211
+ function E(e, t, n) {
161
212
  return e === 2 ? t / 2 : e === 3 ? n / 2 : 0;
162
213
  }
163
- function k(e, t, n) {
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 A(e, t, n, r) {
167
- return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) * D(t, n) + n / 2 : F(t, n, 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 M(e, t, n) {
173
- return e === 2 ? t / 2 : e === 3 ? n / 2 : Math.min(t, 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 N(e, t, n, r, i, a, o, s, c, l, u, d) {
176
- if (k(e, r, i) || k(o, l, u)) return !1;
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 L(t, n, r, i, a, s, c, l, u, d);
179
- if (f && !p) return N(o, s, c, l, u, d, e, t, n, r, i, a);
180
- let m = P(o, l, u), h = Math.cos(d) * m, g = Math.sin(d) * m, _ = O(o, l, u);
181
- if (!f) return B(s - h, c - g, s + h, c + g, t, n, r, i, a) < _ * _;
182
- let v = P(e, r, i), y = Math.cos(a) * v, b = Math.sin(a) * v, x = O(e, r, i) + _;
183
- return z(t - y, n - b, t + y, n + b, s - h, c - g, s + h, c + g) < x * x;
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 P(e, t, n) {
186
- return e === 3 ? D(t, n) : 0;
233
+ function j(e, t, n) {
234
+ return e === 3 ? T(t, n) : 0;
187
235
  }
188
- function F(e, t, n) {
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 I(e, t, n) {
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 L(e, t, n, r, i, a, o, s, c, l) {
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 !R(u, d, v, y, m, h, u, d, g, _, f, p) && !R(-d, u, v, y, m, h, u, d, g, _, f, p) && !R(f, p, v, y, m, h, u, d, g, _, f, p) && !R(-p, f, v, y, m, h, u, d, g, _, f, p);
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 R(e, t, n, r, i, a, o, s, c, l, u, d) {
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 z(e, t, n, r, i, a, o, s) {
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 = W(g / h);
254
+ if (m <= 0) v = V(g / h);
207
255
  else {
208
256
  let e = c * f + l * p;
209
- if (h <= 0) _ = W(-e / m);
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 && (_ = W((t * g - e * h) / n)), v = (t * _ + g) / h, v < 0 ? (v = 0, _ = W(-e / m)) : v > 1 && (v = 1, _ = W((t - e) / m));
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 B(e, t, n, r, i, a, o, s, c) {
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 H(_, v, y, b, d, f) ? Math.min(U(_, v, d, f), U(y, b, d, f), V(-d, -f, _, v, y, b), V(d, -f, _, v, y, b), V(d, f, _, v, y, b), V(-d, f, _, v, y, b)) : 0;
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 V(e, t, n, r, i, a) {
223
- let o = i - n, s = a - r, c = o * o + s * s, l = c > 0 ? W(((e - n) * o + (t - r) * s) / c) : 0, u = e - (n + o * l), d = t - (r + s * l);
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 H(e, t, n, r, i, a) {
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 U(e, t, n, r) {
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 W(e) {
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 G = 1e-4, K = 20, te = 64, q = "collidable", J = [], Y = class {
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 (k(s, c, l)) continue;
251
- let u = i[4], d = A(s, c, l, u), f = j(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);
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 = X(e);
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
- Z(n, r, i, e) && t(e);
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 = X(e);
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: J
330
+ blocking: W
283
331
  };
284
- let { x: a, y: o, halfWidth: s, halfHeight: c } = i, l = a + t, u = o + n, d = [], f = M(i.shape, i.width, i.height);
285
- if (this.forEachCandidate(i, Math.min(a, l) - s, Math.min(o, u) - c, Math.max(a, l) + s, Math.max(o, u) + c, (e) => {
286
- if (Z(i, a, o, e)) return;
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: J
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 g = G / r;
308
- for (let e = 0; e < K && m - p > g; e++) {
309
- let e = (p + m) / 2;
310
- this.blockedAt(i, d, t, n, e) ? m = e : p = 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 _ = [], v = a + t * m, y = o + n * m;
313
- for (let e of d) Z(i, v, y, e) && _.push(e);
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: p * r > G ? p : 0,
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 (Z(e, a, o, n)) return !0;
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 X(e) {
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 (k(i, a, o)) return;
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: A(i, a, o, s),
348
- halfHeight: j(i, a, o, s),
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 Z(e, t, n, r) {
385
+ function q(e, t, n, r) {
354
386
  let i = r.components.transform;
355
- return N(e.shape, t, n, e.width, e.height, e.angle, r.components.body[0], i[0], i[1], i[2], i[3], i[4]);
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/physics-update.ts
359
- function ne(e = {}) {
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, l = i.velocity[0] * c, u = i.velocity[1] * c, d;
365
- if (r) {
366
- let e = r.sweep(s, l, u);
367
- l *= e.fraction, u *= e.fraction, d = e.blocking;
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: t !== void 0,
450
+ collision: !0,
374
451
  optional: n
375
452
  } });
376
- return t && (i.preRun = (e, t, n) => {
377
- r = new Y(n.collidable ?? [], e.elapsedTime / 1e3);
378
- }), i;
453
+ return i.preRun = (e, t, n) => {
454
+ r = new G(n.collidable ?? [], e.elapsedTime / 1e3);
455
+ }, i;
379
456
  }
380
- var Q = (e, t, n, r, i) => {
381
- let a = e.elapsedTime / 1e3;
382
- $(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i);
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 $(e, n, r, i, a) {
385
- r !== 0 && (t(n, 0, r, Infinity), a.entityComponentChanged(e, "transform", "x", n[0])), i !== 0 && (t(n, 1, i, Infinity), a.entityComponentChanged(e, "transform", "y", n[1]));
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 re = class extends n {
472
+ var ye = 50, be = class extends i {
473
+ tick = 0;
474
+ reportMoves;
390
475
  constructor(e, t = {}) {
391
- let n = t.updateFunction ?? Q, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = i && !r.includes("body") ? ["body", ...r] : r;
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: a,
484
+ optional: o,
398
485
  updateFunction: n,
399
- queries: i ? { [q]: {
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 { ee as BODY_CATEGORY_INDEX, S as BODY_MASK_INDEX, x as BODY_SHAPE_INDEX, C as BODY_SIZE, q as COLLIDABLE_QUERY, Y as CollisionBroadphase, v as DEFAULT_COLLIDE_CATEGORY, y as DEFAULT_COLLIDE_MASK, re as PhysicsSystem, g as SHAPE_CAPSULE, h as SHAPE_CIRCLE, m as SHAPE_RECTANGLE, s as TRANSFORM_ANGLE_INDEX, o as TRANSFORM_HEIGHT_INDEX, c as TRANSFORM_SIZE, a as TRANSFORM_WIDTH_INDEX, r as TRANSFORM_X_INDEX, i as TRANSFORM_Y_INDEX, f as VELOCITY_SIZE, u as VELOCITY_X_INDEX, d as VELOCITY_Y_INDEX, w as bodyDefinition, I as boundsHalfHeight, F as boundsHalfWidth, b as canCollide, D as capsuleHalfLength, ne as createPhysicsUpdate, L as orientedBoxesOverlap, E as physicsRegistry, Q as physicsUpdate, V as pointSegmentDistanceSquared, B as segmentBoxDistanceSquared, z as segmentSegmentDistanceSquared, j as shapeHalfHeight, A as shapeHalfWidth, k as shapeIsEmpty, M as shapeMinHalfExtent, O as shapeRadius, N as shapesOverlap, l as transformDefinition, p as velocityDefinition };
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