@flighthq/collision 0.3.0 → 0.3.1-next.1041.35b950c
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/raycastCollisionShape.d.ts.map +1 -1
- package/dist/raycastCollisionShape.js +51 -35
- package/dist/raycastCollisionShape.js.map +1 -1
- package/dist/shapeCollision.d.ts.map +1 -1
- package/dist/shapeCollision.js +102 -55
- package/dist/shapeCollision.js.map +1 -1
- package/dist/shapeContact.d.ts.map +1 -1
- package/dist/shapeContact.js +128 -59
- package/dist/shapeContact.js.map +1 -1
- package/dist/sweepCollisionShape.d.ts.map +1 -1
- package/dist/sweepCollisionShape.js +73 -53
- package/dist/sweepCollisionShape.js.map +1 -1
- package/package.json +4 -4
- package/src/raycastCollisionShape.test.ts +31 -0
- package/src/shapeCollision.test.ts +55 -0
- package/src/shapeContact.test.ts +28 -0
- package/src/sweepCollisionShape.test.ts +43 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapeContact.d.ts","sourceRoot":"","sources":["../src/shapeContact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,wBAAwB,EAExB,YAAY,EACZ,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AA8BlC,wBAAgB,8BAA8B,CAC5C,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"shapeContact.d.ts","sourceRoot":"","sources":["../src/shapeContact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,wBAAwB,EAExB,YAAY,EACZ,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AA8BlC,wBAAgB,8BAA8B,CAC5C,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAST;AAGD,wBAAgB,6BAA6B,CAC3C,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAST;AAGD,wBAAgB,iCAAiC,CAC/C,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAST;AAGD,wBAAgB,gCAAgC,CAC9C,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAWT;AAGD,wBAAgB,kCAAkC,CAChD,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAWT;AAGD,wBAAgB,+BAA+B,CAC7C,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAWT;AAGD,wBAAgB,mCAAmC,CACjD,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAWT;AAGD,wBAAgB,4BAA4B,CAC1C,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAST;AAGD,wBAAgB,gCAAgC,CAC9C,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAST;AAGD,wBAAgB,oCAAoC,CAClD,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAST"}
|
package/dist/shapeContact.js
CHANGED
|
@@ -20,71 +20,131 @@ import { testCircleAabbCollision, testCircleCircleCollision, testCircleObbCollis
|
|
|
20
20
|
// one surface point.
|
|
21
21
|
// Axis-aligned box vs axis-aligned box.
|
|
22
22
|
export function collideAabbAabbContactManifold(a, b, out) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
const scratch = acquireShapeContactScratch();
|
|
24
|
+
try {
|
|
25
|
+
writeAabbVertices(a, scratch.verticesA);
|
|
26
|
+
writeAabbVertices(b, scratch.verticesB);
|
|
27
|
+
return convexContact(scratch.verticesA, 4, scratch.verticesB, 4, out, scratch);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
releaseShapeContactScratch(scratch);
|
|
31
|
+
}
|
|
26
32
|
}
|
|
27
33
|
// Axis-aligned box vs oriented box.
|
|
28
34
|
export function collideAabbObbContactManifold(a, b, out) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
35
|
+
const scratch = acquireShapeContactScratch();
|
|
36
|
+
try {
|
|
37
|
+
writeAabbVertices(a, scratch.verticesA);
|
|
38
|
+
writeObbVertices(b, scratch.verticesB);
|
|
39
|
+
return convexContact(scratch.verticesA, 4, scratch.verticesB, 4, out, scratch);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
releaseShapeContactScratch(scratch);
|
|
43
|
+
}
|
|
32
44
|
}
|
|
33
45
|
// Axis-aligned box vs convex polygon.
|
|
34
46
|
export function collideAabbPolygonContactManifold(a, b, out) {
|
|
35
|
-
writeAabbVertices(a, contactScratchA);
|
|
36
47
|
const bPoints = b.points;
|
|
37
|
-
|
|
48
|
+
const scratch = acquireShapeContactScratch();
|
|
49
|
+
try {
|
|
50
|
+
writeAabbVertices(a, scratch.verticesA);
|
|
51
|
+
return convexContact(scratch.verticesA, 4, bPoints, bPoints.length >> 1, out, scratch);
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
releaseShapeContactScratch(scratch);
|
|
55
|
+
}
|
|
38
56
|
}
|
|
39
57
|
// Circle vs axis-aligned box. One contact point, on the circle's surface.
|
|
40
58
|
export function collideCircleAabbContactManifold(a, b, out) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
59
|
+
const scratch = acquireShapeContactScratch();
|
|
60
|
+
try {
|
|
61
|
+
if (!testCircleAabbCollision(a, b, scratch.leanManifold)) {
|
|
62
|
+
clearCollisionContactManifold(out);
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
return writeCircleContact(a.x, a.y, a.radius, out, scratch);
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
releaseShapeContactScratch(scratch);
|
|
44
69
|
}
|
|
45
|
-
return writeCircleContact(a.x, a.y, a.radius, out);
|
|
46
70
|
}
|
|
47
71
|
// Circle vs circle. One contact point, on A's surface.
|
|
48
72
|
export function collideCircleCircleContactManifold(a, b, out) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
73
|
+
const scratch = acquireShapeContactScratch();
|
|
74
|
+
try {
|
|
75
|
+
if (!testCircleCircleCollision(a, b, scratch.leanManifold)) {
|
|
76
|
+
clearCollisionContactManifold(out);
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return writeCircleContact(a.x, a.y, a.radius, out, scratch);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
releaseShapeContactScratch(scratch);
|
|
52
83
|
}
|
|
53
|
-
return writeCircleContact(a.x, a.y, a.radius, out);
|
|
54
84
|
}
|
|
55
85
|
// Circle vs oriented box. One contact point, on the circle's surface.
|
|
56
86
|
export function collideCircleObbContactManifold(a, b, out) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
87
|
+
const scratch = acquireShapeContactScratch();
|
|
88
|
+
try {
|
|
89
|
+
if (!testCircleObbCollision(a, b, scratch.leanManifold)) {
|
|
90
|
+
clearCollisionContactManifold(out);
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
return writeCircleContact(a.x, a.y, a.radius, out, scratch);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
releaseShapeContactScratch(scratch);
|
|
60
97
|
}
|
|
61
|
-
return writeCircleContact(a.x, a.y, a.radius, out);
|
|
62
98
|
}
|
|
63
99
|
// Circle vs convex polygon. One contact point, on the circle's surface.
|
|
64
100
|
export function collideCirclePolygonContactManifold(a, b, out) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
101
|
+
const scratch = acquireShapeContactScratch();
|
|
102
|
+
try {
|
|
103
|
+
if (!testCirclePolygonCollision(a, b, scratch.leanManifold)) {
|
|
104
|
+
clearCollisionContactManifold(out);
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return writeCircleContact(a.x, a.y, a.radius, out, scratch);
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
releaseShapeContactScratch(scratch);
|
|
68
111
|
}
|
|
69
|
-
return writeCircleContact(a.x, a.y, a.radius, out);
|
|
70
112
|
}
|
|
71
113
|
// Oriented box vs oriented box.
|
|
72
114
|
export function collideObbObbContactManifold(a, b, out) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
115
|
+
const scratch = acquireShapeContactScratch();
|
|
116
|
+
try {
|
|
117
|
+
writeObbVertices(a, scratch.verticesA);
|
|
118
|
+
writeObbVertices(b, scratch.verticesB);
|
|
119
|
+
return convexContact(scratch.verticesA, 4, scratch.verticesB, 4, out, scratch);
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
releaseShapeContactScratch(scratch);
|
|
123
|
+
}
|
|
76
124
|
}
|
|
77
125
|
// Oriented box vs convex polygon.
|
|
78
126
|
export function collideObbPolygonContactManifold(a, b, out) {
|
|
79
|
-
writeObbVertices(a, contactScratchA);
|
|
80
127
|
const bPoints = b.points;
|
|
81
|
-
|
|
128
|
+
const scratch = acquireShapeContactScratch();
|
|
129
|
+
try {
|
|
130
|
+
writeObbVertices(a, scratch.verticesA);
|
|
131
|
+
return convexContact(scratch.verticesA, 4, bPoints, bPoints.length >> 1, out, scratch);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
releaseShapeContactScratch(scratch);
|
|
135
|
+
}
|
|
82
136
|
}
|
|
83
137
|
// Convex polygon vs convex polygon — the general convex contact core.
|
|
84
138
|
export function collidePolygonPolygonContactManifold(a, b, out) {
|
|
85
139
|
const aPoints = a.points;
|
|
86
140
|
const bPoints = b.points;
|
|
87
|
-
|
|
141
|
+
const scratch = acquireShapeContactScratch();
|
|
142
|
+
try {
|
|
143
|
+
return convexContact(aPoints, aPoints.length >> 1, bPoints, bPoints.length >> 1, out, scratch);
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
releaseShapeContactScratch(scratch);
|
|
147
|
+
}
|
|
88
148
|
}
|
|
89
149
|
// Convex-vs-convex contact resolution over two flat `[x0,y0,...]` vertex lists, writing the
|
|
90
150
|
// manifold pushing **A out of B**.
|
|
@@ -96,7 +156,7 @@ export function collidePolygonPolygonContactManifold(a, b, out) {
|
|
|
96
156
|
// overlapping span, whose endpoints (those still behind the reference face) are the contact points.
|
|
97
157
|
// This is the standard 2D face-clipping construction; the one-point cases fall out of it naturally
|
|
98
158
|
// when the clip collapses to a corner.
|
|
99
|
-
function convexContact(ax, an, bx, bn, out) {
|
|
159
|
+
function convexContact(ax, an, bx, bn, out, scratch) {
|
|
100
160
|
// Fewer than three vertices has no interior and no face to clip against. Degenerate input would
|
|
101
161
|
// otherwise leave the separation search with no candidate axis and poison the manifold with NaN,
|
|
102
162
|
// which in a physics step is unrecoverable — report a clean miss instead. Past FEATURE_INDEX_LIMIT
|
|
@@ -106,20 +166,20 @@ function convexContact(ax, an, bx, bn, out) {
|
|
|
106
166
|
clearCollisionContactManifold(out);
|
|
107
167
|
return false;
|
|
108
168
|
}
|
|
109
|
-
const separationA = maxFaceSeparation(ax, an, bx, bn);
|
|
110
|
-
if (separationA >= 0 || separationEdge < 0) {
|
|
169
|
+
const separationA = maxFaceSeparation(ax, an, bx, bn, scratch);
|
|
170
|
+
if (separationA >= 0 || scratch.separationEdge < 0) {
|
|
111
171
|
clearCollisionContactManifold(out);
|
|
112
172
|
return false;
|
|
113
173
|
}
|
|
114
|
-
const edgeA = separationEdge;
|
|
115
|
-
const normalAX = separationNormalX;
|
|
116
|
-
const normalAY = separationNormalY;
|
|
117
|
-
const separationB = maxFaceSeparation(bx, bn, ax, an);
|
|
118
|
-
if (separationB >= 0 || separationEdge < 0) {
|
|
174
|
+
const edgeA = scratch.separationEdge;
|
|
175
|
+
const normalAX = scratch.separationNormalX;
|
|
176
|
+
const normalAY = scratch.separationNormalY;
|
|
177
|
+
const separationB = maxFaceSeparation(bx, bn, ax, an, scratch);
|
|
178
|
+
if (separationB >= 0 || scratch.separationEdge < 0) {
|
|
119
179
|
clearCollisionContactManifold(out);
|
|
120
180
|
return false;
|
|
121
181
|
}
|
|
122
|
-
const edgeB = separationEdge;
|
|
182
|
+
const edgeB = scratch.separationEdge;
|
|
123
183
|
// Near-ties get a magnitude-relative nudge toward A so the reference shape does not flip between
|
|
124
184
|
// frames on floating-point noise. A flip renumbers every feature id, which would silently discard
|
|
125
185
|
// the solver's warm-start impulses and make a resting stack jitter.
|
|
@@ -130,8 +190,8 @@ function convexContact(ax, an, bx, bn, out) {
|
|
|
130
190
|
const incidentX = referenceIsA ? bx : ax;
|
|
131
191
|
const incidentCount = referenceIsA ? bn : an;
|
|
132
192
|
const referenceEdge = referenceIsA ? edgeA : edgeB;
|
|
133
|
-
const normalX = referenceIsA ? normalAX : separationNormalX;
|
|
134
|
-
const normalY = referenceIsA ? normalAY : separationNormalY;
|
|
193
|
+
const normalX = referenceIsA ? normalAX : scratch.separationNormalX;
|
|
194
|
+
const normalY = referenceIsA ? normalAY : scratch.separationNormalY;
|
|
135
195
|
const referenceNext = referenceEdge + 1 === referenceCount ? 0 : referenceEdge + 1;
|
|
136
196
|
const v1X = referenceX[referenceEdge << 1];
|
|
137
197
|
const v1Y = referenceX[(referenceEdge << 1) + 1];
|
|
@@ -211,11 +271,11 @@ function appendClippedContact(p0X, p0Y, p1X, p1Y, s, faceX, faceY, normalX, norm
|
|
|
211
271
|
out.pointCount++;
|
|
212
272
|
}
|
|
213
273
|
// Returns the greatest separation of shape O from any face of shape S, writing the winning face's
|
|
214
|
-
// index and unit outward normal into the
|
|
274
|
+
// index and unit outward normal into the call's leased scratch. A positive result means a separating axis
|
|
215
275
|
// exists and the pair is disjoint; the least-negative result is the minimum-translation face.
|
|
216
276
|
// Outward orientation is derived from S's centroid, so winding does not matter — matching the
|
|
217
277
|
// winding-agnostic contract the lean tests already document.
|
|
218
|
-
function maxFaceSeparation(sx, sn, ox, on) {
|
|
278
|
+
function maxFaceSeparation(sx, sn, ox, on, scratch) {
|
|
219
279
|
let centroidX = 0;
|
|
220
280
|
let centroidY = 0;
|
|
221
281
|
for (let i = 0; i < sn; i++) {
|
|
@@ -256,9 +316,9 @@ function maxFaceSeparation(sx, sn, ox, on) {
|
|
|
256
316
|
bestNormalY = normalY;
|
|
257
317
|
}
|
|
258
318
|
}
|
|
259
|
-
separationEdge = bestEdge;
|
|
260
|
-
separationNormalX = bestNormalX;
|
|
261
|
-
separationNormalY = bestNormalY;
|
|
319
|
+
scratch.separationEdge = bestEdge;
|
|
320
|
+
scratch.separationNormalX = bestNormalX;
|
|
321
|
+
scratch.separationNormalY = bestNormalY;
|
|
262
322
|
return best;
|
|
263
323
|
}
|
|
264
324
|
// Returns the index of the shape's face whose outward normal opposes (`normalX`,`normalY`) most
|
|
@@ -297,13 +357,13 @@ function mostAntiParallelEdge(px, pn, normalX, normalY) {
|
|
|
297
357
|
}
|
|
298
358
|
return bestEdge;
|
|
299
359
|
}
|
|
300
|
-
// Promotes the lean manifold left in
|
|
360
|
+
// Promotes the lean manifold left in the call's leased scratch by a circle test into a single-point contact.
|
|
301
361
|
// The circle's deepest point lies one radius along the inward normal from its center; a circle has
|
|
302
362
|
// no face, so there is one feature pair and one constant id.
|
|
303
|
-
function writeCircleContact(cx, cy, radius, out) {
|
|
304
|
-
const normalX =
|
|
305
|
-
const normalY =
|
|
306
|
-
const depth =
|
|
363
|
+
function writeCircleContact(cx, cy, radius, out, scratch) {
|
|
364
|
+
const normalX = scratch.leanManifold.normalX;
|
|
365
|
+
const normalY = scratch.leanManifold.normalY;
|
|
366
|
+
const depth = scratch.leanManifold.depth;
|
|
307
367
|
out.normalX = normalX;
|
|
308
368
|
out.normalY = normalY;
|
|
309
369
|
out.depth = depth;
|
|
@@ -320,12 +380,21 @@ const EPS = 1e-9;
|
|
|
320
380
|
// Fraction of the deeper separation by which the reference face must be beaten before the incident
|
|
321
381
|
// shape takes over as reference. Relative rather than absolute so it holds at any world scale.
|
|
322
382
|
const REFERENCE_BIAS = 1e-6;
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
383
|
+
function acquireShapeContactScratch() {
|
|
384
|
+
return shapeContactScratchPool.pop() ?? createShapeContactScratch();
|
|
385
|
+
}
|
|
386
|
+
function createShapeContactScratch() {
|
|
387
|
+
return {
|
|
388
|
+
verticesA: new Float64Array(8),
|
|
389
|
+
verticesB: new Float64Array(8),
|
|
390
|
+
leanManifold: createCollisionManifold(),
|
|
391
|
+
separationEdge: -1,
|
|
392
|
+
separationNormalX: 0,
|
|
393
|
+
separationNormalY: 0,
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
function releaseShapeContactScratch(scratch) {
|
|
397
|
+
shapeContactScratchPool.push(scratch);
|
|
398
|
+
}
|
|
399
|
+
const shapeContactScratchPool = [createShapeContactScratch()];
|
|
331
400
|
//# sourceMappingURL=shapeContact.js.map
|
package/dist/shapeContact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shapeContact.js","sourceRoot":"","sources":["../src/shapeContact.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shapeContact.js","sourceRoot":"","sources":["../src/shapeContact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sweepCollisionShape.d.ts","sourceRoot":"","sources":["../src/sweepCollisionShape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAOtF,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAMD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,qBAAqB,EAC1B,WAAW,SAAI,GACd,OAAO,
|
|
1
|
+
{"version":3,"file":"sweepCollisionShape.d.ts","sourceRoot":"","sources":["../src/sweepCollisionShape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAOtF,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAMD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,qBAAqB,EAC1B,WAAW,SAAI,GACd,OAAO,CA+BT"}
|
|
@@ -21,10 +21,19 @@ export function sweepCollisionShape(shapeA, translationAX, translationAY, shapeB
|
|
|
21
21
|
getCollisionShapeValidationStatus(shapeB) !== null) {
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
out
|
|
27
|
-
|
|
24
|
+
const scratch = acquireCollisionSweepScratch();
|
|
25
|
+
try {
|
|
26
|
+
return sweepCollisionShapeWithScratch(shapeA, translationAX, translationAY, shapeB, translationBX, translationBY, out, maxFraction, scratch);
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
releaseCollisionSweepScratch(scratch);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function sweepCollisionShapeWithScratch(shapeA, translationAX, translationAY, shapeB, translationBX, translationBY, out, maxFraction, scratch) {
|
|
33
|
+
if (collideContactManifold(shapeA, shapeB, scratch.manifold)) {
|
|
34
|
+
out.normalX = canonicalZero(scratch.manifold.normalX);
|
|
35
|
+
out.normalY = canonicalZero(scratch.manifold.normalY);
|
|
36
|
+
writeShapeASupport(shapeA, 0, 0, out, scratch);
|
|
28
37
|
return true;
|
|
29
38
|
}
|
|
30
39
|
const relativeX = translationAX - translationBX;
|
|
@@ -35,14 +44,14 @@ export function sweepCollisionShape(shapeA, translationAX, translationAY, shapeB
|
|
|
35
44
|
hit = sweepCircleCircle(shapeA.x, shapeA.y, shapeA.radius, shapeB.x, shapeB.y, shapeB.radius, relativeX, relativeY, out);
|
|
36
45
|
}
|
|
37
46
|
else {
|
|
38
|
-
const verticesB = writeShapeVertices(shapeB,
|
|
47
|
+
const verticesB = writeShapeVertices(shapeB, scratch.verticesB);
|
|
39
48
|
if (verticesB !== null) {
|
|
40
49
|
hit = sweepCirclePolygon(shapeA.x, shapeA.y, shapeA.radius, verticesB, relativeX, relativeY, out);
|
|
41
50
|
}
|
|
42
51
|
}
|
|
43
52
|
}
|
|
44
53
|
else if (shapeB.kind === 'circle') {
|
|
45
|
-
const verticesA = writeShapeVertices(shapeA,
|
|
54
|
+
const verticesA = writeShapeVertices(shapeA, scratch.verticesA);
|
|
46
55
|
if (verticesA !== null) {
|
|
47
56
|
hit = sweepCirclePolygon(shapeB.x, shapeB.y, shapeB.radius, verticesA, -relativeX, -relativeY, out);
|
|
48
57
|
if (hit) {
|
|
@@ -52,10 +61,10 @@ export function sweepCollisionShape(shapeA, translationAX, translationAY, shapeB
|
|
|
52
61
|
}
|
|
53
62
|
}
|
|
54
63
|
else {
|
|
55
|
-
const verticesA = writeShapeVertices(shapeA,
|
|
56
|
-
const verticesB = writeShapeVertices(shapeB,
|
|
64
|
+
const verticesA = writeShapeVertices(shapeA, scratch.verticesA);
|
|
65
|
+
const verticesB = writeShapeVertices(shapeB, scratch.verticesB);
|
|
57
66
|
if (verticesA !== null && verticesB !== null) {
|
|
58
|
-
hit = sweepPolygonPolygon(verticesA, verticesB, relativeX, relativeY, maxFraction, out);
|
|
67
|
+
hit = sweepPolygonPolygon(verticesA, verticesB, relativeX, relativeY, maxFraction, out, scratch);
|
|
59
68
|
}
|
|
60
69
|
}
|
|
61
70
|
if (!hit || out.fraction < 0 || out.fraction > maxFraction) {
|
|
@@ -64,7 +73,7 @@ export function sweepCollisionShape(shapeA, translationAX, translationAY, shapeB
|
|
|
64
73
|
}
|
|
65
74
|
out.normalX = canonicalZero(out.normalX);
|
|
66
75
|
out.normalY = canonicalZero(out.normalY);
|
|
67
|
-
writeShapeASupport(shapeA, translationAX * out.fraction, translationAY * out.fraction, out);
|
|
76
|
+
writeShapeASupport(shapeA, translationAX * out.fraction, translationAY * out.fraction, out, scratch);
|
|
68
77
|
return true;
|
|
69
78
|
}
|
|
70
79
|
function sweepCircleCircle(ax, ay, radiusA, bx, by, radiusB, velocityX, velocityY, out) {
|
|
@@ -143,23 +152,23 @@ function sweepCirclePolygon(centerX, centerY, radius, vertices, velocityX, veloc
|
|
|
143
152
|
out.normalY = bestNormalY;
|
|
144
153
|
return true;
|
|
145
154
|
}
|
|
146
|
-
function sweepPolygonPolygon(verticesA, verticesB, velocityX, velocityY, maxFraction, out) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (!sweepPolygonAxes(verticesA, verticesA, verticesB, velocityX, velocityY))
|
|
155
|
+
function sweepPolygonPolygon(verticesA, verticesB, velocityX, velocityY, maxFraction, out, scratch) {
|
|
156
|
+
scratch.entry = Number.NEGATIVE_INFINITY;
|
|
157
|
+
scratch.exit = maxFraction;
|
|
158
|
+
scratch.normalX = 0;
|
|
159
|
+
scratch.normalY = 0;
|
|
160
|
+
if (!sweepPolygonAxes(verticesA, verticesA, verticesB, velocityX, velocityY, scratch))
|
|
152
161
|
return false;
|
|
153
|
-
if (!sweepPolygonAxes(verticesB, verticesA, verticesB, velocityX, velocityY))
|
|
162
|
+
if (!sweepPolygonAxes(verticesB, verticesA, verticesB, velocityX, velocityY, scratch))
|
|
154
163
|
return false;
|
|
155
|
-
if (
|
|
164
|
+
if (scratch.entry < 0 || scratch.entry > scratch.exit || scratch.entry > maxFraction)
|
|
156
165
|
return false;
|
|
157
|
-
out.fraction =
|
|
158
|
-
out.normalX =
|
|
159
|
-
out.normalY =
|
|
166
|
+
out.fraction = scratch.entry;
|
|
167
|
+
out.normalX = scratch.normalX;
|
|
168
|
+
out.normalY = scratch.normalY;
|
|
160
169
|
return true;
|
|
161
170
|
}
|
|
162
|
-
function sweepPolygonAxes(axes, verticesA, verticesB, velocityX, velocityY) {
|
|
171
|
+
function sweepPolygonAxes(axes, verticesA, verticesB, velocityX, velocityY, scratch) {
|
|
163
172
|
const count = axes.length >> 1;
|
|
164
173
|
for (let i = 0; i < count; i++) {
|
|
165
174
|
const next = (i + 1) % count;
|
|
@@ -170,12 +179,12 @@ function sweepPolygonAxes(axes, verticesA, verticesB, velocityX, velocityY) {
|
|
|
170
179
|
continue;
|
|
171
180
|
const axisX = -edgeY / length;
|
|
172
181
|
const axisY = edgeX / length;
|
|
173
|
-
projectVertices(verticesA, axisX, axisY);
|
|
174
|
-
const minA = projectionMin;
|
|
175
|
-
const maxA = projectionMax;
|
|
176
|
-
projectVertices(verticesB, axisX, axisY);
|
|
177
|
-
const minB = projectionMin;
|
|
178
|
-
const maxB = projectionMax;
|
|
182
|
+
projectVertices(verticesA, axisX, axisY, scratch);
|
|
183
|
+
const minA = scratch.projectionMin;
|
|
184
|
+
const maxA = scratch.projectionMax;
|
|
185
|
+
projectVertices(verticesB, axisX, axisY, scratch);
|
|
186
|
+
const minB = scratch.projectionMin;
|
|
187
|
+
const maxB = scratch.projectionMax;
|
|
179
188
|
const speed = velocityX * axisX + velocityY * axisY;
|
|
180
189
|
if (speed === 0) {
|
|
181
190
|
if (maxA < minB || maxB < minA)
|
|
@@ -193,14 +202,14 @@ function sweepPolygonAxes(axes, verticesA, verticesB, velocityX, velocityY) {
|
|
|
193
202
|
normalX = axisX;
|
|
194
203
|
normalY = axisY;
|
|
195
204
|
}
|
|
196
|
-
if (entry >
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
205
|
+
if (entry > scratch.entry) {
|
|
206
|
+
scratch.entry = entry;
|
|
207
|
+
scratch.normalX = normalX;
|
|
208
|
+
scratch.normalY = normalY;
|
|
200
209
|
}
|
|
201
|
-
if (exit <
|
|
202
|
-
|
|
203
|
-
if (
|
|
210
|
+
if (exit < scratch.exit)
|
|
211
|
+
scratch.exit = exit;
|
|
212
|
+
if (scratch.entry > scratch.exit)
|
|
204
213
|
return false;
|
|
205
214
|
}
|
|
206
215
|
return true;
|
|
@@ -232,13 +241,13 @@ function writeShapeVertices(shape, scratch) {
|
|
|
232
241
|
return null;
|
|
233
242
|
}
|
|
234
243
|
}
|
|
235
|
-
function writeShapeASupport(shape, translationX, translationY, out) {
|
|
244
|
+
function writeShapeASupport(shape, translationX, translationY, out, scratch) {
|
|
236
245
|
if (shape.kind === 'circle') {
|
|
237
246
|
out.x = shape.x + translationX - out.normalX * shape.radius;
|
|
238
247
|
out.y = shape.y + translationY - out.normalY * shape.radius;
|
|
239
248
|
return;
|
|
240
249
|
}
|
|
241
|
-
const vertices = writeShapeVertices(shape,
|
|
250
|
+
const vertices = writeShapeVertices(shape, scratch.verticesA);
|
|
242
251
|
if (vertices === null)
|
|
243
252
|
return;
|
|
244
253
|
let best = Number.NEGATIVE_INFINITY;
|
|
@@ -267,15 +276,15 @@ function writeShapeASupport(shape, translationX, translationY, out) {
|
|
|
267
276
|
out.y = y / count + translationY;
|
|
268
277
|
}
|
|
269
278
|
}
|
|
270
|
-
function projectVertices(vertices, axisX, axisY) {
|
|
271
|
-
projectionMin = Number.POSITIVE_INFINITY;
|
|
272
|
-
projectionMax = Number.NEGATIVE_INFINITY;
|
|
279
|
+
function projectVertices(vertices, axisX, axisY, scratch) {
|
|
280
|
+
scratch.projectionMin = Number.POSITIVE_INFINITY;
|
|
281
|
+
scratch.projectionMax = Number.NEGATIVE_INFINITY;
|
|
273
282
|
for (let i = 0; i < vertices.length; i += 2) {
|
|
274
283
|
const projection = vertices[i] * axisX + vertices[i + 1] * axisY;
|
|
275
|
-
if (projection < projectionMin)
|
|
276
|
-
projectionMin = projection;
|
|
277
|
-
if (projection > projectionMax)
|
|
278
|
-
projectionMax = projection;
|
|
284
|
+
if (projection < scratch.projectionMin)
|
|
285
|
+
scratch.projectionMin = projection;
|
|
286
|
+
if (projection > scratch.projectionMax)
|
|
287
|
+
scratch.projectionMax = projection;
|
|
279
288
|
}
|
|
280
289
|
}
|
|
281
290
|
function polygonAreaTwice(vertices) {
|
|
@@ -297,13 +306,24 @@ function clearCollisionTimeOfImpact(out) {
|
|
|
297
306
|
function canonicalZero(value) {
|
|
298
307
|
return value === 0 ? 0 : value;
|
|
299
308
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
+
function acquireCollisionSweepScratch() {
|
|
310
|
+
return collisionSweepScratchPool.pop() ?? createCollisionSweepScratch();
|
|
311
|
+
}
|
|
312
|
+
function createCollisionSweepScratch() {
|
|
313
|
+
return {
|
|
314
|
+
manifold: createCollisionContactManifold(),
|
|
315
|
+
verticesA: new Float64Array(8),
|
|
316
|
+
verticesB: new Float64Array(8),
|
|
317
|
+
projectionMin: 0,
|
|
318
|
+
projectionMax: 0,
|
|
319
|
+
entry: 0,
|
|
320
|
+
exit: 0,
|
|
321
|
+
normalX: 0,
|
|
322
|
+
normalY: 0,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
function releaseCollisionSweepScratch(scratch) {
|
|
326
|
+
collisionSweepScratchPool.push(scratch);
|
|
327
|
+
}
|
|
328
|
+
const collisionSweepScratchPool = [createCollisionSweepScratch()];
|
|
309
329
|
//# sourceMappingURL=sweepCollisionShape.js.map
|