@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/README.md +73 -8
- package/dist/components/body-component.d.ts +3 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +564 -393
- package/dist/index.js.map +1 -1
- package/dist/systems/collision.d.ts +18 -0
- package/dist/systems/physics-system.d.ts +5 -1
- package/dist/systems/physics-update.d.ts +20 -1
- package/dist/systems/spatial-bounds.d.ts +13 -0
- package/dist/world.d.ts +30 -0
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -1,9 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
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
|
|
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
|
-
|
|
15
|
-
let
|
|
16
|
-
if (
|
|
17
|
-
if (
|
|
18
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
]
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
},
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
},
|
|
99
|
+
}, S = 1, C = 2, w = 3, T = [
|
|
97
100
|
1,
|
|
98
101
|
2,
|
|
99
102
|
3
|
|
100
|
-
],
|
|
101
|
-
function
|
|
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
|
|
105
|
-
function
|
|
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
|
|
111
|
+
function A(e) {
|
|
109
112
|
return (e[0] & 4) != 0;
|
|
110
113
|
}
|
|
111
|
-
function
|
|
114
|
+
function ce(e) {
|
|
112
115
|
return (e[0] & 8) != 0;
|
|
113
116
|
}
|
|
114
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
]
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
|
169
|
-
let t =
|
|
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
|
|
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 (!
|
|
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
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
-
|
|
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
|
-
|
|
201
|
-
let
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
-
]
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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
|
|
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
|
|
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
|
|
277
|
-
transform:
|
|
278
|
-
velocity:
|
|
279
|
-
body:
|
|
280
|
-
bounciness:
|
|
281
|
-
interpolation:
|
|
282
|
-
},
|
|
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
|
-
},
|
|
298
|
+
}, N = {
|
|
286
299
|
x: 0,
|
|
287
300
|
y: 0
|
|
288
301
|
};
|
|
289
|
-
function
|
|
302
|
+
function P(e, t) {
|
|
290
303
|
return Math.max(0, (e - t) / 2);
|
|
291
304
|
}
|
|
292
|
-
function
|
|
305
|
+
function F(e, t, n) {
|
|
293
306
|
return e === 2 ? t / 2 : e === 3 ? n / 2 : 0;
|
|
294
307
|
}
|
|
295
|
-
function
|
|
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
|
|
299
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.cos(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
|
|
302
|
-
return e === 2 ? t / 2 : e === 3 ? Math.abs(Math.sin(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
|
|
305
|
-
if (
|
|
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
|
|
308
|
-
if (f && !p) return
|
|
309
|
-
let m =
|
|
310
|
-
if (!f) return
|
|
311
|
-
let v =
|
|
312
|
-
return
|
|
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
|
|
315
|
-
return e === 3 ?
|
|
327
|
+
function B(e, t, n) {
|
|
328
|
+
return e === 3 ? P(t, n) : 0;
|
|
316
329
|
}
|
|
317
|
-
function
|
|
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 ?
|
|
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
|
|
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 =
|
|
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 =
|
|
325
|
-
return S < x && (x = S, u.x = -f, u.y = d), S =
|
|
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
|
|
328
|
-
let p =
|
|
329
|
-
return y > 0 ? (f.x =
|
|
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
|
|
332
|
-
let f =
|
|
333
|
-
if (h > 0) return d.x =
|
|
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 =
|
|
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 =
|
|
337
|
-
O < D && (D = O, d.x = 0, d.y = 1),
|
|
338
|
-
let
|
|
339
|
-
return d.x =
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
381
|
+
if (h <= 0) y = G(_ / g);
|
|
369
382
|
else {
|
|
370
383
|
let e = l * p + u * m;
|
|
371
|
-
if (g <= 0) v =
|
|
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 =
|
|
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
|
|
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 (!
|
|
383
|
-
if (!l) return Math.min(
|
|
384
|
-
let S =
|
|
385
|
-
S =
|
|
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
|
|
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
|
|
393
|
-
let s = i - n, c = a - r, l = s * s + c * c, u = l > 0 ?
|
|
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
|
|
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
|
|
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
|
|
418
|
+
function G(e) {
|
|
406
419
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
407
420
|
}
|
|
408
421
|
//#endregion
|
|
409
|
-
//#region src/systems/
|
|
410
|
-
|
|
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:
|
|
413
|
-
},
|
|
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
|
|
419
|
-
for (let
|
|
420
|
-
let e =
|
|
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 =
|
|
425
|
-
if (
|
|
426
|
-
let u = i[4], d =
|
|
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 =
|
|
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
|
-
},
|
|
433
|
-
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:
|
|
438
|
-
let
|
|
439
|
-
for (let e = 0; e < t.length; e++)
|
|
440
|
-
|
|
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:
|
|
539
|
+
index: n
|
|
444
540
|
});
|
|
445
541
|
}
|
|
446
542
|
}
|
|
447
543
|
claimContact(e, t) {
|
|
448
|
-
let n = e < t ? 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 =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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:
|
|
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:
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
614
|
+
blocking: J
|
|
506
615
|
} : {
|
|
507
616
|
moveX: 0,
|
|
508
617
|
moveY: n,
|
|
509
|
-
blocking:
|
|
618
|
+
blocking: J
|
|
510
619
|
};
|
|
511
|
-
let i = e.length === 0 ?
|
|
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:
|
|
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
|
-
|
|
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 =
|
|
546
|
-
for (let i = 0; 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)
|
|
660
|
+
for (let n of t) X(e, d, f, n) && u.push(n);
|
|
552
661
|
return {
|
|
553
|
-
fraction: s * i >
|
|
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
|
-
|
|
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:
|
|
677
|
+
blocking: J
|
|
569
678
|
};
|
|
570
|
-
let a = 1, o = [], s =
|
|
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 >
|
|
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 =
|
|
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 =
|
|
589
|
-
for (let i = 0; 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
|
|
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 (
|
|
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,
|
|
604
|
-
for (let s of this.buckets) if ((e.mask & s.category) !== 0) for (let c of s.index.search(t, n,
|
|
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?.[
|
|
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
|
|
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
|
|
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 =
|
|
623
|
-
if (
|
|
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:
|
|
634
|
-
halfHeight:
|
|
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:
|
|
638
|
-
ccd:
|
|
746
|
+
sensor: A(t),
|
|
747
|
+
ccd: ce(t)
|
|
639
748
|
};
|
|
640
749
|
}
|
|
641
|
-
function
|
|
642
|
-
let o = t + r, s = n + i, c = a.components.transform, l =
|
|
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
|
|
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 =
|
|
648
|
-
return
|
|
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
|
|
759
|
+
function rt(e) {
|
|
651
760
|
return e < 0 ? 0 : e > 1 ? 1 : e;
|
|
652
761
|
}
|
|
653
|
-
function
|
|
762
|
+
function X(e, t, n, r) {
|
|
654
763
|
let i = r.components.transform;
|
|
655
|
-
return
|
|
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
|
|
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 ?
|
|
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
|
|
675
|
-
for (let e = 0; e < this.entries.length; e++)
|
|
676
|
-
|
|
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
|
-
},
|
|
808
|
+
}, Z = {
|
|
700
809
|
x: 0,
|
|
701
810
|
y: 0
|
|
702
811
|
};
|
|
703
|
-
function
|
|
704
|
-
!
|
|
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
|
|
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
|
|
823
|
+
function st(e) {
|
|
715
824
|
return e.components.bounciness !== void 0 && e.components.velocity !== void 0;
|
|
716
825
|
}
|
|
717
|
-
function
|
|
718
|
-
return !
|
|
826
|
+
function ct(e, t) {
|
|
827
|
+
return !dt(e.components.body) && !dt(t.components.body);
|
|
719
828
|
}
|
|
720
|
-
function
|
|
829
|
+
function lt(e, t, n) {
|
|
721
830
|
let r = e.components.transform, i = t.components.transform;
|
|
722
|
-
return
|
|
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
|
|
725
|
-
return e ?
|
|
833
|
+
function ut(e) {
|
|
834
|
+
return e ? k(e) : 1;
|
|
726
835
|
}
|
|
727
|
-
function
|
|
728
|
-
return e !== void 0 &&
|
|
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
|
-
|
|
733
|
-
|
|
734
|
-
let
|
|
735
|
-
|
|
736
|
-
|
|
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:
|
|
739
|
-
},
|
|
740
|
-
|
|
741
|
-
let
|
|
742
|
-
if (!
|
|
743
|
-
|
|
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
|
|
747
|
-
if (
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
},
|
|
751
|
-
for (let r of
|
|
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
|
|
758
|
-
|
|
759
|
-
|
|
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
|
|
762
|
-
|
|
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
|
|
931
|
+
function _t(e, t, n, r, i) {
|
|
765
932
|
let a = e.elapsedTime / 1e3, o = n.interpolation;
|
|
766
|
-
|
|
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
|
|
935
|
+
function vt(e, t, n) {
|
|
769
936
|
e && (e[2] = t[0], e[3] = t[1], e[6] = n);
|
|
770
937
|
}
|
|
771
|
-
function
|
|
772
|
-
e &&
|
|
938
|
+
function yt(e, t) {
|
|
939
|
+
e && a(e, 7, t);
|
|
773
940
|
}
|
|
774
|
-
function
|
|
775
|
-
n === 0 && r === 0 || (n !== 0 &&
|
|
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
|
|
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 ??
|
|
784
|
-
i && !r.includes("body") &&
|
|
785
|
-
let
|
|
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
|
-
...
|
|
961
|
+
...c
|
|
791
962
|
],
|
|
792
963
|
filter: t.scope
|
|
793
|
-
} } : void 0,
|
|
794
|
-
...
|
|
964
|
+
} } : void 0, u = l || t.queries ? {
|
|
965
|
+
...l,
|
|
795
966
|
...t.queries
|
|
796
|
-
} : void 0,
|
|
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:
|
|
803
|
-
filter:
|
|
973
|
+
optional: s,
|
|
974
|
+
filter: d,
|
|
804
975
|
updateFunction: n,
|
|
805
|
-
queries:
|
|
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 ||
|
|
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
|
|
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
|
|
830
|
-
let
|
|
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
|
-
|
|
1004
|
+
r[4] = 1, r[5] = f, r[0] = u, r[1] = d;
|
|
834
1005
|
return;
|
|
835
1006
|
}
|
|
836
|
-
let p =
|
|
837
|
-
f !==
|
|
838
|
-
},
|
|
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:
|
|
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 {
|
|
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
|