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