@codexo/exojs-physics 0.13.0 → 0.14.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.
Files changed (48) hide show
  1. package/README.md +17 -10
  2. package/dist/esm/Collider.d.ts +17 -6
  3. package/dist/esm/Collider.js +28 -6
  4. package/dist/esm/Collider.js.map +1 -1
  5. package/dist/esm/ContactGraph.d.ts +49 -3
  6. package/dist/esm/ContactGraph.js +132 -44
  7. package/dist/esm/ContactGraph.js.map +1 -1
  8. package/dist/esm/PhysicsBody.d.ts +113 -15
  9. package/dist/esm/PhysicsBody.js +224 -21
  10. package/dist/esm/PhysicsBody.js.map +1 -1
  11. package/dist/esm/PhysicsWorld.d.ts +107 -35
  12. package/dist/esm/PhysicsWorld.js +136 -31
  13. package/dist/esm/PhysicsWorld.js.map +1 -1
  14. package/dist/esm/backend/NativePhysicsBackend.d.ts +5 -0
  15. package/dist/esm/backend/NativePhysicsBackend.js +14 -0
  16. package/dist/esm/backend/NativePhysicsBackend.js.map +1 -1
  17. package/dist/esm/backend/PhysicsBackend.d.ts +9 -1
  18. package/dist/esm/binding/PhysicsBinding.d.ts +6 -6
  19. package/dist/esm/binding/PhysicsBinding.js +8 -5
  20. package/dist/esm/binding/PhysicsBinding.js.map +1 -1
  21. package/dist/esm/broadphase/SweepAndPrune.d.ts +1 -0
  22. package/dist/esm/broadphase/SweepAndPrune.js +32 -3
  23. package/dist/esm/broadphase/SweepAndPrune.js.map +1 -1
  24. package/dist/esm/collision/CollisionProxy.d.ts +2 -2
  25. package/dist/esm/collision/narrowphase.js +91 -38
  26. package/dist/esm/collision/narrowphase.js.map +1 -1
  27. package/dist/esm/debug/PhysicsDebugDraw.d.ts +2 -1
  28. package/dist/esm/debug/PhysicsDebugDraw.js +2 -1
  29. package/dist/esm/debug/PhysicsDebugDraw.js.map +1 -1
  30. package/dist/esm/physicsBuildInfo.js +2 -2
  31. package/dist/esm/public.d.ts +2 -1
  32. package/dist/esm/query/QueryEngine.d.ts +2 -2
  33. package/dist/esm/query/QueryEngine.js +13 -4
  34. package/dist/esm/query/QueryEngine.js.map +1 -1
  35. package/dist/esm/shapes/AnyShape.d.ts +9 -0
  36. package/dist/esm/shapes/CircleShape.d.ts +1 -2
  37. package/dist/esm/shapes/CircleShape.js.map +1 -1
  38. package/dist/esm/shapes/PolygonShape.d.ts +1 -2
  39. package/dist/esm/shapes/PolygonShape.js +45 -17
  40. package/dist/esm/shapes/PolygonShape.js.map +1 -1
  41. package/dist/esm/shapes/index.d.ts +1 -0
  42. package/dist/esm/solver/ContactSolver.d.ts +87 -0
  43. package/dist/esm/solver/ContactSolver.js +483 -0
  44. package/dist/esm/solver/ContactSolver.js.map +1 -0
  45. package/dist/esm/sort.d.ts +17 -0
  46. package/dist/esm/sort.js +54 -0
  47. package/dist/esm/sort.js.map +1 -0
  48. package/package.json +4 -4
@@ -1,3 +1,5 @@
1
+ import { sortInPlace } from '../sort.js';
2
+
1
3
  /**
2
4
  * Sort-and-sweep broad phase on the X axis. Each query sorts the live colliders
3
5
  * by their AABB `minX`, then sweeps once, comparing each collider only against
@@ -8,23 +10,38 @@
8
10
  */
