@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.
- package/README.md +17 -10
- package/dist/esm/Collider.d.ts +17 -6
- package/dist/esm/Collider.js +28 -6
- package/dist/esm/Collider.js.map +1 -1
- package/dist/esm/ContactGraph.d.ts +49 -3
- package/dist/esm/ContactGraph.js +132 -44
- package/dist/esm/ContactGraph.js.map +1 -1
- package/dist/esm/PhysicsBody.d.ts +113 -15
- package/dist/esm/PhysicsBody.js +224 -21
- package/dist/esm/PhysicsBody.js.map +1 -1
- package/dist/esm/PhysicsWorld.d.ts +107 -35
- package/dist/esm/PhysicsWorld.js +136 -31
- package/dist/esm/PhysicsWorld.js.map +1 -1
- package/dist/esm/backend/NativePhysicsBackend.d.ts +5 -0
- package/dist/esm/backend/NativePhysicsBackend.js +14 -0
- package/dist/esm/backend/NativePhysicsBackend.js.map +1 -1
- package/dist/esm/backend/PhysicsBackend.d.ts +9 -1
- package/dist/esm/binding/PhysicsBinding.d.ts +6 -6
- package/dist/esm/binding/PhysicsBinding.js +8 -5
- package/dist/esm/binding/PhysicsBinding.js.map +1 -1
- package/dist/esm/broadphase/SweepAndPrune.d.ts +1 -0
- package/dist/esm/broadphase/SweepAndPrune.js +32 -3
- package/dist/esm/broadphase/SweepAndPrune.js.map +1 -1
- package/dist/esm/collision/CollisionProxy.d.ts +2 -2
- package/dist/esm/collision/narrowphase.js +91 -38
- package/dist/esm/collision/narrowphase.js.map +1 -1
- package/dist/esm/debug/PhysicsDebugDraw.d.ts +2 -1
- package/dist/esm/debug/PhysicsDebugDraw.js +2 -1
- package/dist/esm/debug/PhysicsDebugDraw.js.map +1 -1
- package/dist/esm/physicsBuildInfo.js +2 -2
- package/dist/esm/public.d.ts +2 -1
- package/dist/esm/query/QueryEngine.d.ts +2 -2
- package/dist/esm/query/QueryEngine.js +13 -4
- package/dist/esm/query/QueryEngine.js.map +1 -1
- package/dist/esm/shapes/AnyShape.d.ts +9 -0
- package/dist/esm/shapes/CircleShape.d.ts +1 -2
- package/dist/esm/shapes/CircleShape.js.map +1 -1
- package/dist/esm/shapes/PolygonShape.d.ts +1 -2
- package/dist/esm/shapes/PolygonShape.js +45 -17
- package/dist/esm/shapes/PolygonShape.js.map +1 -1
- package/dist/esm/shapes/index.d.ts +1 -0
- package/dist/esm/solver/ContactSolver.d.ts +87 -0
- package/dist/esm/solver/ContactSolver.js +483 -0
- package/dist/esm/solver/ContactSolver.js.map +1 -0
- package/dist/esm/sort.d.ts +17 -0
- package/dist/esm/sort.js +54 -0
- package/dist/esm/sort.js.map +1 -0
- 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
|
|
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
|
-
|
|
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
|
|
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":"
|
|
1
|
+
{"version":3,"file":"SweepAndPrune.js","sources":["../../../../src/broadphase/SweepAndPrune.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;;;;;;AAOG;MACU,aAAa,CAAA;IACP,OAAO,GAAe,EAAE;;;;;IAKxB,SAAS,GAAoB,EAAE;IAEzC,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;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS;QAC3B,IAAI,SAAS,GAAG,CAAC;AAEjB,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACvB;AAEA,QAAA,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;AAE3B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;AAE3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;;;AAG9B,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAEnB,YAAA,IAAI,CAAC,KAAK,SAAS,EAAE;gBACnB;YACF;AAEA,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;AAEnB,gBAAA,IAAI,CAAC,KAAK,SAAS,EAAE;oBACnB;gBACF;AAEA,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,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AAC9B,gBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AAC9B,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAE1B,gBAAA,IAAI,IAAI,KAAK,SAAS,EAAE;oBACtB,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;AACvB,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjB;qBAAO;AACL,oBAAA,IAAI,CAAC,CAAC,GAAG,EAAE;AACX,oBAAA,IAAI,CAAC,CAAC,GAAG,EAAE;gBACb;AAEA,gBAAA,SAAS,EAAE;AACX,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAChB;QACF;AAEA,QAAA,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;AAE1B,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,5 +1,5 @@
|
|
|
1
1
|
import type { Mutable2D } from '../math';
|
|
2
|
-
import type {
|
|
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:
|
|
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
|
-
|
|
18
|
-
|
|
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
|
-
|
|
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 = -
|
|
83
|
-
ny = -
|
|
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 : -
|
|
107
|
-
ny = d > eps ? -dy / d : -
|
|
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 : -
|
|
122
|
-
ny = d > eps ? -dy / d : -
|
|
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 = -
|
|
131
|
-
ny = -
|
|
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
|
-
|
|
157
|
-
|
|
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
|
|
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 =
|
|
179
|
-
sy =
|
|
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
|
-
|
|
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
|
|
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 *
|
|
216
|
-
const d2 = nx *
|
|
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(
|
|
255
|
+
copyClip(in0, count === 0 ? output[0] : output[1]);
|
|
256
|
+
count++;
|
|
219
257
|
}
|
|
220
258
|
if (d2 <= 0) {
|
|
221
|
-
copyClip(
|
|
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[
|
|
226
|
-
target.x =
|
|
227
|
-
target.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 =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
302
|
-
point
|
|
303
|
-
point.
|
|
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,
|
|
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
|
-
|
|
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":"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"}
|
|
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
|
|
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
|
-
|
|
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":";;;;;;
|
|
1
|
+
{"version":3,"file":"PhysicsDebugDraw.js","sources":["../../../../src/debug/PhysicsDebugDraw.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/esm/public.d.ts
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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.
|