@daneren2005/shared-memory-physics 1.3.0 → 1.4.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,9 +1,40 @@
1
- import { loadFloat32 as e, storeFloat32 as t } from "@daneren2005/shared-memory-objects/utils/float32-atomics";
2
- import n from "flatbush";
3
- import { ComponentSystem as r, DEAD_INDEX as i } from "@daneren2005/shared-memory-ecs";
4
- import { addAtomicFloat32 as a } from "@daneren2005/shared-memory-objects/utils/atomic-math";
1
+ import { Component as e, ComponentSystem as t, DEAD_INDEX as n } from "@daneren2005/shared-memory-ecs";
2
+ import { loadFloat32 as r, storeFloat32 as i } from "@daneren2005/shared-memory-objects/utils/float32-atomics";
3
+ import a from "flatbush";
4
+ import { addAtomicFloat32 as o } from "@daneren2005/shared-memory-objects/utils/atomic-math";
5
5
  //#region src/components/transform-component.ts
6
- var o = 0, s = 1, c = 2, l = 3, u = 4, d = 5, f = {
6
+ var s = 0, c = 1, l = 2, u = 3, d = 4, f = 5, p = class extends e {
7
+ get x() {
8
+ return this.block[0];
9
+ }
10
+ set x(e) {
11
+ this.block[0] = e;
12
+ }
13
+ get y() {
14
+ return this.block[1];
15
+ }
16
+ set y(e) {
17
+ this.block[1] = e;
18
+ }
19
+ get width() {
20
+ return this.block[2];
21
+ }
22
+ set width(e) {
23
+ this.block[2] = e;
24
+ }
25
+ get height() {
26
+ return this.block[3];
27
+ }
28
+ set height(e) {
29
+ this.block[3] = e;
30
+ }
31
+ get angle() {
32
+ return this.block[4];
33
+ }
34
+ set angle(e) {
35
+ this.block[4] = e;
36
+ }
37
+ }, m = {
7
38
  type: Float32Array,
8
39
  size: 5,
9
40
  loadProperties: [
@@ -11,52 +42,22 @@ var o = 0, s = 1, c = 2, l = 3, u = 4, d = 5, f = {
11
42
  "height",
12
43
  "radius"
13
44
  ],
14
- load(e, t, n) {
15
- let r = n.radius, i = n.width, a = n.height;
16
- if (r !== void 0) {
17
- if (i !== void 0 || a !== void 0) throw Error("A transform takes either a radius or a width and height, not both");
18
- i = a = r * 2;
45
+ toBlock(e) {
46
+ let t = e.radius, n = e.width, r = e.height;
47
+ if (t !== void 0) {
48
+ if (n !== void 0 || r !== void 0) throw Error("A transform takes either a radius or a width and height, not both");
49
+ n = r = t * 2;
19
50
  }
20
- let o = t.create([
21
- n.x,
22
- n.y,
23
- i,
24
- a,
25
- n.angle ?? 0
26
- ]), s = t.getBlock(o);
27
- return {
28
- index: o,
29
- get x() {
30
- return s[0];
31
- },
32
- set x(e) {
33
- s[0] = e;
34
- },
35
- get y() {
36
- return s[1];
37
- },
38
- set y(e) {
39
- s[1] = e;
40
- },
41
- get width() {
42
- return s[2];
43
- },
44
- set width(e) {
45
- s[2] = e;
46
- },
47
- get height() {
48
- return s[3];
49
- },
50
- set height(e) {
51
- s[3] = e;
52
- },
53
- get angle() {
54
- return s[4];
55
- },
56
- set angle(e) {
57
- s[4] = e;
58
- }
59
- };
51
+ return [
52
+ e.x,
53
+ e.y,
54
+ n,
55
+ r,
56
+ e.angle ?? 0
57
+ ];
58
+ },
59
+ attach(e, t, n) {
60
+ return new p(t.getBlock(n), n);
60
61
  },
61
62
  save(e) {
62
63
  return {
@@ -65,27 +66,28 @@ var o = 0, s = 1, c = 2, l = 3, u = 4, d = 5, f = {
65
66
  angle: e.angle
66
67
  };
67
68
  }
68
- }, p = 0, m = 1, h = 2, g = {
69
+ }, h = 0, g = 1, _ = 2, v = class extends e {
70
+ get velocityX() {
71
+ return this.block[0];
72
+ }
73
+ set velocityX(e) {
74
+ this.block[0] = e;
75
+ }
76
+ get velocityY() {
77
+ return this.block[1];
78
+ }
79
+ set velocityY(e) {
80
+ this.block[1] = e;
81
+ }
82
+ }, y = {
69
83
  type: Float32Array,
70
84
  size: 2,
71
85
  loadProperties: ["velocityX", "velocityY"],
72
- load(e, t, n) {
73
- let r = t.create([n.velocityX ?? 0, n.velocityY ?? 0]), i = t.getBlock(r);
74
- return {
75
- index: r,
76
- get velocityX() {
77
- return i[0];
78
- },
79
- set velocityX(e) {
80
- i[0] = e;
81
- },
82
- get velocityY() {
83
- return i[1];
84
- },
85
- set velocityY(e) {
86
- i[1] = e;
87
- }
88
- };
86
+ toBlock(e) {
87
+ return [e.velocityX ?? 0, e.velocityY ?? 0];
88
+ },
89
+ attach(e, t, n) {
90
+ return new v(t.getBlock(n), n);
89
91
  },
90
92
  save(e) {
91
93
  return {
@@ -93,25 +95,56 @@ var o = 0, s = 1, c = 2, l = 3, u = 4, d = 5, f = {
93
95
  velocityY: e.velocityY
94
96
  };
95
97
  }
96
- }, _ = 1, v = 2, y = 3, b = [
98
+ }, b = 1, x = 2, S = 3, C = [
97
99
  1,
98
100
  2,
99
101
  3
100
- ], x = 1, S = 4294967295;
101
- function C(e, t, n, r) {
102
+ ], w = 1, T = 4294967295;
103
+ function E(e, t, n, r) {
102
104
  return (t & n) !== 0 && (r & e) !== 0;
103
105
  }
104
- var w = 0, T = 1, E = 2, D = 3, O = 3, k = 4, A = 8;
106
+ var D = 0, O = 1, k = 2, A = 3, ee = 3, te = 4, ne = 8;
105
107
  function j(e) {
106
108
  return e[0] & 3;
107
109
  }
108
110
  function M(e) {
109
111
  return (e[0] & 4) != 0;
110
112
  }
111
- function ee(e) {
113
+ function re(e) {
112
114
  return (e[0] & 8) != 0;
113
115
  }
114
- var te = {
116
+ var ie = class extends e {
117
+ get shape() {
118
+ return this.block[0] & 3;
119
+ }
120
+ set shape(e) {
121
+ this.block[0] = this.block[0] & -4 | e & 3;
122
+ }
123
+ get collideCategory() {
124
+ return this.block[1];
125
+ }
126
+ set collideCategory(e) {
127
+ this.block[1] = e;
128
+ }
129
+ get collideMask() {
130
+ return this.block[2];
131
+ }
132
+ set collideMask(e) {
133
+ this.block[2] = e;
134
+ }
135
+ get sensor() {
136
+ return (this.block[0] & 4) != 0;
137
+ }
138
+ set sensor(e) {
139
+ this.block[0] = e ? this.block[0] | 4 : this.block[0] & -5;
140
+ }
141
+ get continuousCollisionDetection() {
142
+ return (this.block[0] & 8) != 0;
143
+ }
144
+ set continuousCollisionDetection(e) {
145
+ this.block[0] = e ? this.block[0] | 8 : this.block[0] & -9;
146
+ }
147
+ }, ae = {
115
148
  type: Uint32Array,
116
149
  size: 3,
117
150
  loadProperties: [
@@ -124,148 +157,121 @@ var te = {
124
157
  "sensor",
125
158
  "continuousCollisionDetection"
126
159
  ],
127
- load(e, t, n) {
128
- let r = t.create([
129
- ne(n),
130
- n.collideCategory ?? 1,
131
- n.collideMask ?? 4294967295
132
- ]), i = t.getBlock(r);
133
- return {
134
- index: r,
135
- get shape() {
136
- return i[0] & 3;
137
- },
138
- set shape(e) {
139
- i[0] = i[0] & -4 | e & 3;
140
- },
141
- get collideCategory() {
142
- return i[1];
143
- },
144
- set collideCategory(e) {
145
- i[1] = e;
146
- },
147
- get collideMask() {
148
- return i[2];
149
- },
150
- set collideMask(e) {
151
- i[2] = e;
152
- },
153
- get sensor() {
154
- return (i[0] & 4) != 0;
155
- },
156
- set sensor(e) {
157
- i[0] = e ? i[0] | 4 : i[0] & -5;
158
- },
159
- get continuousCollisionDetection() {
160
- return (i[0] & 8) != 0;
161
- },
162
- set continuousCollisionDetection(e) {
163
- i[0] = e ? i[0] | 8 : i[0] & -9;
164
- }
165
- };
160
+ toBlock(e) {
161
+ return [
162
+ oe(e),
163
+ e.collideCategory ?? 1,
164
+ e.collideMask ?? 4294967295
165
+ ];
166
+ },
167
+ attach(e, t, n) {
168
+ return new ie(t.getBlock(n), n);
166
169
  }
167
170
  };
168
- function ne(e) {
169
- let t = re(e);
171
+ function oe(e) {
172
+ let t = se(e);
170
173
  return e.sensor && (t |= 4), e.continuousCollisionDetection && (t |= 8), t;
171
174
  }
172
- function re(e) {
175
+ function se(e) {
173
176
  let t = e.shape;
174
177
  if (t === void 0) return e.radius === void 0 ? 1 : 2;
175
- if (!b.includes(t)) throw Error(`Unknown body shape: ${t}`);
178
+ if (!C.includes(t)) throw Error(`Unknown body shape: ${t}`);
176
179
  return t;
177
180
  }
178
181
  //#endregion
179
182
  //#region src/components/bounciness-component.ts
180
- var ie = 0, ae = 1, oe = {
183
+ var ce = 0, le = 1, ue = class extends e {
184
+ get bounciness() {
185
+ return this.block[0];
186
+ }
187
+ set bounciness(e) {
188
+ this.block[0] = e;
189
+ }
190
+ }, de = {
181
191
  type: Float32Array,
182
192
  size: 1,
183
193
  loadProperties: ["bounciness"],
184
- load(e, t, n) {
185
- let r = t.create([n.bounciness ?? 0]), i = t.getBlock(r);
186
- return {
187
- index: r,
188
- get bounciness() {
189
- return i[0];
190
- },
191
- set bounciness(e) {
192
- i[0] = e;
193
- }
194
- };
194
+ toBlock(e) {
195
+ return [e.bounciness ?? 0];
196
+ },
197
+ attach(e, t, n) {
198
+ return new ue(t.getBlock(n), n);
199
+ }
200
+ }, fe = 0, pe = 1, me = 2, he = 3, ge = 4, _e = 5, ve = 6, ye = 7, be = 8, xe = class extends e {
201
+ get x() {
202
+ return this.block[0];
203
+ }
204
+ set x(e) {
205
+ this.block[0] = e;
206
+ }
207
+ get y() {
208
+ return this.block[1];
209
+ }
210
+ set y(e) {
211
+ this.block[1] = e;
212
+ }
213
+ get prevX() {
214
+ return this.block[2];
215
+ }
216
+ set prevX(e) {
217
+ this.block[2] = e;
218
+ }
219
+ get prevY() {
220
+ return this.block[3];
221
+ }
222
+ set prevY(e) {
223
+ this.block[3] = e;
224
+ }
225
+ get progress() {
226
+ return this.block[4];
227
+ }
228
+ set progress(e) {
229
+ this.block[4] = e;
230
+ }
231
+ get syncedTick() {
232
+ return this.block[5];
233
+ }
234
+ set syncedTick(e) {
235
+ this.block[5] = e;
195
236
  }
196
- }, se = 0, ce = 1, le = 2, ue = 3, de = 4, fe = 5, pe = 6, me = 7, he = 8, ge = {
237
+ get duration() {
238
+ return this.block[6];
239
+ }
240
+ set duration(e) {
241
+ this.block[6] = e;
242
+ }
243
+ get tick() {
244
+ return r(this.block, 7);
245
+ }
246
+ set tick(e) {
247
+ i(this.block, 7, e);
248
+ }
249
+ }, Se = {
197
250
  type: Float32Array,
198
251
  size: 8,
199
252
  loadProperties: ["interpolate"],
200
- load(n, r, i) {
201
- let a = i.x ?? 0, o = i.y ?? 0, s = r.create([
202
- a,
203
- o,
204
- a,
205
- o,
253
+ toBlock(e) {
254
+ let t = e.x ?? 0, n = e.y ?? 0;
255
+ return [
256
+ t,
257
+ n,
258
+ t,
259
+ n,
206
260
  0,
207
261
  0,
208
262
  0,
209
263
  0
210
- ]), c = r.getBlock(s);
211
- return {
212
- index: s,
213
- get x() {
214
- return c[0];
215
- },
216
- set x(e) {
217
- c[0] = e;
218
- },
219
- get y() {
220
- return c[1];
221
- },
222
- set y(e) {
223
- c[1] = e;
224
- },
225
- get prevX() {
226
- return c[2];
227
- },
228
- set prevX(e) {
229
- c[2] = e;
230
- },
231
- get prevY() {
232
- return c[3];
233
- },
234
- set prevY(e) {
235
- c[3] = e;
236
- },
237
- get progress() {
238
- return c[4];
239
- },
240
- set progress(e) {
241
- c[4] = e;
242
- },
243
- get syncedTick() {
244
- return c[5];
245
- },
246
- set syncedTick(e) {
247
- c[5] = e;
248
- },
249
- get duration() {
250
- return c[6];
251
- },
252
- set duration(e) {
253
- c[6] = e;
254
- },
255
- get tick() {
256
- return e(c, 7);
257
- },
258
- set tick(e) {
259
- t(c, 7, e);
260
- }
261
- };
264
+ ];
265
+ },
266
+ attach(e, t, n) {
267
+ return new xe(t.getBlock(n), n);
262
268
  }
263
269
  };
264
- function _e(e) {
270
+ function Ce(e) {
265
271
  let { transform: t, interpolation: n } = e.components;
266
272
  !t || !n || (n.prevX = n.x = t.x, n.prevY = n.y = t.y);
267
273
  }
268
- function ve(e, t) {
274
+ function we(e, t) {
269
275
  let { transform: n, velocity: r, interpolation: i } = e.components;
270
276
  if (!n || !r || !i) return;
271
277
  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;
@@ -273,12 +279,12 @@ function ve(e, t) {
273
279
  }
274
280
  //#endregion
275
281
  //#region src/components/registry.ts
276
- var ye = {
277
- transform: f,
278
- velocity: g,
279
- body: te,
280
- bounciness: oe,
281
- interpolation: ge
282
+ var Te = {
283
+ transform: m,
284
+ velocity: y,
285
+ body: ae,
286
+ bounciness: de,
287
+ interpolation: Se
282
288
  }, N = {
283
289
  x: 0,
284
290
  y: 0
@@ -296,65 +302,65 @@ function L(e, t, n) {
296
302
  return e === 2 ? t <= 0 : e === 3 ? n <= 0 : t <= 0 || n <= 0;
297
303
  }
298
304
  function R(e, t, n, r) {
299
- return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) * F(t, n) + n / 2 : Ee(t, n, r);
305
+ return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(r)) * F(t, n) + n / 2 : Me(t, n, r);
300
306
  }
301
307
  function z(e, t, n, r) {
302
- return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) * F(t, n) + n / 2 : De(t, n, r);
308
+ return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(r)) * F(t, n) + n / 2 : Ne(t, n, r);
303
309
  }
304
310
  function B(e, t, n, r, i, a, o, s, c, l, u, d) {
305
311
  if (L(e, r, i) || L(o, l, u)) return !1;
306
312
  let f = e !== 1, p = o !== 1;
307
- if (!f && !p) return Oe(t, n, r, i, a, s, c, l, u, d);
313
+ if (!f && !p) return Pe(t, n, r, i, a, s, c, l, u, d);
308
314
  if (f && !p) return B(o, s, c, l, u, d, e, t, n, r, i, a);
309
315
  let m = V(o, l, u), h = Math.cos(d) * m, g = Math.sin(d) * m, _ = I(o, l, u);
310
- if (!f) return ke(s - h, c - g, s + h, c + g, t, n, r, i, a) < _ * _;
316
+ if (!f) return Fe(s - h, c - g, s + h, c + g, t, n, r, i, a) < _ * _;
311
317
  let v = V(e, r, i), y = Math.cos(a) * v, b = Math.sin(a) * v, x = I(e, r, i) + _;
312
318
  return W(t - y, n - b, t + y, n + b, s - h, c - g, s + h, c + g) < x * x;
313
319
  }
314
320
  function V(e, t, n) {
315
321
  return e === 3 ? F(t, n) : 0;
316
322
  }
317
- function be(e, t, n, r, i, a, o, s, c, l, u, d, f) {
323
+ function Ee(e, t, n, r, i, a, o, s, c, l, u, d, f) {
318
324
  let p = e !== 1, m = o !== 1;
319
- return !p && !m ? xe(t, n, r, i, a, s, c, l, u, d, f) : p && m ? Se(e, t, n, r, i, a, o, s, c, l, u, d, f) : p ? Ce(s, c, l, u, d, e, t, n, r, i, a, f) : Ce(t, n, r, i, a, o, s, c, l, u, d, f) ? (f.x = -f.x, f.y = -f.y, !0) : !1;
325
+ return !p && !m ? De(t, n, r, i, a, s, c, l, u, d, f) : p && m ? Oe(e, t, n, r, i, a, o, s, c, l, u, d, f) : p ? ke(s, c, l, u, d, e, t, n, r, i, a, f) : ke(t, n, r, i, a, o, s, c, l, u, d, f) ? (f.x = -f.x, f.y = -f.y, !0) : !1;
320
326
  }
321
- function xe(e, t, n, r, i, a, o, s, c, l, u) {
327
+ function De(e, t, n, r, i, a, o, s, c, l, u) {
322
328
  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 = U(d, f, y, b, h, g, d, f, _, v, p, m);
323
329
  u.x = d, u.y = f;
324
330
  let S = U(-f, d, y, b, h, g, d, f, _, v, p, m);
325
- return S < x && (x = S, u.x = -f, u.y = d), S = U(p, m, y, b, h, g, d, f, _, v, p, m), S < x && (x = S, u.x = p, u.y = m), S = U(-m, p, y, b, h, g, d, f, _, v, p, m), S < x && (u.x = -m, u.y = p), we(y, b, u), !0;
331
+ return S < x && (x = S, u.x = -f, u.y = d), S = U(p, m, y, b, h, g, d, f, _, v, p, m), S < x && (x = S, u.x = p, u.y = m), S = U(-m, p, y, b, h, g, d, f, _, v, p, m), S < x && (u.x = -m, u.y = p), Ae(y, b, u), !0;
326
332
  }
327
- function Se(e, t, n, r, i, a, o, s, c, l, u, d, f) {
333
+ function Oe(e, t, n, r, i, a, o, s, c, l, u, d, f) {
328
334
  let p = V(e, r, i), m = Math.cos(a) * p, h = Math.sin(a) * p, g = V(o, l, u), _ = Math.cos(d) * g, v = Math.sin(d) * g, y = Math.sqrt(W(t - m, n - h, t + m, n + h, s - _, c - v, s + _, c + v, N));
329
- return y > 0 ? (f.x = N.x / y, f.y = N.y / y, !0) : Te(t - s, n - c, f);
335
+ return y > 0 ? (f.x = N.x / y, f.y = N.y / y, !0) : je(t - s, n - c, f);
330
336
  }
331
- function Ce(e, t, n, r, i, a, o, s, c, l, u, d) {
332
- let f = V(a, c, l), p = Math.cos(u) * f, m = Math.sin(u) * f, h = Math.sqrt(ke(o - p, s - m, o + p, s + m, e, t, n, r, i, N));
337
+ function ke(e, t, n, r, i, a, o, s, c, l, u, d) {
338
+ let f = V(a, c, l), p = Math.cos(u) * f, m = Math.sin(u) * f, h = Math.sqrt(Fe(o - p, s - m, o + p, s + m, e, t, n, r, i, N));
333
339
  if (h > 0) return d.x = N.x / h, d.y = N.y / h, !0;
334
340
  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 = I(a, c, l), T = n / 2, E = r / 2, D = H(1, 0, b, x, S, C, w, T, E);
335
341
  d.x = 1, d.y = 0;
336
342
  let O = H(0, 1, b, x, S, C, w, T, E);
337
- O < D && (D = O, d.x = 0, d.y = 1), Te(-C, S, P) && (O = H(P.x, P.y, b, x, S, C, w, T, E), O < D && (d.x = P.x, d.y = P.y)), we(b, x, d);
343
+ O < D && (D = O, d.x = 0, d.y = 1), je(-C, S, P) && (O = H(P.x, P.y, b, x, S, C, w, T, E), O < D && (d.x = P.x, d.y = P.y)), Ae(b, x, d);
338
344
  let k = d.x, A = d.y;
339
345
  return d.x = k * g - A * _, d.y = k * _ + A * g, !0;
340
346
  }
341
347
  function H(e, t, n, r, i, a, o, s, c) {
342
348
  return s * Math.abs(e) + c * Math.abs(t) + (Math.abs(i * e + a * t) + o) - Math.abs(n * e + r * t);
343
349
  }
344
- function we(e, t, n) {
350
+ function Ae(e, t, n) {
345
351
  e * n.x + t * n.y < 0 && (n.x = -n.x, n.y = -n.y);
346
352
  }
347
- function Te(e, t, n) {
353
+ function je(e, t, n) {
348
354
  let r = Math.sqrt(e * e + t * t);
349
355
  return r === 0 ? !1 : (n.x = e / r, n.y = t / r, !0);
350
356
  }
351
- function Ee(e, t, n) {
357
+ function Me(e, t, n) {
352
358
  return (Math.abs(Math.cos(n)) * e + Math.abs(Math.sin(n)) * t) / 2;
353
359
  }
354
- function De(e, t, n) {
360
+ function Ne(e, t, n) {
355
361
  return (Math.abs(Math.sin(n)) * e + Math.abs(Math.cos(n)) * t) / 2;
356
362
  }
357
- function Oe(e, t, n, r, i, a, o, s, c, l) {
363
+ function Pe(e, t, n, r, i, a, o, s, c, l) {
358
364
  if (n <= 0 || r <= 0 || s <= 0 || c <= 0) return !1;
359
365
  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;
360
366
  return U(u, d, v, y, m, h, u, d, g, _, f, p) > 0 && U(-d, u, v, y, m, h, u, d, g, _, f, p) > 0 && U(f, p, v, y, m, h, u, d, g, _, f, p) > 0 && U(-p, f, v, y, m, h, u, d, g, _, f, p) > 0;
@@ -377,9 +383,9 @@ function W(e, t, n, r, i, a, o, s, c) {
377
383
  let b = e + l * v - (i + d * y), x = t + u * v - (a + f * y);
378
384
  return c && (c.x = b, c.y = x), b * b + x * x;
379
385
  }
380
- function ke(e, t, n, r, i, a, o, s, c, l) {
386
+ function Fe(e, t, n, r, i, a, o, s, c, l) {
381
387
  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;
382
- if (!Ae(v, y, b, x, f, p)) return l && (l.x = 0, l.y = 0), 0;
388
+ if (!Ie(v, y, b, x, f, p)) return l && (l.x = 0, l.y = 0), 0;
383
389
  if (!l) return Math.min(q(v, y, f, p), q(b, x, f, p), K(-f, -p, v, y, b, x), K(f, -p, v, y, b, x), K(f, p, v, y, b, x), K(-f, p, v, y, b, x));
384
390
  let S = q(v, y, f, p, l);
385
391
  S = G(S, q(b, x, f, p, P), P, l, !1), S = G(S, K(-f, -p, v, y, b, x, P), P, l, !0), S = G(S, K(f, -p, v, y, b, x, P), P, l, !0), S = G(S, K(f, p, v, y, b, x, P), P, l, !0), S = G(S, K(-f, p, v, y, b, x, P), P, l, !0);
@@ -393,7 +399,7 @@ function K(e, t, n, r, i, a, o) {
393
399
  let s = i - n, c = a - r, l = s * s + c * c, u = l > 0 ? J(((e - n) * s + (t - r) * c) / l) : 0, d = e - (n + s * u), f = t - (r + c * u);
394
400
  return o && (o.x = d, o.y = f), d * d + f * f;
395
401
  }
396
- function Ae(e, t, n, r, i, a) {
402
+ function Ie(e, t, n, r, i, a) {
397
403
  if (Math.max(e, n) < -i || Math.min(e, n) > i || Math.max(t, r) < -a || Math.min(t, r) > a) return !0;
398
404
  let o = -(r - t), s = n - e;
399
405
  return Math.abs(o * e + s * t) > i * Math.abs(o) + a * Math.abs(s);
@@ -407,17 +413,17 @@ function J(e) {
407
413
  }
408
414
  //#endregion
409
415
  //#region src/systems/collision.ts
410
- var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
416
+ var Y = 1e-4, Le = 24, Re = "collidable", X = [], ze = 2 ** 26, Be = {
411
417
  fraction: 1,
412
418
  blocking: X
413
- }, Fe = class {
419
+ }, Ve = class {
414
420
  buckets = [];
415
421
  hasBounciness = !1;
416
422
  resolved = /* @__PURE__ */ new Set();
417
423
  constructor(e, t) {
418
- let r = /* @__PURE__ */ new Map();
419
- for (let n of e) {
420
- let e = n.components, i = e.transform, a = e.body;
424
+ let n = /* @__PURE__ */ new Map();
425
+ for (let r of e) {
426
+ let e = r.components, i = e.transform, a = e.body;
421
427
  if (!i || !a) continue;
422
428
  let o = a[1];
423
429
  if (o === 0) continue;
@@ -425,37 +431,37 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
425
431
  if (L(s, c, l)) continue;
426
432
  let u = i[4], d = R(s, c, l, u), f = z(s, c, l, u);
427
433
  e.bounciness && (this.hasBounciness = !0);
428
- let p = e.velocity, m = p ? Math.abs(p[0]) * t : 0, h = p ? Math.abs(p[1]) * t : 0, g = i[0], _ = i[1], v = r.get(o);
434
+ let p = e.velocity, m = p ? Math.abs(p[0]) * t : 0, h = p ? Math.abs(p[1]) * t : 0, g = i[0], _ = i[1], v = n.get(o);
429
435
  v || (v = {
430
436
  entries: [],
431
437
  bounds: []
432
- }, r.set(o, v)), v.entries.push({
433
- entityId: n.entityId,
438
+ }, n.set(o, v)), v.entries.push({
439
+ entityId: r.entityId,
434
440
  components: e
435
441
  }), v.bounds.push(g - d - m, _ - f - h, g + d + m, _ + f + h);
436
442
  }
437
- for (let [e, { entries: t, bounds: i }] of r) {
438
- let r = new n(t.length);
439
- for (let e = 0; e < t.length; e++) r.add(i[e * 4], i[e * 4 + 1], i[e * 4 + 2], i[e * 4 + 3]);
440
- r.finish(), this.buckets.push({
443
+ for (let [e, { entries: t, bounds: r }] of n) {
444
+ let n = new a(t.length);
445
+ for (let e = 0; e < t.length; e++) n.add(r[e * 4], r[e * 4 + 1], r[e * 4 + 2], r[e * 4 + 3]);
446
+ n.finish(), this.buckets.push({
441
447
  category: e,
442
448
  entries: t,
443
- index: r
449
+ index: n
444
450
  });
445
451
  }
446
452
  }
447
453
  claimContact(e, t) {
448
- let n = e < t ? e * Ne + t : t * Ne + e;
454
+ let n = e < t ? e * ze + t : t * ze + e;
449
455
  return this.resolved.has(n) ? !1 : (this.resolved.add(n), !0);
450
456
  }
451
457
  forEachOverlapping(e, t, n = 0, r = 0) {
452
- let i = Le(e);
458
+ let i = Ue(e);
453
459
  if (!i) return;
454
460
  let { x: a, y: o, halfWidth: s, halfHeight: c } = i;
455
461
  if (i.ccd && (n !== 0 || r !== 0)) {
456
462
  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;
457
463
  this.forEachCandidate(i, u, d, f, p, (a) => {
458
- Re(i, e, l, n, r, a) && t(a);
464
+ We(i, e, l, n, r, a) && t(a);
459
465
  });
460
466
  return;
461
467
  }
@@ -464,7 +470,7 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
464
470
  });
465
471
  }
466
472
  sweep(e, t, n) {
467
- let r = Math.sqrt(t * t + n * n), i = Le(e);
473
+ let r = Math.sqrt(t * t + n * n), i = Ue(e);
468
474
  if (!i || r === 0) return {
469
475
  fraction: 1,
470
476
  blocking: X
@@ -477,7 +483,7 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
477
483
  } : this.refine(i, a, t, n, r);
478
484
  }
479
485
  resolveMove(e, t, n, r) {
480
- let i = Math.sqrt(t * t + n * n), a = Le(e);
486
+ let i = Math.sqrt(t * t + n * n), a = Ue(e);
481
487
  if (!a || i === 0) return {
482
488
  moveX: t,
483
489
  moveY: n,
@@ -508,7 +514,7 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
508
514
  moveY: n,
509
515
  blocking: X
510
516
  };
511
- let i = e.length === 0 ? Pe : this.refine(a, e, t, 0, Math.abs(t)), o = r.length === 0 ? Pe : this.refine(a, r, 0, n, Math.abs(n)), s = t * i.fraction, c = n * o.fraction;
517
+ let i = e.length === 0 ? Be : this.refine(a, e, t, 0, Math.abs(t)), o = r.length === 0 ? Be : this.refine(a, r, 0, n, Math.abs(n)), s = t * i.fraction, c = n * o.fraction;
512
518
  if (s !== 0 && c !== 0) {
513
519
  let e = this.gatherCandidates(a, s, c);
514
520
  if (e.length > 0) {
@@ -523,7 +529,7 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
523
529
  return {
524
530
  moveX: s,
525
531
  moveY: c,
526
- blocking: Ie(i.blocking, o.blocking)
532
+ blocking: He(i.blocking, o.blocking)
527
533
  };
528
534
  }
529
535
  let s = this.refine(a, o, t, n, i);
@@ -543,7 +549,7 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
543
549
  }
544
550
  refine(e, t, n, r, i) {
545
551
  let { x: a, y: o } = e, s = 0, c = 1, l = Y / i;
546
- for (let i = 0; i < je && c - s > l; i++) {
552
+ for (let i = 0; i < Le && c - s > l; i++) {
547
553
  let i = (s + c) / 2;
548
554
  this.blockedAt(e, t, n, r, i) ? c = i : s = i;
549
555
  }
@@ -558,7 +564,7 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
558
564
  if (e.sensor) return [];
559
565
  let { x: r, y: i, halfWidth: a, halfHeight: o } = e, s = r + t, c = i + n, l = [];
560
566
  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) => {
561
- M(a.components.body) || Z(e, r, i, a) || Re(e, r, i, t, n, a) && l.push(a);
567
+ M(a.components.body) || Z(e, r, i, a) || We(e, r, i, t, n, a) && l.push(a);
562
568
  }), l;
563
569
  }
564
570
  sweepContinuous(e, t, n, r) {
@@ -581,12 +587,12 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
581
587
  let a;
582
588
  if (this.blockedAtOne(e, t, n, r, 1)) a = 1;
583
589
  else {
584
- let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l = ze((s * n + c * r) / (i * i));
590
+ let o = t.components.transform, s = o[0] - e.x, c = o[1] - e.y, l = Ge((s * n + c * r) / (i * i));
585
591
  if (!this.blockedAtOne(e, t, n, r, l)) return l;
586
592
  a = l;
587
593
  }
588
594
  let o = 0, s = Y / i;
589
- for (let i = 0; i < je && a - o > s; i++) {
595
+ for (let i = 0; i < Le && a - o > s; i++) {
590
596
  let i = (o + a) / 2;
591
597
  this.blockedAtOne(e, t, n, r, i) ? a = i : o = i;
592
598
  }
@@ -600,21 +606,21 @@ var Y = 1e-4, je = 24, Me = "collidable", X = [], Ne = 2 ** 26, Pe = {
600
606
  for (let n of t) if (Z(e, a, o, n)) return !0;
601
607
  return !1;
602
608
  }
603
- forEachCandidate(e, t, n, r, a, o) {
604
- for (let s of this.buckets) if ((e.mask & s.category) !== 0) for (let c of s.index.search(t, n, r, a)) {
609
+ forEachCandidate(e, t, r, i, a, o) {
610
+ for (let s of this.buckets) if ((e.mask & s.category) !== 0) for (let c of s.index.search(t, r, i, a)) {
605
611
  let t = s.entries[c];
606
- t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[i] !== 1 && o(t);
612
+ t.entityId !== e.entityId && (t.components.body[2] & e.category) !== 0 && t.components.entity?.[n] !== 1 && o(t);
607
613
  }
608
614
  }
609
615
  };
610
- function Ie(e, t) {
616
+ function He(e, t) {
611
617
  if (e.length === 0) return t;
612
618
  if (t.length === 0) return e;
613
619
  let n = [...e];
614
620
  for (let e of t) n.some((t) => t.entityId === e.entityId) || n.push(e);
615
621
  return n;
616
622
  }
617
- function Le(e) {
623
+ function Ue(e) {
618
624
  let t = e.components.body;
619
625
  if (!t) return;
620
626
  let n = t[2];
@@ -635,10 +641,10 @@ function Le(e) {
635
641
  category: t[1],
636
642
  mask: n,
637
643
  sensor: M(t),
638
- ccd: ee(t)
644
+ ccd: re(t)
639
645
  };
640
646
  }
641
- function Re(e, t, n, r, i, a) {
647
+ function We(e, t, n, r, i, a) {
642
648
  let o = t + r, s = n + i, c = a.components.transform, l = j(a.components.body), u = c[0], d = c[1], f = c[2], p = c[3], m = c[4];
643
649
  if (e.shape === 1) {
644
650
  let a = Math.cos(e.angle), c = Math.sin(e.angle), h = r * a + i * c, g = -r * c + i * a;
@@ -647,7 +653,7 @@ function Re(e, t, n, r, i, a) {
647
653
  let h = I(e.shape, e.width, e.height), g = Math.sqrt(r * r + i * i), _ = g > 0 ? Math.atan2(i, r) : e.angle;
648
654
  return B(3, (t + o) / 2, (n + s) / 2, g + h * 2, h * 2, _, l, u, d, f, p, m) ? !0 : B(e.shape, o, s, e.width, e.height, e.angle, l, u, d, f, p, m);
649
655
  }
650
- function ze(e) {
656
+ function Ge(e) {
651
657
  return e < 0 ? 0 : e > 1 ? 1 : e;
652
658
  }
653
659
  function Z(e, t, n, r) {
@@ -656,7 +662,7 @@ function Z(e, t, n, r) {
656
662
  }
657
663
  //#endregion
658
664
  //#region src/systems/spatial-index.ts
659
- var Be = class {
665
+ var Ke = class {
660
666
  entries = [];
661
667
  index;
662
668
  constructor(e) {
@@ -671,9 +677,9 @@ var Be = class {
671
677
  }), t.push(l - d, u - f, l + d, u + f);
672
678
  }
673
679
  if (this.entries.length === 0) return;
674
- let r = new n(this.entries.length);
675
- for (let e = 0; e < this.entries.length; e++) r.add(t[e * 4], t[e * 4 + 1], t[e * 4 + 2], t[e * 4 + 3]);
676
- r.finish(), this.index = r;
680
+ let n = new a(this.entries.length);
681
+ for (let e = 0; e < this.entries.length; e++) n.add(t[e * 4], t[e * 4 + 1], t[e * 4 + 2], t[e * 4 + 3]);
682
+ n.finish(), this.index = n;
677
683
  }
678
684
  get size() {
679
685
  return this.entries.length;
@@ -700,10 +706,10 @@ var Be = class {
700
706
  x: 0,
701
707
  y: 0
702
708
  };
703
- function Ve(e, t) {
704
- !Ue(e) && !Ue(t) || We(e, t) && Ge(e, t, Q) && (He(e, Q.x, Q.y), He(t, -Q.x, -Q.y));
709
+ function qe(e, t) {
710
+ !Ye(e) && !Ye(t) || Xe(e, t) && Ze(e, t, Q) && (Je(e, Q.x, Q.y), Je(t, -Q.x, -Q.y));
705
711
  }
706
- function He(e, t, n) {
712
+ function Je(e, t, n) {
707
713
  let r = e.components.bounciness, i = e.components.velocity;
708
714
  if (!r || !i) return;
709
715
  let a = i[0], o = i[1], s = a * t + o * n;
@@ -711,138 +717,161 @@ function He(e, t, n) {
711
717
  let c = (1 + r[0]) * s;
712
718
  i[0] = a - c * t, i[1] = o - c * n;
713
719
  }
714
- function Ue(e) {
720
+ function Ye(e) {
715
721
  return e.components.bounciness !== void 0 && e.components.velocity !== void 0;
716
722
  }
717
- function We(e, t) {
718
- return !qe(e.components.body) && !qe(t.components.body);
723
+ function Xe(e, t) {
724
+ return !$e(e.components.body) && !$e(t.components.body);
719
725
  }
720
- function Ge(e, t, n) {
726
+ function Ze(e, t, n) {
721
727
  let r = e.components.transform, i = t.components.transform;
722
- return be(Ke(e.components.body), r[0], r[1], r[2], r[3], r[4], Ke(t.components.body), i[0], i[1], i[2], i[3], i[4], n);
728
+ return Ee(Qe(e.components.body), r[0], r[1], r[2], r[3], r[4], Qe(t.components.body), i[0], i[1], i[2], i[3], i[4], n);
723
729
  }
724
- function Ke(e) {
730
+ function Qe(e) {
725
731
  return e ? j(e) : 1;
726
732
  }
727
- function qe(e) {
733
+ function $e(e) {
728
734
  return e !== void 0 && M(e);
729
735
  }
730
736
  //#endregion
731
737
  //#region src/systems/physics-update.ts
732
- var Je = "position-updated";
733
- function Ye(e = {}) {
734
- let { onCollision: t, optional: n = [] } = e, r, a = Object.assign((e, n, a, o, s) => {
735
- if (a.entity?.[i] === 1) return;
736
- let c = {
737
- entityId: n,
738
- components: a
739
- }, l = a.interpolation, u = e.elapsedTime / 1e3, d = a.velocity[0] * u, f = a.velocity[1] * u;
740
- Qe(l, a.transform, e.elapsedTime);
741
- let p = r;
742
- if (!p) {
743
- $(n, a.transform, d, f, s, e.reportMoves), $e(l, e.tick);
738
+ var et = "position-updated";
739
+ function tt(e = {}) {
740
+ let { onCollision: t, optional: r = [], group: i } = e, a, o, s = Object.assign((e, r, s, c, l) => {
741
+ if (s.entity?.[n] === 1) return;
742
+ let u = i ? nt(s, i) : 0;
743
+ if (i && e.skipGroup === u) return;
744
+ let d = {
745
+ entityId: r,
746
+ components: s
747
+ }, f = s.interpolation, p = e.elapsedTime / 1e3, m = s.velocity[0] * p, h = s.velocity[1] * p;
748
+ at(f, s.transform, e.elapsedTime);
749
+ let g = i ? o?.get(u) : a;
750
+ if (!g) {
751
+ $(r, s.transform, m, h, l, e.reportMoves), ot(f, e.tick);
744
752
  return;
745
753
  }
746
- let m = a.bounciness !== void 0, h = p.resolveMove(c, d, f, !m);
747
- if ($(n, a.transform, h.moveX, h.moveY, s, e.reportMoves), $e(l, e.tick), !(!p.hasBounciness && !t)) {
748
- p.forEachOverlapping(c, (r) => {
749
- p.claimContact(n, r.entityId) && Xe(e, c, r, o, s, t);
750
- }, h.moveX, h.moveY);
751
- for (let r of h.blocking) p.claimContact(n, r.entityId) && Xe(e, c, r, o, s, t);
754
+ let _ = s.bounciness !== void 0, v = g.resolveMove(d, m, h, !_);
755
+ if ($(r, s.transform, v.moveX, v.moveY, l, e.reportMoves), ot(f, e.tick), !(!g.hasBounciness && !t)) {
756
+ g.forEachOverlapping(d, (n) => {
757
+ g.claimContact(r, n.entityId) && rt(e, d, n, c, l, t);
758
+ }, v.moveX, v.moveY);
759
+ for (let n of v.blocking) g.claimContact(r, n.entityId) && rt(e, d, n, c, l, t);
752
760
  }
753
761
  }, { physics: {
754
762
  collision: !0,
755
- optional: n
763
+ optional: r,
764
+ group: i
756
765
  } });
757
- return a.preRun = (e, t, n) => {
758
- r = new Fe(n.collidable ?? [], e.elapsedTime / 1e3);
759
- }, a;
766
+ return s.preRun = (e, t, n) => {
767
+ let r = e.elapsedTime / 1e3, s = n.collidable ?? [];
768
+ if (!i) {
769
+ a = new Ve(s, r);
770
+ return;
771
+ }
772
+ let c = /* @__PURE__ */ new Map();
773
+ for (let t of s) {
774
+ let n = nt(t.components, i);
775
+ if (e.skipGroup === n) continue;
776
+ let r = c.get(n);
777
+ r || (r = [], c.set(n, r)), r.push(t);
778
+ }
779
+ o = /* @__PURE__ */ new Map();
780
+ for (let [e, t] of c) o.set(e, new Ve(t, r));
781
+ }, s;
782
+ }
783
+ function nt(e, t) {
784
+ let n = e[t.component];
785
+ return n ? n[t.index] : 0;
760
786
  }
761
- function Xe(e, t, n, r, i, a) {
762
- Ve(t, n), a && a(e, t, n, r, i);
787
+ function rt(e, t, n, r, i, a) {
788
+ qe(t, n), a && a(e, t, n, r, i);
763
789
  }
764
- function Ze(e, t, n, r, i) {
790
+ function it(e, t, n, r, i) {
765
791
  let a = e.elapsedTime / 1e3, o = n.interpolation;
766
- Qe(o, n.transform, e.elapsedTime), $(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), $e(o, e.tick);
792
+ at(o, n.transform, e.elapsedTime), $(t, n.transform, n.velocity[0] * a, n.velocity[1] * a, i, e.reportMoves), ot(o, e.tick);
767
793
  }
768
- function Qe(e, t, n) {
794
+ function at(e, t, n) {
769
795
  e && (e[2] = t[0], e[3] = t[1], e[6] = n);
770
796
  }
771
- function $e(e, n) {
772
- e && t(e, 7, n);
797
+ function ot(e, t) {
798
+ e && i(e, 7, t);
773
799
  }
774
- function $(e, t, n, r, i, o) {
775
- n === 0 && r === 0 || (n !== 0 && a(t, 0, n, Infinity), r !== 0 && a(t, 1, r, Infinity), o !== !1 && i.emitSystemEvent(Je, e));
800
+ function $(e, t, n, r, i, a) {
801
+ n === 0 && r === 0 || (n !== 0 && o(t, 0, n, Infinity), r !== 0 && o(t, 1, r, Infinity), a !== !1 && i.emitSystemEvent(et, e));
776
802
  }
777
803
  //#endregion
778
804
  //#region src/systems/physics-system.ts
779
- var et = 50, tt = class extends r {
805
+ var st = 50, ct = class extends t {
780
806
  tick = 0;
781
807
  reportMoves;
808
+ skipGroup;
782
809
  constructor(e, t = {}) {
783
- let n = t.updateFunction ?? Ze, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = [];
784
- i && !r.includes("body") && a.push("body"), i && !r.includes("bounciness") && a.push("bounciness"), r.includes("interpolation") || a.push("interpolation"), i && a.push("entity");
785
- let o = a.length ? [...a, ...r] : r, s = r.includes("bounciness") ? r : ["bounciness", ...r], c = i ? { [Me]: {
810
+ let n = t.updateFunction ?? it, r = t.optional ?? n.physics?.optional ?? [], i = t.collision ?? n.physics?.collision ?? !1, a = n.physics?.group, o = [];
811
+ i && !r.includes("body") && o.push("body"), i && !r.includes("bounciness") && o.push("bounciness"), r.includes("interpolation") || o.push("interpolation"), i && o.push("entity"), a && !r.includes(a.component) && o.push(a.component);
812
+ let s = o.length ? [...o, ...r] : r, c = r.includes("bounciness") ? [...r] : ["bounciness", ...r];
813
+ a && !c.includes(a.component) && c.push(a.component);
814
+ let l = i ? { [Re]: {
786
815
  required: ["transform", "body"],
787
816
  optional: [
788
817
  "velocity",
789
818
  "entity",
790
- ...s
819
+ ...c
791
820
  ],
792
821
  filter: t.scope
793
- } } : void 0, l = c || t.queries ? {
794
- ...c,
822
+ } } : void 0, u = l || t.queries ? {
823
+ ...l,
795
824
  ...t.queries
796
- } : void 0, u = nt(t.scope, t.filter);
825
+ } : void 0, d = lt(t.scope, t.filter);
797
826
  super(e, {
798
827
  name: t.name ?? "PhysicsSystem",
799
828
  deltaBetweenRuns: t.deltaBetweenRuns ?? 50,
800
829
  firstRun: t.firstRun,
801
830
  required: ["transform", "velocity"],
802
- optional: o,
803
- filter: u,
831
+ optional: s,
832
+ filter: d,
804
833
  updateFunction: n,
805
- queries: l,
834
+ queries: u,
806
835
  forceMainThread: t.forceMainThread ?? !t.getWorker,
807
836
  getWorker: t.getWorker ?? (() => {
808
837
  throw Error("PhysicsSystem cannot start a worker: no getWorker was supplied");
809
838
  })
810
- }), this.reportMoves = t.reportMoves;
839
+ }), this.reportMoves = t.reportMoves, this.skipGroup = t.skipGroup;
811
840
  }
812
841
  startInterpolation(e) {
813
842
  let t = this.deltaBetweenRuns;
814
- t <= 0 || ve(e, {
843
+ t <= 0 || we(e, {
815
844
  stepMs: t,
816
845
  stepFraction: this.currentDelta / t,
817
846
  tick: this.tick
818
847
  });
819
848
  }
820
849
  addDataToWorld(e) {
821
- e.tick = ++this.tick, e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0;
850
+ e.tick = ++this.tick, e.reportMoves = this.reportMoves ?? this.listenerCount("position-updated") > 0, e.skipGroup = this.skipGroup;
822
851
  }
823
852
  };
824
- function nt(e, t) {
853
+ function lt(e, t) {
825
854
  return e ? t ? (n) => e(n) && t(n) : e : t;
826
855
  }
827
856
  //#endregion
828
857
  //#region src/systems/interpolation-update.ts
829
- var rt = (t, n, r) => {
830
- let i = r.interpolation, a = r.transform, o = e(i, 7), s = i[2], c = i[3], l = i[6], u = a[0], d = a[1], f = e(i, 7);
858
+ var ut = (e, t, n) => {
859
+ let i = n.interpolation, a = n.transform, o = r(i, 7), s = i[2], c = i[3], l = i[6], u = a[0], d = a[1], f = r(i, 7);
831
860
  if (o !== f) return;
832
861
  if (l <= 0) {
833
862
  i[4] = 1, i[5] = f, i[0] = u, i[1] = d;
834
863
  return;
835
864
  }
836
865
  let p = i[4];
837
- f !== i[5] && (p = 0, i[5] = f), p += t.elapsedTime / l, p > 1 && (p = 1), i[4] = p, i[0] = s + (u - s) * p, i[1] = c + (d - c) * p;
838
- }, it = class extends r {
866
+ 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;
867
+ }, dt = class extends t {
839
868
  constructor(e, t = {}) {
840
869
  super(e, {
841
870
  name: t.name ?? "InterpolationSystem",
842
871
  deltaBetweenRuns: 0,
843
872
  firstRun: t.firstRun,
844
873
  required: ["transform", "interpolation"],
845
- updateFunction: rt,
874
+ updateFunction: ut,
846
875
  forceMainThread: t.forceMainThread ?? !t.getWorker,
847
876
  getWorker: t.getWorker ?? (() => {
848
877
  throw Error("InterpolationSystem cannot start a worker: no getWorker was supplied");
@@ -851,6 +880,6 @@ var rt = (t, n, r) => {
851
880
  }
852
881
  };
853
882
  //#endregion
854
- export { T as BODY_CATEGORY_INDEX, A as BODY_CCD_FLAG, w as BODY_FLAGS_INDEX, E as BODY_MASK_INDEX, k as BODY_SENSOR_FLAG, O as BODY_SHAPE_MASK, D as BODY_SIZE, ie as BOUNCINESS_INDEX, ae as BOUNCINESS_SIZE, Me as COLLIDABLE_QUERY, Fe as CollisionBroadphase, x as DEFAULT_COLLIDE_CATEGORY, S as DEFAULT_COLLIDE_MASK, et as DEFAULT_PHYSICS_STEP_MS, pe as INTERPOLATION_DURATION_INDEX, le as INTERPOLATION_PREV_X_INDEX, ue as INTERPOLATION_PREV_Y_INDEX, de as INTERPOLATION_PROGRESS_INDEX, he as INTERPOLATION_SIZE, fe as INTERPOLATION_SYNCED_TICK_INDEX, me as INTERPOLATION_TICK_INDEX, se as INTERPOLATION_X_INDEX, ce as INTERPOLATION_Y_INDEX, it as InterpolationSystem, Je as POSITION_UPDATED_EVENT, tt as PhysicsSystem, y as SHAPE_CAPSULE, v as SHAPE_CIRCLE, _ as SHAPE_RECTANGLE, Be as SpatialIndex, u as TRANSFORM_ANGLE_INDEX, l as TRANSFORM_HEIGHT_INDEX, d as TRANSFORM_SIZE, c as TRANSFORM_WIDTH_INDEX, o as TRANSFORM_X_INDEX, s as TRANSFORM_Y_INDEX, h as VELOCITY_SIZE, p as VELOCITY_X_INDEX, m as VELOCITY_Y_INDEX, te as bodyDefinition, j as bodyShape, oe as bouncinessDefinition, De as boundsHalfHeight, Ee as boundsHalfWidth, C as canCollide, F as capsuleHalfLength, be as contactNormal, Ye as createPhysicsUpdate, ge as interpolationDefinition, rt as interpolationUpdate, ee as isContinuous, M as isSensor, Oe as orientedBoxesOverlap, ye as physicsRegistry, Ze as physicsUpdate, K as pointSegmentDistanceSquared, ke as segmentBoxDistanceSquared, W as segmentSegmentDistanceSquared, z as shapeHalfHeight, R as shapeHalfWidth, L as shapeIsEmpty, I as shapeRadius, B as shapesOverlap, _e as snapEntity, ve as startSpawnInterpolation, f as transformDefinition, g as velocityDefinition };
883
+ export { O as BODY_CATEGORY_INDEX, ne as BODY_CCD_FLAG, D as BODY_FLAGS_INDEX, k as BODY_MASK_INDEX, te as BODY_SENSOR_FLAG, ee as BODY_SHAPE_MASK, A as BODY_SIZE, ce as BOUNCINESS_INDEX, le as BOUNCINESS_SIZE, Re as COLLIDABLE_QUERY, Ve as CollisionBroadphase, w as DEFAULT_COLLIDE_CATEGORY, T as DEFAULT_COLLIDE_MASK, st as DEFAULT_PHYSICS_STEP_MS, ve as INTERPOLATION_DURATION_INDEX, me as INTERPOLATION_PREV_X_INDEX, he as INTERPOLATION_PREV_Y_INDEX, ge as INTERPOLATION_PROGRESS_INDEX, be as INTERPOLATION_SIZE, _e as INTERPOLATION_SYNCED_TICK_INDEX, ye as INTERPOLATION_TICK_INDEX, fe as INTERPOLATION_X_INDEX, pe as INTERPOLATION_Y_INDEX, dt as InterpolationSystem, et as POSITION_UPDATED_EVENT, ct as PhysicsSystem, S as SHAPE_CAPSULE, x as SHAPE_CIRCLE, b as SHAPE_RECTANGLE, Ke as SpatialIndex, d as TRANSFORM_ANGLE_INDEX, u as TRANSFORM_HEIGHT_INDEX, f as TRANSFORM_SIZE, l as TRANSFORM_WIDTH_INDEX, s as TRANSFORM_X_INDEX, c as TRANSFORM_Y_INDEX, _ as VELOCITY_SIZE, h as VELOCITY_X_INDEX, g as VELOCITY_Y_INDEX, ae as bodyDefinition, j as bodyShape, de as bouncinessDefinition, Ne as boundsHalfHeight, Me as boundsHalfWidth, E as canCollide, F as capsuleHalfLength, Ee as contactNormal, tt as createPhysicsUpdate, Se as interpolationDefinition, ut as interpolationUpdate, re as isContinuous, M as isSensor, Pe as orientedBoxesOverlap, Te as physicsRegistry, it as physicsUpdate, K as pointSegmentDistanceSquared, Fe as segmentBoxDistanceSquared, W as segmentSegmentDistanceSquared, z as shapeHalfHeight, R as shapeHalfWidth, L as shapeIsEmpty, I as shapeRadius, B as shapesOverlap, Ce as snapEntity, we as startSpawnInterpolation, m as transformDefinition, y as velocityDefinition };
855
884
 
856
885
  //# sourceMappingURL=index.js.map