9
11
  class SweepAndPrune {
10
12
  _sorted = [];
13
+ // Pooled CandidatePair objects, reused across steps instead of allocating one
14
+ // per overlapping pair. `out` holds references into the pool and is consumed
15
+ // within the same step (ContactGraph reads pair.a/pair.b before the next
16
+ // computePairs overwrites the pool), so the reuse is safe.
17
+ _pairPool = [];
11
18
  computePairs(colliders, out) {
12
19
  out.length = 0;
13
20
  const sorted = this._sorted;
14
21
  sorted.length = 0;
22
+ const pool = this._pairPool;
23
+ let poolCount = 0;
15
24
  for (const collider of colliders) {
16
25
  sorted.push(collider);
17
26
  }
18
- sorted.sort(byMinX);
27
+ sortInPlace(sorted, byMinX);
19
28
  const count = sorted.length;
20
29
  for (let i = 0; i < count; i++) {
30
+ // i/j stay within 0..count-1, so the entries always exist; the guards only
31
+ // discharge `noUncheckedIndexedAccess` and never actually skip a collider.
21
32
  const a = sorted[i];
33
+ if (a === undefined) {
34
+ continue;
35
+ }
22
36
  const aBox = a.aabb;
23
37
  const aMaxX = aBox.maxX;
24
38
  const aMinY = aBox.minY;
25
39
  const aMaxY = aBox.maxY;
26
40
  for (let j = i + 1; j < count; j++) {
27
41
  const b = sorted[j];
42
+ if (b === undefined) {
43
+ continue;
44
+ }
28
45
  const bBox = b.aabb;
29
46
  // X intervals are sorted: once b starts past a's right edge, so do all
30
47
  // later colliders — stop scanning this i.
@@ -34,10 +51,22 @@ class SweepAndPrune {
34
51
  if (bBox.minY > aMaxY || bBox.maxY < aMinY) {
35
52
  continue;
36
53
  }
37
- out.push(a.id < b.id ? { a, b } : { a: b, b: a });
54
+ const lo = a.id < b.id ? a : b;
55
+ const hi = a.id < b.id ? b : a;
56
+ let pair = pool[poolCount];
57
+ if (pair === undefined) {
58
+ pair = { a: lo, b: hi };
59
+ pool.push(pair);
60
+ }
61
+ else {
62
+ pair.a = lo;
63
+ pair.b = hi;
64
+ }
65
+ poolCount++;
66
+ out.push(pair);
38
67
  }
39
68
  }
40
- out.sort(byPairId);
69
+ sortInPlace(out, byPairId);
41
70
  return out;
42
71
  }
43
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SweepAndPrune.js","sources":["../../../../src/broadphase/SweepAndPrune.ts"],"sourcesContent":[null],"names":[],"mappings":"AAGA;;;;;;;AAOG;MACU,aAAa,CAAA;IACP,OAAO,GAAe,EAAE;IAElC,YAAY,CAAC,SAA8B,EAAE,GAAoB,EAAA;AACtE,QAAA,GAAG,CAAC,MAAM,GAAG,CAAC;AAEd,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAC3B,QAAA,MAAM,CAAC,MAAM,GAAG,CAAC;AAEjB,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvB;AAEA,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAEnB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;AAE3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC9B,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACnB,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI;AACnB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;AACvB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;AACvB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI;AAEvB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAClC,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACnB,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI;;;AAInB,gBAAA,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE;oBACrB;gBACF;AAEA,gBAAA,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE;oBAC1C;gBACF;AAEA,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACnD;QACF;AAEA,QAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAElB,QAAA,OAAO,GAAG;IACZ;AACD;AAED,MAAM,MAAM,GAAG,CAAC,CAAW,EAAE,CAAW,KAAa,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AAE7F,MAAM,QAAQ,GAAG,CAAC,CAAgB,EAAE,CAAgB,KAAa,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;;;;"}
1
+ {"version":3,"file":"SweepAndPrune.js","sources":["../../../../src/broadphase/SweepAndPrune.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Mutable2D } from '../math';
2
- import type { Shape } from '../shapes/Shape';
2
+ import type { AnyShape } from '../shapes/AnyShape';
3
3
  /**
4
4
  * The geometric surface the narrow phase needs: a shape plus its cached world
5
5
  * data. {@link Collider} satisfies this structurally, and shape-overlap queries
@@ -7,7 +7,7 @@ import type { Shape } from '../shapes/Shape';
7
7
  * allocating a body/collider.
8
8
  */
9
9
  export interface CollisionProxy {
10
- readonly shape: Shape;
10
+ readonly shape: AnyShape;
11
11
  readonly worldCenter: Readonly<Mutable2D>;
12
12
  readonly worldVertices: readonly number[];
13
13
  readonly worldNormals: readonly number[];
@@ -14,8 +14,11 @@ const collide = (a, b, manifold) => {
14
14
  }
15
15
  return tb === 'circle' ? collideCirclePolygon(b, a, manifold, true) : collidePolygons(a, b, manifold);
16
16
  };
17
- const radiusOf = (collider) => collider.shape.radius;
18
- const countOf = (collider) => collider.shape.count;
17
+ // radiusOf/countOf are only ever called after the `collide` dispatch has matched
18
+ // the shape kind, so the discriminant always holds; the fallback is unreachable
19
+ // but keeps these allocation-free helpers cast-free and type-safe.
20
+ const radiusOf = (collider) => (collider.shape.type === 'circle' ? collider.shape.radius : 0);
21
+ const countOf = (collider) => (collider.shape.type === 'polygon' ? collider.shape.count : 0);
19
22
  const collideCircles = (a, b, manifold) => {
20
23
  const ca = a.worldCenter;
21
24
  const cb = b.worldCenter;
@@ -62,7 +65,12 @@ const collideCirclePolygon = (circle, polygon, manifold, flip) => {
62
65
  let maxSep = -Infinity;
63
66
  let refEdge = 0;
64
67
  for (let i = 0; i < count; i++) {
65
- const s = normals[i * 2] * (c.x - verts[i * 2]) + normals[i * 2 + 1] * (c.y - verts[i * 2 + 1]);
68
+ // Loop indices are provably in-bounds (0..count-1); the `!` is zero-cost.
69
+ const enx = normals[i * 2];
70
+ const eny = normals[i * 2 + 1];
71
+ const evx = verts[i * 2];
72
+ const evy = verts[i * 2 + 1];
73
+ const s = enx * (c.x - evx) + eny * (c.y - evy);
66
74
  if (s > r) {
67
75
  return false;
68
76
  }
@@ -71,6 +79,9 @@ const collideCirclePolygon = (circle, polygon, manifold, flip) => {
71
79
  refEdge = i;
72
80
  }
73
81
  }
82
+ // refEdge/j stay in 0..count-1, so these reads are in-bounds too.
83
+ const refNx = normals[refEdge * 2];
84
+ const refNy = normals[refEdge * 2 + 1];
74
85
  let nx;
75
86
  let ny;
76
87
  let penetration;
@@ -79,8 +90,8 @@ const collideCirclePolygon = (circle, polygon, manifold, flip) => {
79
90
  let id;
80
91
  if (maxSep < eps) {
81
92
  // Centre inside the polygon: push out along the least-penetrating face.
82
- nx = -normals[refEdge * 2];
83
- ny = -normals[refEdge * 2 + 1];
93
+ nx = -refNx;
94
+ ny = -refNy;
84
95
  penetration = r - maxSep;
85
96
  px = c.x + nx * r;
86
97
  py = c.y + ny * r;
@@ -103,8 +114,8 @@ const collideCirclePolygon = (circle, polygon, manifold, flip) => {
103
114
  return false;
104
115
  }
105
116
  const d = Math.sqrt(d2);
106
- nx = d > eps ? -dx / d : -normals[refEdge * 2];
107
- ny = d > eps ? -dy / d : -normals[refEdge * 2 + 1];
117
+ nx = d > eps ? -dx / d : -refNx;
118
+ ny = d > eps ? -dy / d : -refNy;
108
119
  penetration = r - d;
109
120
  px = v1x;
110
121
  py = v1y;
@@ -118,8 +129,8 @@ const collideCirclePolygon = (circle, polygon, manifold, flip) => {
118
129
  return false;
119
130
  }
120
131
  const d = Math.sqrt(d2);
121
- nx = d > eps ? -dx / d : -normals[refEdge * 2];
122
- ny = d > eps ? -dy / d : -normals[refEdge * 2 + 1];
132
+ nx = d > eps ? -dx / d : -refNx;
133
+ ny = d > eps ? -dy / d : -refNy;
123
134
  penetration = r - d;
124
135
  px = v2x;
125
136
  py = v2y;
@@ -127,8 +138,8 @@ const collideCirclePolygon = (circle, polygon, manifold, flip) => {
127
138
  }
128
139
  else {
129
140
  // Face region.
130
- nx = -normals[refEdge * 2];
131
- ny = -normals[refEdge * 2 + 1];
141
+ nx = -refNx;
142
+ ny = -refNy;
132
143
  penetration = r - maxSep;
133
144
  px = c.x + nx * r;
134
145
  py = c.y + ny * r;
@@ -153,8 +164,21 @@ const newClipPair = () => [
153
164
  { x: 0, y: 0, id: 0 },
154
165
  { x: 0, y: 0, id: 0 },
155
166
  ];
156
- /** Max separation of `b` from any face of `a`, with the supporting face index. */
157
- const findMaxSeparation = (a, b) => {
167
+ // Module-local clip scratch reused across collidePolygons calls instead of
168
+ // allocating a fresh pair per contact. The narrow phase is single-threaded and
169
+ // non-reentrant — a world step calls `collide` strictly sequentially per pair,
170
+ // with no nested self-call or async — so module-global scratch is safe and may
171
+ // be shared across worlds (world-isolation.test.ts guards the multi-world
172
+ // invariant). The three pairs MUST stay separate: incident → clipped1 →
173
+ // clipped2 are simultaneously live (each clip reads the previous clip's output).
174
+ const _incidentScratch = newClipPair();
175
+ const _clipped1Scratch = newClipPair();
176
+ const _clipped2Scratch = newClipPair();
177
+ // Two separate scratches: collidePolygons holds sepA and sepB at the same time.
178
+ const _sepA = { separation: 0, edge: 0 };
179
+ const _sepB = { separation: 0, edge: 0 };
180
+ /** Max separation of `b` from any face of `a`, with the supporting face index. Writes into and returns `out` (allocation-free). */
181
+ const findMaxSeparation = (a, b, out) => {
158
182
  const av = a.worldVertices;
159
183
  const an = a.worldNormals;
160
184
  const ac = countOf(a);
@@ -163,6 +187,7 @@ const findMaxSeparation = (a, b) => {
163
187
  let best = -Infinity;
164
188
  let bestEdge = 0;
165
189
  for (let i = 0; i < ac; i++) {
190
+ // i in 0..ac-1 and j in 0..bc-1, so every read below is in-bounds.
166
191
  const nx = an[i * 2];
167
192
  const ny = an[i * 2 + 1];
168
193
  const vx = av[i * 2];
@@ -172,11 +197,13 @@ const findMaxSeparation = (a, b) => {
172
197
  let sx = 0;
173
198
  let sy = 0;
174
199
  for (let j = 0; j < bc; j++) {
175
- const d = nx * bv[j * 2] + ny * bv[j * 2 + 1];
200
+ const bjx = bv[j * 2];
201
+ const bjy = bv[j * 2 + 1];
202
+ const d = nx * bjx + ny * bjy;
176
203
  if (d < minDot) {
177
204
  minDot = d;
178
- sx = bv[j * 2];
179
- sy = bv[j * 2 + 1];
205
+ sx = bjx;
206
+ sy = bjy;
180
207
  }
181
208
  }
182
209
  const separation = nx * (sx - vx) + ny * (sy - vy);
@@ -185,7 +212,9 @@ const findMaxSeparation = (a, b) => {
185
212
  bestEdge = i;
186
213
  }
187
214
  }
188
- return { separation: best, edge: bestEdge };
215
+ out.separation = best;
216
+ out.edge = bestEdge;
217
+ return out;
189
218
  };
190
219
  /** Incident face of `inc` = the face most anti-parallel to the reference normal. */
191
220
  const findIncidentFace = (refNx, refNy, inc, out) => {
@@ -195,13 +224,16 @@ const findIncidentFace = (refNx, refNy, inc, out) => {
195
224
  let minDot = Infinity;
196
225
  let idx = 0;
197
226
  for (let i = 0; i < ic; i++) {
198
- const d = refNx * inrm[i * 2] + refNy * inrm[i * 2 + 1];
227
+ const inx = inrm[i * 2];
228
+ const iny = inrm[i * 2 + 1];
229
+ const d = refNx * inx + refNy * iny;
199
230
  if (d < minDot) {
200
231
  minDot = d;
201
232
  idx = i;
202
233
  }
203
234
  }
204
235
  const j = (idx + 1) % ic;
236
+ // idx/j in 0..ic-1; reads in-bounds. out is a fixed 2-tuple.
205
237
  out[0].x = iv[idx * 2];
206
238
  out[0].y = iv[idx * 2 + 1];
207
239
  out[0].id = idx;
@@ -211,21 +243,29 @@ const findIncidentFace = (refNx, refNy, inc, out) => {
211
243
  };
212
244
  /** Clip the 2-vertex segment `input` to the half-plane `dot(n, p) ≤ offset`. */
213
245
  const clipSegment = (nx, ny, offset, input, output, syntheticId) => {
246
+ // input/output are fixed 2-tuples; count never exceeds 2 (two boundary
247
+ // copies, or one copy plus the guarded intersection), so output[0]/output[1]
248
+ // are the only slots written and both always exist.
249
+ const in0 = input[0];
250
+ const in1 = input[1];
214
251
  let count = 0;
215
- const d1 = nx * input[0].x + ny * input[0].y - offset;
216
- const d2 = nx * input[1].x + ny * input[1].y - offset;
252
+ const d1 = nx * in0.x + ny * in0.y - offset;
253
+ const d2 = nx * in1.x + ny * in1.y - offset;
217
254
  if (d1 <= 0) {
218
- copyClip(input[0], output[count++]);
255
+ copyClip(in0, count === 0 ? output[0] : output[1]);
256
+ count++;
219
257
  }
220
258
  if (d2 <= 0) {
221
- copyClip(input[1], output[count++]);
259
+ copyClip(in1, count === 0 ? output[0] : output[1]);
260
+ count++;
222
261
  }
223
262
  if (d1 * d2 < 0 && count < 2) {
224
263
  const alpha = d1 / (d1 - d2);
225
- const target = output[count++];
226
- target.x = input[0].x + alpha * (input[1].x - input[0].x);
227
- target.y = input[0].y + alpha * (input[1].y - input[0].y);
264
+ const target = count === 0 ? output[0] : output[1];
265
+ target.x = in0.x + alpha * (in1.x - in0.x);
266
+ target.y = in0.y + alpha * (in1.y - in0.y);
228
267
  target.id = syntheticId;
268
+ count++;
229
269
  }
230
270
  return count;
231
271
  };
@@ -237,11 +277,11 @@ const copyClip = (from, to) => {
237
277
  const encodeId = (flip, refEdge, incidentId) => (flip ? 1 << 20 : 0) | ((refEdge & 0xff) << 12) | (incidentId & 0xfff);
238
278
  /** Convex polygon vs convex polygon: SAT reference face + Sutherland-Hodgman clip. */
239
279
  const collidePolygons = (a, b, manifold) => {
240
- const sepA = findMaxSeparation(a, b);
280
+ const sepA = findMaxSeparation(a, b, _sepA);
241
281
  if (sepA.separation >= 0) {
242
282
  return false;
243
283
  }
244
- const sepB = findMaxSeparation(b, a);
284
+ const sepB = findMaxSeparation(b, a, _sepB);
245
285
  if (sepB.separation >= 0) {
246
286
  return false;
247
287
  }
@@ -267,42 +307,50 @@ const collidePolygons = (a, b, manifold) => {
267
307
  const rn = ref.worldNormals;
268
308
  const rc = countOf(ref);
269
309
  const i2 = (refEdge + 1) % rc;
310
+ // refEdge/i2 in 0..rc-1, so these reads are in-bounds.
270
311
  const v1x = rv[refEdge * 2];
271
312
  const v1y = rv[refEdge * 2 + 1];
272
313
  const v2x = rv[i2 * 2];
273
314
  const v2y = rv[i2 * 2 + 1];
274
315
  const refNx = rn[refEdge * 2];
275
316
  const refNy = rn[refEdge * 2 + 1];
276
- const incident = newClipPair();
317
+ const incident = _incidentScratch;
277
318
  findIncidentFace(refNx, refNy, inc, incident);
278
319
  // Reference-face tangent (the side-plane direction).
279
320
  let tx = v2x - v1x;
280
321
  let ty = v2y - v1y;
281
- const tl = Math.hypot(tx, ty);
322
+ // sqrt(x²+y²) over Math.hypot — avoids hypot's variadic/internal-allocation
323
+ // path on the narrow-phase hot path; the operands are bounded edge lengths,
324
+ // so the overflow protection hypot adds is not needed here.
325
+ const tl = Math.sqrt(tx * tx + ty * ty);
282
326
  tx /= tl;
283
327
  ty /= tl;
284
328
  const negSide = -(tx * v1x + ty * v1y);
285
329
  const posSide = tx * v2x + ty * v2y;
286
- const clipped1 = newClipPair();
330
+ const clipped1 = _clipped1Scratch;
287
331
  if (clipSegment(-tx, -ty, negSide, incident, clipped1, encodeId(flip, refEdge, 0xffe)) < 2) {
288
332
  return false;
289
333
  }
290
- const clipped2 = newClipPair();
334
+ const clipped2 = _clipped2Scratch;
291
335
  if (clipSegment(tx, ty, posSide, clipped1, clipped2, encodeId(flip, refEdge, 0xfff)) < 2) {
292
336
  return false;
293
337
  }
294
338
  manifold.normalX = flip ? -refNx : refNx;
295
339
  manifold.normalY = flip ? -refNy : refNy;
296
340
  const refC = refNx * v1x + refNy * v1y;
341
+ const points = manifold.points;
297
342
  let cp = 0;
298
343
  for (let k = 0; k < 2; k++) {
299
- const separation = refNx * clipped2[k].x + refNy * clipped2[k].y - refC;
344
+ // clipped2 is a fixed 2-tuple; k in {0,1} so the clip vertex always exists.
345
+ const cv = k === 0 ? clipped2[0] : clipped2[1];
346
+ const separation = refNx * cv.x + refNy * cv.y - refC;
300
347
  if (separation <= 0) {
301
- const point = manifold.points[cp];
302
- point.x = clipped2[k].x;
303
- point.y = clipped2[k].y;
348
+ // cp reaches at most 2 (one per clip vertex); points[0]/points[1] exist.
349
+ const point = cp === 0 ? points[0] : points[1];
350
+ point.x = cv.x;
351
+ point.y = cv.y;
304
352
  point.penetration = -separation;
305
- point.id = encodeId(flip, refEdge, clipped2[k].id);
353
+ point.id = encodeId(flip, refEdge, cv.id);
306
354
  cp++;
307
355
  }
308
356
  }
@@ -330,7 +378,7 @@ const testOverlap = (a, b) => {
330
378
  if (tb === 'circle') {
331
379
  return circlePolygonOverlap(b, a);
332
380
  }
333
- return findMaxSeparation(a, b).separation < 0 && findMaxSeparation(b, a).separation < 0;
381
+ return findMaxSeparation(a, b, _sepA).separation < 0 && findMaxSeparation(b, a, _sepB).separation < 0;
334
382
  };
335
383
  const circlePolygonOverlap = (circle, polygon) => {
336
384
  const c = circle.worldCenter;
@@ -341,7 +389,12 @@ const circlePolygonOverlap = (circle, polygon) => {
341
389
  let maxSep = -Infinity;
342
390
  let refEdge = 0;
343
391
  for (let i = 0; i < count; i++) {
344
- const s = normals[i * 2] * (c.x - verts[i * 2]) + normals[i * 2 + 1] * (c.y - verts[i * 2 + 1]);
392
+ // Loop indices are provably in-bounds (0..count-1); the `!` is zero-cost.
393
+ const enx = normals[i * 2];
394
+ const eny = normals[i * 2 + 1];
395
+ const evx = verts[i * 2];
396
+ const evy = verts[i * 2 + 1];
397
+ const s = enx * (c.x - evx) + eny * (c.y - evy);
345
398
  if (s > r) {
346
399
  return false;
347
400
  }
@@ -1 +1 @@
1
- {"version":3,"file":"narrowphase.js","sources":["../../../../src/collision/narrowphase.ts"],"sourcesContent":[null],"names":[],"mappings":"AAKA,MAAM,GAAG,GAAG,IAAI;AAEhB;;;;;AAKG;AACI,MAAM,OAAO,GAAG,CAAC,CAAiB,EAAE,CAAiB,EAAE,QAAkB,KAAa;IAC3F,QAAQ,CAAC,KAAK,EAAE;AAEhB,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;AACvB,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;AAEvB,IAAA,IAAI,EAAE,KAAK,QAAQ,EAAE;QACnB,OAAO,EAAE,KAAK,QAAQ,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC;IACvG;IAEA,OAAO,EAAE,KAAK,QAAQ,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC;AACvG;AAEA,MAAM,QAAQ,GAAG,CAAC,QAAwB,KAAc,QAAQ,CAAC,KAAqB,CAAC,MAAM;AAC7F,MAAM,OAAO,GAAG,CAAC,QAAwB,KAAc,QAAQ,CAAC,KAAsB,CAAC,KAAK;AAE5F,MAAM,cAAc,GAAG,CAAC,CAAiB,EAAE,CAAiB,EAAE,QAAkB,KAAa;AAC3F,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW;AACxB,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW;AACxB,IAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AACtB,IAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;IAEtB,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACpB,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACpB,IAAA,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE;IACpB,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAEhC,IAAA,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE;AACxB,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAE9B,IAAA,IAAI,IAAI,GAAG,GAAG,EAAE;QACd,EAAE,IAAI,IAAI;QACV,EAAE,IAAI,IAAI;IACZ;SAAO;QACL,EAAE,GAAG,CAAC;QACN,EAAE,GAAG,CAAC;IACR;AAEA,IAAA,QAAQ,CAAC,OAAO,GAAG,EAAE;AACrB,IAAA,QAAQ,CAAC,OAAO,GAAG,EAAE;IAErB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;;IAEhC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG;IACjD,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG;AACjD,IAAA,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI;AAC/B,IAAA,KAAK,CAAC,EAAE,GAAG,CAAC;AACZ,IAAA,QAAQ,CAAC,UAAU,GAAG,CAAC;AAEvB,IAAA,OAAO,IAAI;AACb,CAAC;AAED;;;;AAIG;AACH,MAAM,oBAAoB,GAAG,CAAC,MAAsB,EAAE,OAAuB,EAAE,QAAkB,EAAE,IAAa,KAAa;AAC3H,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW;AAC5B,IAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC1B,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa;AACnC,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY;AACpC,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;AAE9B,IAAA,IAAI,MAAM,GAAG,CAAC,QAAQ;IACtB,IAAI,OAAO,GAAG,CAAC;AAEf,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/F,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,GAAG,MAAM,EAAE;YACd,MAAM,GAAG,CAAC;YACV,OAAO,GAAG,CAAC;QACb;IACF;AAEA,IAAA,IAAI,EAAU;AACd,IAAA,IAAI,EAAU;AACd,IAAA,IAAI,WAAmB;AACvB,IAAA,IAAI,EAAU;AACd,IAAA,IAAI,EAAU;AACd,IAAA,IAAI,EAAU;AAEd,IAAA,IAAI,MAAM,GAAG,GAAG,EAAE;;QAEhB,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1B,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,WAAW,GAAG,CAAC,GAAG,MAAM;QACxB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACjB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACjB,EAAE,GAAG,OAAO;IACd;SAAO;QACL,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;AAChE,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;AAEhE,QAAA,IAAI,EAAE,IAAI,CAAC,EAAE;;AAEX,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AACpB,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;YACpB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAE5B,YAAA,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AACd,gBAAA,OAAO,KAAK;YACd;YAEA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAEvB,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;YAC9C,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAClD,YAAA,WAAW,GAAG,CAAC,GAAG,CAAC;YACnB,EAAE,GAAG,GAAG;YACR,EAAE,GAAG,GAAG;YACR,EAAE,GAAG,OAAO;QACd;AAAO,aAAA,IAAI,EAAE,IAAI,CAAC,EAAE;AAClB,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AACpB,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;YACpB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAE5B,YAAA,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE;AACd,gBAAA,OAAO,KAAK;YACd;YAEA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAEvB,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;YAC9C,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAClD,YAAA,WAAW,GAAG,CAAC,GAAG,CAAC;YACnB,EAAE,GAAG,GAAG;YACR,EAAE,GAAG,GAAG;YACR,EAAE,GAAG,CAAC;QACR;aAAO;;YAEL,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;YAC1B,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B,YAAA,WAAW,GAAG,CAAC,GAAG,MAAM;YACxB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;YACjB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;YACjB,EAAE,GAAG,OAAO;QACd;IACF;IAEA,IAAI,IAAI,EAAE;QACR,EAAE,GAAG,CAAC,EAAE;QACR,EAAE,GAAG,CAAC,EAAE;IACV;AAEA,IAAA,QAAQ,CAAC,OAAO,GAAG,EAAE;AACrB,IAAA,QAAQ,CAAC,OAAO,GAAG,EAAE;IAErB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAChC,IAAA,KAAK,CAAC,CAAC,GAAG,EAAE;AACZ,IAAA,KAAK,CAAC,CAAC,GAAG,EAAE;AACZ,IAAA,KAAK,CAAC,WAAW,GAAG,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW;AACrD,IAAA,KAAK,CAAC,EAAE,GAAG,EAAE;AACb,IAAA,QAAQ,CAAC,UAAU,GAAG,CAAC;AAEvB,IAAA,OAAO,IAAI;AACb,CAAC;AAQD,MAAM,WAAW,GAAG,MAAgC;IAClD,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;IACrB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;CACtB;AAED;AACA,MAAM,iBAAiB,GAAG,CAAC,CAAiB,EAAE,CAAiB,KAA0C;AACvG,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa;AAC1B,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY;AACzB,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AACrB,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa;AAC1B,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AAErB,IAAA,IAAI,IAAI,GAAG,CAAC,QAAQ;IACpB,IAAI,QAAQ,GAAG,CAAC;AAEhB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;QAGxB,IAAI,MAAM,GAAG,QAAQ;QACrB,IAAI,EAAE,GAAG,CAAC;QACV,IAAI,EAAE,GAAG,CAAC;AAEV,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7C,YAAA,IAAI,CAAC,GAAG,MAAM,EAAE;gBACd,MAAM,GAAG,CAAC;AACV,gBAAA,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBACd,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB;QACF;AAEA,QAAA,MAAM,UAAU,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAElD,QAAA,IAAI,UAAU,GAAG,IAAI,EAAE;YACrB,IAAI,GAAG,UAAU;YACjB,QAAQ,GAAG,CAAC;QACd;IACF;IAEA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC7C,CAAC;AAED;AACA,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,GAAmB,EAAE,GAA6B,KAAU;AAClH,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa;AAC5B,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY;AAC7B,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAEvB,IAAI,MAAM,GAAG,QAAQ;IACrB,IAAI,GAAG,GAAG,CAAC;AAEX,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvD,QAAA,IAAI,CAAC,GAAG,MAAM,EAAE;YACd,MAAM,GAAG,CAAC;YACV,GAAG,GAAG,CAAC;QACT;IACF;IAEA,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE;AAExB,IAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACtB,IAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1B,IAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG;AACf,IAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB,IAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,IAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACf,CAAC;AAED;AACA,MAAM,WAAW,GAAG,CAClB,EAAU,EACV,EAAU,EACV,MAAc,EACd,KAAwC,EACxC,MAAgC,EAChC,WAAmB,KACT;IACV,IAAI,KAAK,GAAG,CAAC;IACb,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM;IACrD,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM;AAErD,IAAA,IAAI,EAAE,IAAI,CAAC,EAAE;AACX,QAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACrC;AAEA,IAAA,IAAI,EAAE,IAAI,CAAC,EAAE;AACX,QAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACrC;IAEA,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;QAC5B,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAE9B,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,QAAA,MAAM,CAAC,EAAE,GAAG,WAAW;IACzB;AAEA,IAAA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAE,EAAc,KAAU;AAC1D,IAAA,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACb,IAAA,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACb,IAAA,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AACjB,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAE,OAAe,EAAE,UAAkB,KAClE,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC,IAAI,UAAU,GAAG,KAAK,CAAC;AAExE;AACA,MAAM,eAAe,GAAG,CAAC,CAAiB,EAAE,CAAiB,EAAE,QAAkB,KAAa;IAC5F,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpC,IAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,IAAI,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpC,IAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE;AACxB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,GAAmB;AACvB,IAAA,IAAI,GAAmB;AACvB,IAAA,IAAI,OAAe;AACnB,IAAA,IAAI,IAAa;;;AAIjB,IAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE;QACtE,GAAG,GAAG,CAAC;QACP,GAAG,GAAG,CAAC;AACP,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI;QACnB,IAAI,GAAG,KAAK;IACd;SAAO;QACL,GAAG,GAAG,CAAC;QACP,GAAG,GAAG,CAAC;AACP,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI;QACnB,IAAI,GAAG,IAAI;IACb;AAEA,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa;AAC5B,IAAA,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY;AAC3B,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE;IAC7B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAEjC,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE;IAC9B,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC;;AAG7C,IAAA,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG;AAClB,IAAA,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG;IAClB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;IAC7B,EAAE,IAAI,EAAE;IACR,EAAE,IAAI,EAAE;AAER,IAAA,MAAM,OAAO,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;IACtC,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG;AAEnC,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE;IAE9B,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;AAC1F,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,QAAQ,GAAG,WAAW,EAAE;IAE9B,IAAI,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE;AACxF,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK;AACxC,IAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK;IAExC,MAAM,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;IACtC,IAAI,EAAE,GAAG,CAAC;AAEV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAEvE,QAAA,IAAI,UAAU,IAAI,CAAC,EAAE;YACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,YAAA,KAAK,CAAC,WAAW,GAAG,CAAC,UAAU;AAC/B,YAAA,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,YAAA,EAAE,EAAE;QACN;IACF;AAEA,IAAA,QAAQ,CAAC,UAAU,GAAG,EAAE;IAExB,OAAO,EAAE,GAAG,CAAC;AACf,CAAC;AAED;;;AAGG;MACU,WAAW,GAAG,CAAC,CAAiB,EAAE,CAAiB,KAAa;AAC3E,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;AACvB,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI;AAEvB,IAAA,IAAI,EAAE,KAAK,QAAQ,EAAE;AACnB,QAAA,IAAI,EAAE,KAAK,QAAQ,EAAE;AACnB,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW;AACxB,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW;YACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YACtC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAEtB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,GAAG,IAAI;QACzC;AAEA,QAAA,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC;AAEA,IAAA,IAAI,EAAE,KAAK,QAAQ,EAAE;AACnB,QAAA,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IACnC;IAEA,OAAO,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC;AACzF;AAEA,MAAM,oBAAoB,GAAG,CAAC,MAAsB,EAAE,OAAuB,KAAa;AACxF,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW;AAC5B,IAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC1B,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa;AACnC,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY;AACpC,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;AAE9B,IAAA,IAAI,MAAM,GAAG,CAAC,QAAQ;IACtB,IAAI,OAAO,GAAG,CAAC;AAEf,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/F,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,GAAG,MAAM,EAAE;YACd,MAAM,GAAG,CAAC;YACV,OAAO,GAAG,CAAC;QACb;IACF;AAEA,IAAA,IAAI,MAAM,GAAG,GAAG,EAAE;AAChB,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK;IAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5B,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;AAChE,IAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;AAEhE,IAAA,IAAI,EAAE,IAAI,CAAC,EAAE;AACX,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AACpB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;QAEpB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;IACnC;AAEA,IAAA,IAAI,EAAE,IAAI,CAAC,EAAE;AACX,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AACpB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;QAEpB,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;IACnC;IAEA,OAAO,MAAM,IAAI,CAAC;AACpB,CAAC;;;;"}
1
+ {"version":3,"file":"narrowphase.js","sources":["../../../../src/collision/narrowphase.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import type { Application, RenderBackend } from '@codexo/exojs';
1
+ import type { Application } from '@codexo/exojs';
2
2
  import type { DebugLayerViewMode } from '@codexo/exojs/debug';
3
3
  import { DebugLayer } from '@codexo/exojs/debug';
4
+ import type { RenderBackend } from '@codexo/exojs/renderer-sdk';
4
5
  import type { PhysicsWorld } from '../PhysicsWorld';
5
6
  /** Toggles for the physics debug overlay. */
6
7
  export interface PhysicsDebugDrawOptions {
@@ -146,7 +146,8 @@ class PhysicsDebugDraw extends DebugLayer {
146
146
  continue;
147
147
  }
148
148
  for (let i = 0; i < this._manifold.pointCount; i++) {
149
- const point = this._manifold.points[i];
149
+ // i in 0..pointCount-1 and pointCount ≤ 2, so the point always exists.
150
+ const point = i === 0 ? this._manifold.points[0] : this._manifold.points[1];
150
151
  if (this.options.drawContacts) {
151
152
  gfx.lineColor = colorContact;
152
153
  this._strokeCross(gfx, point.x, point.y, 3);
@@ -1 +1 @@
1
- {"version":3,"file":"PhysicsDebugDraw.js","sources":["../../../../src/debug/PhysicsDebugDraw.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AA8BA,MAAM,QAAQ,GAAG,EAAE;AAEnB,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACjD,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClD,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAC7C,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/C,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9C,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAC3C,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAErD;;;;;;AAMG;AACG,MAAO,gBAAiB,SAAQ,UAAU,CAAA;;AAE9B,IAAA,OAAO;AAEN,IAAA,MAAM;IACf,SAAS,GAAoB,IAAI;AACxB,IAAA,WAAW,GAAG,IAAI,aAAa,EAAE;AACjC,IAAA,SAAS,GAAG,IAAI,QAAQ,EAAE;IAC1B,MAAM,GAAoB,EAAE;AAE7C,IAAA,WAAA,CAAmB,GAAgB,EAAE,KAAmB,EAAE,UAAmC,EAAE,EAAA;QAC7F,KAAK,CAAC,GAAG,CAAC;AAEV,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;AACtC,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;AACnC,YAAA,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;AAC3C,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;AACzC,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,KAAK;AACzC,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK;SAChD;IACH;AAEA,IAAA,IAAoB,QAAQ,GAAA;AAC1B,QAAA,OAAO,OAAO;IAChB;IAEgB,MAAM,GAAA;;IAEtB;AAEgB,IAAA,MAAM,CAAC,OAAsB,EAAA;QAC3C,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,QAAQ,EAAE,CAAC;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAE5B,GAAG,CAAC,KAAK,EAAE;AACX,QAAA,GAAG,CAAC,SAAS,GAAG,CAAC;AAEjB,QAAA,IAAI,OAAO,CAAC,cAAc,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;QAC7B;AAEA,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;YACpB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC5C,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;YACjC;QACF;AAEA,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AAC5C,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC;YAClC;QACF;AAEA,QAAA,IAAI,OAAO,CAAC,WAAW,EAAE;AACvB,YAAA,GAAG,CAAC,SAAS,GAAG,WAAW;YAE3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3C;QACF;QAEA,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE;AAC/C,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAC3B;AAEA,QAAA,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;IACrB;IAEgB,OAAO,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;IACF;;IAIQ,YAAY,CAAC,GAAa,EAAE,QAAkB,EAAA;QACpD,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAElF,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AACpC,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW;AAC9B,YAAA,MAAM,CAAC,GAAI,QAAQ,CAAC,KAAqB,CAAC,MAAM;AAEhD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;YAEpC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;YAExF;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa;AACpC,QAAA,MAAM,KAAK,GAAI,QAAQ,CAAC,KAAsB,CAAC,KAAK;AAEpD,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAE9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;AAEnB,YAAA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C;IACF;IAEQ,WAAW,CAAC,GAAa,EAAE,QAAkB,EAAA;AACnD,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI;AAEzB,QAAA,GAAG,CAAC,SAAS,GAAG,SAAS;QACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;QAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;IAChC;AAEQ,IAAA,aAAa,CAAC,GAAa,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAA;QACpE,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;AAEtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;YAEtC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxD;IACF;AAEQ,IAAA,YAAY,CAAC,GAAa,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EAAA;QACpE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACvB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACvB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACvB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB;AAEQ,IAAA,iBAAiB,CAAC,GAAa,EAAA;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;AACjE,QAAA,GAAG,CAAC,SAAS,GAAG,eAAe;AAE/B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI;AACrB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI;YAErB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;YAC5D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;QAC9D;IACF;AAEQ,IAAA,eAAe,CAAC,GAAa,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;AAEjE,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YAEhB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,EAAE;gBAC5B;YACF;AAEA,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;gBAClC;YACF;AAEA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;gBAClD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtC,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AAC7B,oBAAA,GAAG,CAAC,SAAS,GAAG,YAAY;AAC5B,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7C;AAEA,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC5B,oBAAA,GAAG,CAAC,SAAS,GAAG,WAAW;oBAC3B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;oBAC5B,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;gBAC1F;YACF;QACF;IACF;AACD;AAED,MAAM,YAAY,GAAG,CAAC,IAAwC,KAAW;AACvE,IAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,QAAA,OAAO,WAAW;IACpB;IAEA,OAAO,IAAI,KAAK,WAAW,GAAG,cAAc,GAAG,YAAY;AAC7D,CAAC;;;;"}
1
+ {"version":3,"file":"PhysicsDebugDraw.js","sources":["../../../../src/debug/PhysicsDebugDraw.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  const physicsBuildInfo = Object.freeze({
2
- version: "0.13.0",
3
- revision: "ad2faf3",
2
+ version: "0.14.0",
3
+ revision: "e4d9d55",
4
4
  development: false,
5
5
  });
6
6
 
@@ -7,9 +7,10 @@ export type { CollisionEvent, ContactPoint, SensorEvent } from './events';
7
7
  export type { BodyOptions } from './PhysicsBody';
8
8
  export { PhysicsBody } from './PhysicsBody';
9
9
  export { type PhysicsBuildInfo, physicsBuildInfo } from './physicsBuildInfo';
10
- export type { PhysicsWorldOptions, StaticColliderOptions } from './PhysicsWorld';
10
+ export type { AttachOptions, PhysicsWorldOptions } from './PhysicsWorld';
11
11
  export { PhysicsWorld } from './PhysicsWorld';
12
12
  export type { QueryFilter, RayHit } from './query/QueryEngine';
13
+ export type { AnyShape } from './shapes/AnyShape';
13
14
  export { BoxShape } from './shapes/BoxShape';
14
15
  export { CircleShape } from './shapes/CircleShape';
15
16
  export { PolygonShape } from './shapes/PolygonShape';
@@ -1,7 +1,7 @@
1
1
  import type { Aabb } from '../Aabb';
2
2
  import type { Collider } from '../Collider';
3
3
  import type { PhysicsBody } from '../PhysicsBody';
4
- import type { Shape } from '../shapes/Shape';
4
+ import type { AnyShape } from '../shapes/AnyShape';
5
5
  import type { VectorLike } from '../types';
6
6
  /** A category/mask/group filter applied to a query. Omitting it matches everything. */
7
7
  export type QueryFilter = Partial<{
@@ -47,5 +47,5 @@ export declare class QueryEngine {
47
47
  /** All collider hits along the ray, sorted by distance. Writes into `out` (cleared first) when given. */
48
48
  rayCastAll(origin: VectorLike, direction: VectorLike, filter?: QueryFilter, out?: RayHit[], maxDistance?: number): RayHit[];
49
49
  /** Colliders overlapping `shape` placed at `position`/`angle`. Allocates a fresh array. */
50
- overlapShape(shape: Shape, position: VectorLike, filter?: QueryFilter, angle?: number): Collider[];
50
+ overlapShape(shape: AnyShape, position: VectorLike, filter?: QueryFilter, angle?: number): Collider[];
51
51
  }
@@ -116,6 +116,7 @@ class QueryEngine {
116
116
  return out;
117
117
  }
118
118
  }
119
+ /** Read a flat vertex/normal buffer in-bounds: callers index within 0..count-1. */
119
120
  /** `true` when world point `(px, py)` lies inside `collider`'s shape. */
120
121
  const pointInCollider = (collider, px, py) => {
121
122
  if (!aabbContainsPoint(collider.aabb, px, py)) {
@@ -132,7 +133,11 @@ const pointInCollider = (collider, px, py) => {
132
133
  const normals = collider.worldNormals;
133
134
  const count = collider.shape.count;
134
135
  for (let i = 0; i < count; i++) {
135
- if (normals[i * 2] * (px - verts[i * 2]) + normals[i * 2 + 1] * (py - verts[i * 2 + 1]) > 0) {
136
+ const nx = normals[i * 2];
137
+ const ny = normals[i * 2 + 1];
138
+ const vx = verts[i * 2];
139
+ const vy = verts[i * 2 + 1];
140
+ if (nx * (px - vx) + ny * (py - vy) > 0) {
136
141
  return false;
137
142
  }
138
143
  }
@@ -147,7 +152,8 @@ const rayCastCollider = (collider, ox, oy, dx, dy, maxDistance) => {
147
152
  };
148
153
  const rayCastCircle = (collider, ox, oy, dx, dy, maxDistance) => {
149
154
  const c = collider.worldCenter;
150
- const r = collider.shape.radius;
155
+ // Dispatched only for circle colliders; the fallback is unreachable.
156
+ const r = collider.shape.type === 'circle' ? collider.shape.radius : 0;
151
157
  const mx = ox - c.x;
152
158
  const my = oy - c.y;
153
159
  const b = mx * dx + my * dy;
@@ -176,7 +182,8 @@ const rayCastCircle = (collider, ox, oy, dx, dy, maxDistance) => {
176
182
  const rayCastPolygon = (collider, ox, oy, dx, dy, maxDistance) => {
177
183
  const verts = collider.worldVertices;
178
184
  const normals = collider.worldNormals;
179
- const count = collider.shape.count;
185
+ // Dispatched only for polygon colliders; the fallback is unreachable.
186
+ const count = collider.shape.type === 'polygon' ? collider.shape.count : 0;
180
187
  let tmin = 0;
181
188
  let tmax = maxDistance;
182
189
  let enterNx = 0;
@@ -185,7 +192,9 @@ const rayCastPolygon = (collider, ox, oy, dx, dy, maxDistance) => {
185
192
  for (let i = 0; i < count; i++) {
186
193
  const nx = normals[i * 2];
187
194
  const ny = normals[i * 2 + 1];
188
- const numerator = nx * (verts[i * 2] - ox) + ny * (verts[i * 2 + 1] - oy);
195
+ const vx = verts[i * 2];
196
+ const vy = verts[i * 2 + 1];
197
+ const numerator = nx * (vx - ox) + ny * (vy - oy);
189
198
  const denominator = nx * dx + ny * dy;
190
199
  if (denominator === 0) {
191
200
  // Parallel to this face: if the origin is outside it, the ray misses.