@codexo/exojs-physics 0.13.0 → 0.15.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 +145 -15
- package/dist/esm/PhysicsBody.js +282 -21
- package/dist/esm/PhysicsBody.js.map +1 -1
- package/dist/esm/PhysicsWorld.d.ts +177 -39
- package/dist/esm/PhysicsWorld.js +412 -35
- 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/BindingRegistry.d.ts +1 -2
- package/dist/esm/binding/BindingRegistry.js +2 -2
- package/dist/esm/binding/BindingRegistry.js.map +1 -1
- package/dist/esm/binding/PhysicsBinding.d.ts +7 -18
- package/dist/esm/binding/PhysicsBinding.js +9 -8
- 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 +8 -1
- package/dist/esm/debug/PhysicsDebugDraw.js +26 -2
- package/dist/esm/debug/PhysicsDebugDraw.js.map +1 -1
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/joints/DistanceJoint.d.ts +71 -0
- package/dist/esm/joints/DistanceJoint.js +176 -0
- package/dist/esm/joints/DistanceJoint.js.map +1 -0
- package/dist/esm/joints/Joint.d.ts +25 -0
- package/dist/esm/joints/Joint.js +24 -0
- package/dist/esm/joints/Joint.js.map +1 -0
- package/dist/esm/joints/MouseJoint.d.ts +57 -0
- package/dist/esm/joints/MouseJoint.js +137 -0
- package/dist/esm/joints/MouseJoint.js.map +1 -0
- package/dist/esm/joints/PrismaticJoint.d.ts +85 -0
- package/dist/esm/joints/PrismaticJoint.js +241 -0
- package/dist/esm/joints/PrismaticJoint.js.map +1 -0
- package/dist/esm/joints/RevoluteJoint.d.ts +81 -0
- package/dist/esm/joints/RevoluteJoint.js +217 -0
- package/dist/esm/joints/RevoluteJoint.js.map +1 -0
- package/dist/esm/joints/WeldJoint.d.ts +61 -0
- package/dist/esm/joints/WeldJoint.js +159 -0
- package/dist/esm/joints/WeldJoint.js.map +1 -0
- package/dist/esm/joints/WheelJoint.d.ts +92 -0
- package/dist/esm/joints/WheelJoint.js +256 -0
- package/dist/esm/joints/WheelJoint.js.map +1 -0
- package/dist/esm/math.js +15 -1
- package/dist/esm/math.js.map +1 -1
- package/dist/esm/physicsBuildInfo.js +2 -2
- package/dist/esm/public.d.ts +9 -2
- 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 +490 -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 +3 -3
|
@@ -14,8 +14,16 @@ export interface PhysicsBackend {
|
|
|
14
14
|
readonly contactGraph: ContactGraph;
|
|
15
15
|
/** The latest broad-phase candidate pairs (read-only; for debug draw). */
|
|
16
16
|
readonly candidatePairs: readonly CandidatePair[];
|
|
17
|
-
/** Run one detection pass over `colliders`, refreshing the contact graph. */
|
|
17
|
+
/** Run one detection pass over `colliders`, refreshing the contact graph. Once per frame (TGS reuses the manifolds across sub-steps). */
|
|
18
18
|
detect(colliders: readonly Collider[]): void;
|
|
19
|
+
/** Build the per-frame contact constraints from the solid contacts. `h` is the sub-step duration; the soft factors derive from it plus `contactHertz`/`dampingRatio`. Call once per frame after {@link detect}. */
|
|
20
|
+
prepareSolve(h: number, contactHertz: number, dampingRatio: number): void;
|
|
21
|
+
/** Re-apply the cached warm-start impulses to the contacting bodies (first sub-step only). */
|
|
22
|
+
warmStart(): void;
|
|
23
|
+
/** One velocity pass over the solid contacts. `useBias` selects the main soft-bias pass; `false` is the relax pass. */
|
|
24
|
+
solveVelocities(useBias: boolean): void;
|
|
25
|
+
/** Restitution pass, run once per frame after the sub-step loop. */
|
|
26
|
+
applyRestitution(): void;
|
|
19
27
|
/** Forget any state referencing `collider` (called on destruction). */
|
|
20
28
|
removeCollider(collider: Collider): void;
|
|
21
29
|
/** Release all backend state. */
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { SceneNode } from '@codexo/exojs';
|
|
2
2
|
import type { PhysicsBody } from '../PhysicsBody';
|
|
3
|
-
import type { BindingOptions } from './PhysicsBinding';
|
|
4
3
|
import { PhysicsBinding } from './PhysicsBinding';
|
|
5
4
|
/**
|
|
6
5
|
* Owns the body ↔ node links and writes bound node transforms after each step.
|
|
@@ -9,7 +8,7 @@ import { PhysicsBinding } from './PhysicsBinding';
|
|
|
9
8
|
export declare class BindingRegistry {
|
|
10
9
|
private readonly _bindings;
|
|
11
10
|
/** Link `body` to `node`. Rejects nodes with non-zero skew; runtime scale is ignored. */
|
|
12
|
-
bind(body: PhysicsBody, node: SceneNode
|
|
11
|
+
bind(body: PhysicsBody, node: SceneNode): PhysicsBinding;
|
|
13
12
|
/** Remove the link for `body`, if any. */
|
|
14
13
|
unbind(body: PhysicsBody): void;
|
|
15
14
|
/** Write every bound node's transform from its body. */
|
|
@@ -7,11 +7,11 @@ import { PhysicsBinding } from './PhysicsBinding.js';
|
|
|
7
7
|
class BindingRegistry {
|
|
8
8
|
_bindings = new Map();
|
|
9
9
|
/** Link `body` to `node`. Rejects nodes with non-zero skew; runtime scale is ignored. */
|
|
10
|
-
bind(body, node
|
|
10
|
+
bind(body, node) {
|
|
11
11
|
if (node.skewX !== 0 || node.skewY !== 0) {
|
|
12
12
|
throw new Error(`PhysicsBinding: the bound node has non-zero skew (${node.skewX}°, ${node.skewY}°); skewed nodes are not supported.`);
|
|
13
13
|
}
|
|
14
|
-
const binding = new PhysicsBinding(body, node
|
|
14
|
+
const binding = new PhysicsBinding(body, node);
|
|
15
15
|
this._bindings.set(body, binding);
|
|
16
16
|
binding.sync();
|
|
17
17
|
return binding;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BindingRegistry.js","sources":["../../../../src/binding/BindingRegistry.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"BindingRegistry.js","sources":["../../../../src/binding/BindingRegistry.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA;;;AAGG;MACU,eAAe,CAAA;AACT,IAAA,SAAS,GAAG,IAAI,GAAG,EAA+B;;IAG5D,IAAI,CAAC,IAAiB,EAAE,IAAe,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;AACxC,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,kDAAA,EAAqD,IAAI,CAAC,KAAK,CAAA,GAAA,EAAM,IAAI,CAAC,KAAK,CAAA,mCAAA,CAAqC,CAAC;QACvI;QAEA,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;QAE9C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;QACjC,OAAO,CAAC,IAAI,EAAE;AAEd,QAAA,OAAO,OAAO;IAChB;;AAGO,IAAA,MAAM,CAAC,IAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;IAC7B;;IAGO,IAAI,GAAA;QACT,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE;YAC7C,OAAO,CAAC,IAAI,EAAE;QAChB;IACF;;AAGA,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI;IAC5B;;IAGO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;AACD;;;;"}
|
|
@@ -1,27 +1,16 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type SceneNode } from '@codexo/exojs';
|
|
2
2
|
import type { PhysicsBody } from '../PhysicsBody';
|
|
3
|
-
/** Options for {@link PhysicsWorld.bind}. */
|
|
4
|
-
export interface BindingOptions {
|
|
5
|
-
/**
|
|
6
|
-
* Which way the transform flows. `'body-to-node'` (default) writes the body's
|
|
7
|
-
* transform onto the node each step — for dynamic and kinematic-position
|
|
8
|
-
* bodies. `'node-to-body'` (read the node, drive the body) is reserved for the
|
|
9
|
-
* kinematic-velocity follow-up and currently behaves like `'body-to-node'`.
|
|
10
|
-
*/
|
|
11
|
-
drive?: 'body-to-node' | 'node-to-body';
|
|
12
|
-
}
|
|
13
3
|
/**
|
|
14
4
|
* A link between a {@link PhysicsBody} and a {@link SceneNode}. After each
|
|
15
|
-
* {@link PhysicsWorld.step}, the body's world position
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
5
|
+
* {@link PhysicsWorld.step}, the body's world position **and rotation** are
|
|
6
|
+
* written onto the node (the body's angle is radians; the node's rotation is
|
|
7
|
+
* degrees). The node must be world-space-rooted; runtime scale is ignored and
|
|
8
|
+
* non-zero skew is rejected at bind time.
|
|
19
9
|
*/
|
|
20
10
|
export declare class PhysicsBinding {
|
|
21
11
|
readonly body: PhysicsBody;
|
|
22
12
|
readonly node: SceneNode;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
/** Write the body's current transform onto the bound node. */
|
|
13
|
+
constructor(body: PhysicsBody, node: SceneNode);
|
|
14
|
+
/** Write the body's current transform (position + rotation) onto the bound node. */
|
|
26
15
|
sync(): void;
|
|
27
16
|
}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
+
import { MathUtils } from '@codexo/exojs';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* A link between a {@link PhysicsBody} and a {@link SceneNode}. After each
|
|
3
|
-
* {@link PhysicsWorld.step}, the body's world position
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* {@link PhysicsWorld.step}, the body's world position **and rotation** are
|
|
6
|
+
* written onto the node (the body's angle is radians; the node's rotation is
|
|
7
|
+
* degrees). The node must be world-space-rooted; runtime scale is ignored and
|
|
8
|
+
* non-zero skew is rejected at bind time.
|
|
7
9
|
*/
|
|
8
10
|
class PhysicsBinding {
|
|
9
11
|
body;
|
|
10
12
|
node;
|
|
11
|
-
|
|
12
|
-
constructor(body, node, drive = 'body-to-node') {
|
|
13
|
+
constructor(body, node) {
|
|
13
14
|
this.body = body;
|
|
14
15
|
this.node = node;
|
|
15
|
-
this.drive = drive;
|
|
16
16
|
}
|
|
17
|
-
/** Write the body's current transform onto the bound node. */
|
|
17
|
+
/** Write the body's current transform (position + rotation) onto the bound node. */
|
|
18
18
|
sync() {
|
|
19
19
|
this.node.setPosition(this.body.x, this.body.y);
|
|
20
|
+
this.node.setRotation(MathUtils.radiansToDegrees(this.body.angle));
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhysicsBinding.js","sources":["../../../../src/binding/PhysicsBinding.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PhysicsBinding.js","sources":["../../../../src/binding/PhysicsBinding.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;;;;;AAMG;MACU,cAAc,CAAA;AAEP,IAAA,IAAA;AACA,IAAA,IAAA;IAFlB,WAAA,CACkB,IAAiB,EACjB,IAAe,EAAA;QADf,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,IAAI,GAAJ,IAAI;IACnB;;IAGI,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE;AACD;;;;"}
|
|
@@ -10,5 +10,6 @@ import type { BroadPhase, CandidatePair } from './BroadPhase';
|
|
|
10
10
|
*/
|
|
11
11
|
export declare class SweepAndPrune implements BroadPhase {
|
|
12
12
|
private readonly _sorted;
|
|
13
|
+
private readonly _pairPool;
|
|
13
14
|
computePairs(colliders: readonly Collider[], out: CandidatePair[]): CandidatePair[];
|
|
14
15
|
}
|
|
@@ -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":"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"}
|
|
@@ -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 {
|
|
@@ -16,6 +17,10 @@ export interface PhysicsDebugDrawOptions {
|
|
|
16
17
|
drawCenters?: boolean;
|
|
17
18
|
/** Broad-phase candidate links between AABB-overlapping colliders. Default `false`. */
|
|
18
19
|
drawBroadphase?: boolean;
|
|
20
|
+
/** Tint sleeping bodies distinctly (applies to the shape outline). Default `false`. */
|
|
21
|
+
drawSleeping?: boolean;
|
|
22
|
+
/** Lines connecting the bodies of each joint. Default `false`. */
|
|
23
|
+
drawJoints?: boolean;
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
21
26
|
* `DebugLayer` that visualises a {@link PhysicsWorld} — shapes, AABBs, contacts,
|
|
@@ -36,7 +41,9 @@ export declare class PhysicsDebugDraw extends DebugLayer {
|
|
|
36
41
|
get viewMode(): DebugLayerViewMode;
|
|
37
42
|
update(): void;
|
|
38
43
|
render(backend: RenderBackend): void;
|
|
44
|
+
private _renderJoints;
|
|
39
45
|
destroy(): void;
|
|
46
|
+
private _outlineColor;
|
|
40
47
|
private _strokeShape;
|
|
41
48
|
private _strokeAabb;
|
|
42
49
|
private _strokeCircle;
|