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