@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.
@@ -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,CAIT;AAGD,wBAAgB,6BAA6B,CAC3C,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAIT;AAGD,wBAAgB,iCAAiC,CAC/C,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAIT;AAGD,wBAAgB,gCAAgC,CAC9C,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC1B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAMT;AAGD,wBAAgB,kCAAkC,CAChD,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAMT;AAGD,wBAAgB,+BAA+B,CAC7C,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAMT;AAGD,wBAAgB,mCAAmC,CACjD,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC5B,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAMT;AAGD,wBAAgB,4BAA4B,CAC1C,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAIT;AAGD,wBAAgB,gCAAgC,CAC9C,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,EACzB,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAIT;AAGD,wBAAgB,oCAAoC,CAClD,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAC7B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAIT"}
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"}
@@ -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
- writeAabbVertices(a, contactScratchA);
24
- writeAabbVertices(b, contactScratchB);
25
- return convexContact(contactScratchA, 4, contactScratchB, 4, out);
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
- writeAabbVertices(a, contactScratchA);
30
- writeObbVertices(b, contactScratchB);
31
- return convexContact(contactScratchA, 4, contactScratchB, 4, out);
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
- return convexContact(contactScratchA, 4, bPoints, bPoints.length >> 1, out);
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
- if (!testCircleAabbCollision(a, b, leanScratch)) {
42
- clearCollisionContactManifold(out);
43
- return false;
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
- if (!testCircleCircleCollision(a, b, leanScratch)) {
50
- clearCollisionContactManifold(out);
51
- return false;
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
- if (!testCircleObbCollision(a, b, leanScratch)) {
58
- clearCollisionContactManifold(out);
59
- return false;
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
- if (!testCirclePolygonCollision(a, b, leanScratch)) {
66
- clearCollisionContactManifold(out);
67
- return false;
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
- writeObbVertices(a, contactScratchA);
74
- writeObbVertices(b, contactScratchB);
75
- return convexContact(contactScratchA, 4, contactScratchB, 4, out);
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
- return convexContact(contactScratchA, 4, bPoints, bPoints.length >> 1, out);
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
- return convexContact(aPoints, aPoints.length >> 1, bPoints, bPoints.length >> 1, out);
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 module scratch. A positive result means a separating axis
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 `leanScratch` by a circle test into a single-point contact.
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 = leanScratch.normalX;
305
- const normalY = leanScratch.normalY;
306
- const depth = leanScratch.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
- // Feature ids pack (reference shape, reference edge, incident edge, clip slot) into one integer.
324
- // Ten bits per edge index covers any polygon the SAT core can handle in useful time.
325
- const contactScratchA = new Float64Array(8);
326
- const contactScratchB = new Float64Array(8);
327
- const leanScratch = createCollisionManifold();
328
- let separationEdge = -1;
329
- let separationNormalX = 0;
330
- let separationNormalY = 0;
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
@@ -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,CAqET"}
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
- if (collideContactManifold(shapeA, shapeB, manifoldScratch)) {
25
- out.normalX = canonicalZero(manifoldScratch.normalX);
26
- out.normalY = canonicalZero(manifoldScratch.normalY);
27
- writeShapeASupport(shapeA, 0, 0, out);
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, verticesBScratch);
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, verticesAScratch);
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, verticesAScratch);
56
- const verticesB = writeShapeVertices(shapeB, verticesBScratch);
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
- sweepEntry = Number.NEGATIVE_INFINITY;
148
- sweepExit = maxFraction;
149
- sweepNormalX = 0;
150
- sweepNormalY = 0;
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 (sweepEntry < 0 || sweepEntry > sweepExit || sweepEntry > maxFraction)
164
+ if (scratch.entry < 0 || scratch.entry > scratch.exit || scratch.entry > maxFraction)
156
165
  return false;
157
- out.fraction = sweepEntry;
158
- out.normalX = sweepNormalX;
159
- out.normalY = sweepNormalY;
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 > sweepEntry) {
197
- sweepEntry = entry;
198
- sweepNormalX = normalX;
199
- sweepNormalY = normalY;
205
+ if (entry > scratch.entry) {
206
+ scratch.entry = entry;
207
+ scratch.normalX = normalX;
208
+ scratch.normalY = normalY;
200
209
  }
201
- if (exit < sweepExit)
202
- sweepExit = exit;
203
- if (sweepEntry > sweepExit)
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, verticesAScratch);
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
- const manifoldScratch = createCollisionContactManifold();
301
- const verticesAScratch = new Float64Array(8);
302
- const verticesBScratch = new Float64Array(8);
303
- let projectionMin = 0;
304
- let projectionMax = 0;
305
- let sweepEntry = 0;
306
- let sweepExit = 0;
307
- let sweepNormalX = 0;
308
- let sweepNormalY = 0;
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