@codexo/exojs-physics 0.15.2 → 0.16.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 +51 -23
- package/dist/esm/Aabb.d.ts +6 -10
- package/dist/esm/Aabb.d.ts.map +1 -0
- package/dist/esm/Aabb.js +9 -5
- package/dist/esm/Aabb.js.map +1 -1
- package/dist/esm/Collider.d.ts +62 -10
- package/dist/esm/Collider.d.ts.map +1 -0
- package/dist/esm/Collider.js +263 -157
- package/dist/esm/Collider.js.map +1 -1
- package/dist/esm/ContactGraph.d.ts +51 -5
- package/dist/esm/ContactGraph.d.ts.map +1 -0
- package/dist/esm/ContactGraph.js +282 -223
- package/dist/esm/ContactGraph.js.map +1 -1
- package/dist/esm/ContactModifier.d.ts +85 -0
- package/dist/esm/ContactModifier.d.ts.map +1 -0
- package/dist/esm/ContactModifier.js +49 -0
- package/dist/esm/ContactModifier.js.map +1 -0
- package/dist/esm/PhysicsBody.d.ts +56 -22
- package/dist/esm/PhysicsBody.d.ts.map +1 -0
- package/dist/esm/PhysicsBody.js +461 -443
- package/dist/esm/PhysicsBody.js.map +1 -1
- package/dist/esm/PhysicsWorld.d.ts +276 -43
- package/dist/esm/PhysicsWorld.d.ts.map +1 -0
- package/dist/esm/PhysicsWorld.js +890 -626
- package/dist/esm/PhysicsWorld.js.map +1 -1
- package/dist/esm/TimeStepper.d.ts +3 -2
- package/dist/esm/TimeStepper.d.ts.map +1 -0
- package/dist/esm/TimeStepper.js +56 -67
- package/dist/esm/TimeStepper.js.map +1 -1
- package/dist/esm/backend/NativePhysicsBackend.d.ts +8 -4
- package/dist/esm/backend/NativePhysicsBackend.d.ts.map +1 -0
- package/dist/esm/backend/NativePhysicsBackend.js +48 -41
- package/dist/esm/backend/NativePhysicsBackend.js.map +1 -1
- package/dist/esm/backend/PhysicsBackend.d.ts +9 -2
- package/dist/esm/backend/PhysicsBackend.d.ts.map +1 -0
- package/dist/esm/binding/BindingRegistry.d.ts +25 -4
- package/dist/esm/binding/BindingRegistry.d.ts.map +1 -0
- package/dist/esm/binding/BindingRegistry.js +70 -36
- package/dist/esm/binding/BindingRegistry.js.map +1 -1
- package/dist/esm/binding/PhysicsBinding.d.ts +22 -5
- package/dist/esm/binding/PhysicsBinding.d.ts.map +1 -0
- package/dist/esm/binding/PhysicsBinding.js +46 -21
- package/dist/esm/binding/PhysicsBinding.js.map +1 -1
- package/dist/esm/broadphase/AabbTreeBroadPhase.d.ts +68 -0
- package/dist/esm/broadphase/AabbTreeBroadPhase.d.ts.map +1 -0
- package/dist/esm/broadphase/AabbTreeBroadPhase.js +149 -0
- package/dist/esm/broadphase/AabbTreeBroadPhase.js.map +1 -0
- package/dist/esm/broadphase/BroadPhase.d.ts +7 -4
- package/dist/esm/broadphase/BroadPhase.d.ts.map +1 -0
- package/dist/esm/broadphase/index.d.ts +2 -1
- package/dist/esm/broadphase/index.d.ts.map +1 -0
- package/dist/esm/collision/CollisionProxy.d.ts +3 -2
- package/dist/esm/collision/CollisionProxy.d.ts.map +1 -0
- package/dist/esm/collision/Manifold.d.ts +5 -4
- package/dist/esm/collision/Manifold.d.ts.map +1 -0
- package/dist/esm/collision/Manifold.js +34 -25
- package/dist/esm/collision/Manifold.js.map +1 -1
- package/dist/esm/collision/chainAdjacency.d.ts +29 -0
- package/dist/esm/collision/chainAdjacency.d.ts.map +1 -0
- package/dist/esm/collision/chainAdjacency.js +44 -0
- package/dist/esm/collision/chainAdjacency.js.map +1 -0
- package/dist/esm/collision/dispatch.d.ts +35 -0
- package/dist/esm/collision/dispatch.d.ts.map +1 -0
- package/dist/esm/collision/dispatch.js +58 -0
- package/dist/esm/collision/dispatch.js.map +1 -0
- package/dist/esm/collision/index.d.ts +2 -0
- package/dist/esm/collision/index.d.ts.map +1 -0
- package/dist/esm/collision/narrowphase.d.ts +5 -2
- package/dist/esm/collision/narrowphase.d.ts.map +1 -0
- package/dist/esm/collision/narrowphase.js +524 -399
- package/dist/esm/collision/narrowphase.js.map +1 -1
- package/dist/esm/collision/segments.d.ts +19 -0
- package/dist/esm/collision/segments.d.ts.map +1 -0
- package/dist/esm/collision/segments.js +36 -0
- package/dist/esm/collision/segments.js.map +1 -0
- package/dist/esm/collision/sweep.d.ts +35 -0
- package/dist/esm/collision/sweep.d.ts.map +1 -0
- package/dist/esm/collision/sweep.js +437 -0
- package/dist/esm/collision/sweep.js.map +1 -0
- package/dist/esm/debug/PhysicsDebugDraw.d.ts +23 -4
- package/dist/esm/debug/PhysicsDebugDraw.d.ts.map +1 -0
- package/dist/esm/debug/PhysicsDebugDraw.js +230 -188
- package/dist/esm/debug/PhysicsDebugDraw.js.map +1 -1
- package/dist/esm/debug/index.d.ts +1 -0
- package/dist/esm/debug/index.d.ts.map +1 -0
- package/dist/esm/debug/index.js +3 -2
- package/dist/esm/events.d.ts +1 -0
- package/dist/esm/events.d.ts.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +24 -19
- package/dist/esm/joints/DistanceJoint.d.ts +4 -3
- package/dist/esm/joints/DistanceJoint.d.ts.map +1 -0
- package/dist/esm/joints/DistanceJoint.js +160 -172
- package/dist/esm/joints/DistanceJoint.js.map +1 -1
- package/dist/esm/joints/Joint.d.ts +5 -4
- package/dist/esm/joints/Joint.d.ts.map +1 -0
- package/dist/esm/joints/Joint.js +23 -21
- package/dist/esm/joints/Joint.js.map +1 -1
- package/dist/esm/joints/MouseJoint.d.ts +8 -7
- package/dist/esm/joints/MouseJoint.d.ts.map +1 -0
- package/dist/esm/joints/MouseJoint.js +132 -133
- package/dist/esm/joints/MouseJoint.js.map +1 -1
- package/dist/esm/joints/PrismaticJoint.d.ts +5 -4
- package/dist/esm/joints/PrismaticJoint.d.ts.map +1 -0
- package/dist/esm/joints/PrismaticJoint.js +211 -240
- package/dist/esm/joints/PrismaticJoint.js.map +1 -1
- package/dist/esm/joints/RevoluteJoint.d.ts +4 -3
- package/dist/esm/joints/RevoluteJoint.d.ts.map +1 -0
- package/dist/esm/joints/RevoluteJoint.js +191 -213
- package/dist/esm/joints/RevoluteJoint.js.map +1 -1
- package/dist/esm/joints/WeldJoint.d.ts +3 -2
- package/dist/esm/joints/WeldJoint.d.ts.map +1 -0
- package/dist/esm/joints/WeldJoint.js +156 -152
- package/dist/esm/joints/WeldJoint.js.map +1 -1
- package/dist/esm/joints/WheelJoint.d.ts +4 -3
- package/dist/esm/joints/WheelJoint.d.ts.map +1 -0
- package/dist/esm/joints/WheelJoint.js +228 -255
- package/dist/esm/joints/WheelJoint.js.map +1 -1
- package/dist/esm/math.d.ts +6 -9
- package/dist/esm/math.d.ts.map +1 -0
- package/dist/esm/math.js +37 -39
- package/dist/esm/math.js.map +1 -1
- package/dist/esm/physicsBuildInfo.d.ts +1 -0
- package/dist/esm/physicsBuildInfo.d.ts.map +1 -0
- package/dist/esm/physicsBuildInfo.js +6 -4
- package/dist/esm/physicsBuildInfo.js.map +1 -1
- package/dist/esm/public.d.ts +8 -3
- package/dist/esm/public.d.ts.map +1 -0
- package/dist/esm/query/QueryEngine.d.ts +56 -12
- package/dist/esm/query/QueryEngine.d.ts.map +1 -0
- package/dist/esm/query/QueryEngine.js +494 -237
- package/dist/esm/query/QueryEngine.js.map +1 -1
- package/dist/esm/query/SpatialIndex.d.ts +34 -0
- package/dist/esm/query/SpatialIndex.d.ts.map +1 -0
- package/dist/esm/shapes/AnyShape.d.ts +9 -4
- package/dist/esm/shapes/AnyShape.d.ts.map +1 -0
- package/dist/esm/shapes/BoxShape.d.ts +2 -1
- package/dist/esm/shapes/BoxShape.d.ts.map +1 -0
- package/dist/esm/shapes/BoxShape.js +37 -25
- package/dist/esm/shapes/BoxShape.js.map +1 -1
- package/dist/esm/shapes/CapsuleShape.d.ts +30 -0
- package/dist/esm/shapes/CapsuleShape.d.ts.map +1 -0
- package/dist/esm/shapes/CapsuleShape.js +88 -0
- package/dist/esm/shapes/CapsuleShape.js.map +1 -0
- package/dist/esm/shapes/ChainEdgeShape.d.ts +30 -0
- package/dist/esm/shapes/ChainEdgeShape.d.ts.map +1 -0
- package/dist/esm/shapes/ChainEdgeShape.js +66 -0
- package/dist/esm/shapes/ChainEdgeShape.js.map +1 -0
- package/dist/esm/shapes/ChainShape.d.ts +52 -0
- package/dist/esm/shapes/ChainShape.d.ts.map +1 -0
- package/dist/esm/shapes/ChainShape.js +85 -0
- package/dist/esm/shapes/ChainShape.js.map +1 -0
- package/dist/esm/shapes/CircleShape.d.ts +3 -4
- package/dist/esm/shapes/CircleShape.d.ts.map +1 -0
- package/dist/esm/shapes/CircleShape.js +27 -26
- package/dist/esm/shapes/CircleShape.js.map +1 -1
- package/dist/esm/shapes/PolygonShape.d.ts +7 -8
- package/dist/esm/shapes/PolygonShape.d.ts.map +1 -0
- package/dist/esm/shapes/PolygonShape.js +131 -162
- package/dist/esm/shapes/PolygonShape.js.map +1 -1
- package/dist/esm/shapes/SegmentShape.d.ts +31 -0
- package/dist/esm/shapes/SegmentShape.d.ts.map +1 -0
- package/dist/esm/shapes/SegmentShape.js +62 -0
- package/dist/esm/shapes/SegmentShape.js.map +1 -0
- package/dist/esm/shapes/Shape.d.ts +28 -17
- package/dist/esm/shapes/Shape.d.ts.map +1 -0
- package/dist/esm/shapes/Shape.js +12 -13
- package/dist/esm/shapes/Shape.js.map +1 -1
- package/dist/esm/shapes/convexParts.d.ts +21 -0
- package/dist/esm/shapes/convexParts.d.ts.map +1 -0
- package/dist/esm/shapes/convexParts.js +26 -0
- package/dist/esm/shapes/convexParts.js.map +1 -0
- package/dist/esm/shapes/decompose.d.ts +24 -0
- package/dist/esm/shapes/decompose.d.ts.map +1 -0
- package/dist/esm/shapes/decompose.js +272 -0
- package/dist/esm/shapes/decompose.js.map +1 -0
- package/dist/esm/shapes/index.d.ts +4 -0
- package/dist/esm/shapes/index.d.ts.map +1 -0
- package/dist/esm/solver/ContactSolver.d.ts +12 -5
- package/dist/esm/solver/ContactSolver.d.ts.map +1 -0
- package/dist/esm/solver/ContactSolver.js +425 -471
- package/dist/esm/solver/ContactSolver.js.map +1 -1
- package/dist/esm/solver/tolerances.d.ts +34 -0
- package/dist/esm/solver/tolerances.d.ts.map +1 -0
- package/dist/esm/solver/tolerances.js +38 -0
- package/dist/esm/solver/tolerances.js.map +1 -0
- package/dist/esm/sort.d.ts +5 -4
- package/dist/esm/sort.d.ts.map +1 -0
- package/dist/esm/sort.js +41 -51
- package/dist/esm/sort.js.map +1 -1
- package/dist/esm/types.d.ts +4 -8
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +15 -17
- package/dist/esm/types.js.map +1 -1
- package/package.json +6 -6
- package/dist/esm/broadphase/SweepAndPrune.d.ts +0 -15
- package/dist/esm/broadphase/SweepAndPrune.js +0 -77
- package/dist/esm/broadphase/SweepAndPrune.js.map +0 -1
- package/dist/esm/debug/index.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
package/dist/esm/math.js
CHANGED
|
@@ -1,62 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
// precomputed `sin`/`cos` pair so the hot collision paths never call the
|
|
3
|
-
// trigonometric functions per vertex. `Mutable2D` is a tiny `{ x, y }` sink to
|
|
4
|
-
// keep the rotate/transform helpers allocation-free at their call sites.
|
|
1
|
+
//#region src/math.ts
|
|
5
2
|
/** Create a transform from a position and angle (radians). */
|
|
6
3
|
const createTransform = (x = 0, y = 0, angle = 0) => ({
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
x,
|
|
5
|
+
y,
|
|
6
|
+
angle,
|
|
7
|
+
sin: Math.sin(angle),
|
|
8
|
+
cos: Math.cos(angle)
|
|
12
9
|
});
|
|
13
10
|
/** Set a transform in place, refreshing sin/cos only when the angle changes. */
|
|
14
11
|
const setTransform = (transform, x, y, angle) => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
transform.x = x;
|
|
13
|
+
transform.y = y;
|
|
14
|
+
if (transform.angle !== angle) {
|
|
15
|
+
transform.angle = angle;
|
|
16
|
+
transform.sin = Math.sin(angle);
|
|
17
|
+
transform.cos = Math.cos(angle);
|
|
18
|
+
}
|
|
19
|
+
return transform;
|
|
23
20
|
};
|
|
24
21
|
/** Rotate and translate a local point by `transform`, writing into `out`. */
|
|
25
22
|
const applyTransform = (transform, x, y, out) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
out.x = transform.cos * x - transform.sin * y + transform.x;
|
|
24
|
+
out.y = transform.sin * x + transform.cos * y + transform.y;
|
|
25
|
+
return out;
|
|
29
26
|
};
|
|
30
27
|
/** Rotate a local direction by `transform` (no translation), writing into `out`. */
|
|
31
28
|
const applyRotation = (transform, x, y, out) => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
out.x = transform.cos * x - transform.sin * y;
|
|
30
|
+
out.y = transform.sin * x + transform.cos * y;
|
|
31
|
+
return out;
|
|
35
32
|
};
|
|
36
33
|
/** Map a world point into `transform`'s local frame, writing into `out`. */
|
|
37
34
|
const applyInverseTransform = (transform, x, y, out) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
const dx = x - transform.x;
|
|
36
|
+
const dy = y - transform.y;
|
|
37
|
+
out.x = transform.cos * dx + transform.sin * dy;
|
|
38
|
+
out.y = -transform.sin * dx + transform.cos * dy;
|
|
39
|
+
return out;
|
|
43
40
|
};
|
|
44
41
|
/** Map a world direction into `transform`'s local frame, writing into `out`. */
|
|
45
42
|
const applyInverseRotation = (transform, x, y, out) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
out.x = transform.cos * x + transform.sin * y;
|
|
44
|
+
out.y = -transform.sin * x + transform.cos * y;
|
|
45
|
+
return out;
|
|
49
46
|
};
|
|
50
47
|
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
* Compose `world = body ∘ local` into `out`. The local transform is expressed
|
|
49
|
+
* in the body frame (a collider's offset + local rotation); the result is the
|
|
50
|
+
* collider's world transform.
|
|
51
|
+
*/
|
|
55
52
|
const composeTransforms = (body, local, out) => {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
const x = body.cos * local.x - body.sin * local.y + body.x;
|
|
54
|
+
const y = body.sin * local.x + body.cos * local.y + body.y;
|
|
55
|
+
return setTransform(out, x, y, body.angle + local.angle);
|
|
59
56
|
};
|
|
60
57
|
|
|
58
|
+
//#endregion
|
|
61
59
|
export { applyInverseRotation, applyInverseTransform, applyRotation, applyTransform, composeTransforms, createTransform, setTransform };
|
|
62
|
-
//# sourceMappingURL=math.js.map
|
|
60
|
+
//# sourceMappingURL=math.js.map
|
package/dist/esm/math.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","sources":["
|
|
1
|
+
{"version":3,"file":"math.js","names":[],"sources":["../../src/math.ts"],"sourcesContent":["// Internal rigid-transform and angle helpers. Physics stores rotations as a\n// precomputed `sin`/`cos` pair so the hot collision paths never call the\n// trigonometric functions per vertex. The rotate/transform helpers write into a\n// caller-supplied `PointLike` sink so they allocate nothing at their call sites.\n\nimport type { PointLike } from '@codexo/exojs';\n\n/** A rigid 2D transform: translation plus the precomputed sin/cos of `angle`. */\nexport interface Transform {\n x: number;\n y: number;\n /** Rotation in radians. */\n angle: number;\n sin: number;\n cos: number;\n}\n\n/** Create a transform from a position and angle (radians). */\nexport const createTransform = (x = 0, y = 0, angle = 0): Transform => ({\n x,\n y,\n angle,\n sin: Math.sin(angle),\n cos: Math.cos(angle),\n});\n\n/** Set a transform in place, refreshing sin/cos only when the angle changes. */\nexport const setTransform = (transform: Transform, x: number, y: number, angle: number): Transform => {\n transform.x = x;\n transform.y = y;\n\n if (transform.angle !== angle) {\n transform.angle = angle;\n transform.sin = Math.sin(angle);\n transform.cos = Math.cos(angle);\n }\n\n return transform;\n};\n\n/** Rotate and translate a local point by `transform`, writing into `out`. */\nexport const applyTransform = (transform: Transform, x: number, y: number, out: PointLike): PointLike => {\n out.x = transform.cos * x - transform.sin * y + transform.x;\n out.y = transform.sin * x + transform.cos * y + transform.y;\n\n return out;\n};\n\n/** Rotate a local direction by `transform` (no translation), writing into `out`. */\nexport const applyRotation = (transform: Transform, x: number, y: number, out: PointLike): PointLike => {\n out.x = transform.cos * x - transform.sin * y;\n out.y = transform.sin * x + transform.cos * y;\n\n return out;\n};\n\n/** Map a world point into `transform`'s local frame, writing into `out`. */\nexport const applyInverseTransform = (transform: Transform, x: number, y: number, out: PointLike): PointLike => {\n const dx = x - transform.x;\n const dy = y - transform.y;\n\n out.x = transform.cos * dx + transform.sin * dy;\n out.y = -transform.sin * dx + transform.cos * dy;\n\n return out;\n};\n\n/** Map a world direction into `transform`'s local frame, writing into `out`. */\nexport const applyInverseRotation = (transform: Transform, x: number, y: number, out: PointLike): PointLike => {\n out.x = transform.cos * x + transform.sin * y;\n out.y = -transform.sin * x + transform.cos * y;\n\n return out;\n};\n\n/**\n * Compose `world = body ∘ local` into `out`. The local transform is expressed\n * in the body frame (a collider's offset + local rotation); the result is the\n * collider's world transform.\n */\nexport const composeTransforms = (body: Transform, local: Transform, out: Transform): Transform => {\n const x = body.cos * local.x - body.sin * local.y + body.x;\n const y = body.sin * local.x + body.cos * local.y + body.y;\n\n return setTransform(out, x, y, body.angle + local.angle);\n};\n"],"mappings":";;AAkBA,MAAa,mBAAmB,IAAI,GAAG,IAAI,GAAG,QAAQ,OAAkB;CACtE;CACA;CACA;CACA,KAAK,KAAK,IAAI,KAAK;CACnB,KAAK,KAAK,IAAI,KAAK;AACrB;;AAGA,MAAa,gBAAgB,WAAsB,GAAW,GAAW,UAA6B;CACpG,UAAU,IAAI;CACd,UAAU,IAAI;CAEd,IAAI,UAAU,UAAU,OAAO;EAC7B,UAAU,QAAQ;EAClB,UAAU,MAAM,KAAK,IAAI,KAAK;EAC9B,UAAU,MAAM,KAAK,IAAI,KAAK;CAChC;CAEA,OAAO;AACT;;AAGA,MAAa,kBAAkB,WAAsB,GAAW,GAAW,QAA8B;CACvG,IAAI,IAAI,UAAU,MAAM,IAAI,UAAU,MAAM,IAAI,UAAU;CAC1D,IAAI,IAAI,UAAU,MAAM,IAAI,UAAU,MAAM,IAAI,UAAU;CAE1D,OAAO;AACT;;AAGA,MAAa,iBAAiB,WAAsB,GAAW,GAAW,QAA8B;CACtG,IAAI,IAAI,UAAU,MAAM,IAAI,UAAU,MAAM;CAC5C,IAAI,IAAI,UAAU,MAAM,IAAI,UAAU,MAAM;CAE5C,OAAO;AACT;;AAGA,MAAa,yBAAyB,WAAsB,GAAW,GAAW,QAA8B;CAC9G,MAAM,KAAK,IAAI,UAAU;CACzB,MAAM,KAAK,IAAI,UAAU;CAEzB,IAAI,IAAI,UAAU,MAAM,KAAK,UAAU,MAAM;CAC7C,IAAI,IAAI,CAAC,UAAU,MAAM,KAAK,UAAU,MAAM;CAE9C,OAAO;AACT;;AAGA,MAAa,wBAAwB,WAAsB,GAAW,GAAW,QAA8B;CAC7G,IAAI,IAAI,UAAU,MAAM,IAAI,UAAU,MAAM;CAC5C,IAAI,IAAI,CAAC,UAAU,MAAM,IAAI,UAAU,MAAM;CAE7C,OAAO;AACT;;;;;;AAOA,MAAa,qBAAqB,MAAiB,OAAkB,QAA8B;CACjG,MAAM,IAAI,KAAK,MAAM,MAAM,IAAI,KAAK,MAAM,MAAM,IAAI,KAAK;CACzD,MAAM,IAAI,KAAK,MAAM,MAAM,IAAI,KAAK,MAAM,MAAM,IAAI,KAAK;CAEzD,OAAO,aAAa,KAAK,GAAG,GAAG,KAAK,QAAQ,MAAM,KAAK;AACzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physicsBuildInfo.d.ts","sourceRoot":"","sources":["../../src/physicsBuildInfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,gBAAgB,EAAE,gBAI7B,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
//#region src/physicsBuildInfo.ts
|
|
1
2
|
const physicsBuildInfo = Object.freeze({
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
version: "0.16.0",
|
|
4
|
+
revision: "3a59179",
|
|
5
|
+
development: false
|
|
5
6
|
});
|
|
6
7
|
|
|
8
|
+
//#endregion
|
|
7
9
|
export { physicsBuildInfo };
|
|
8
|
-
//# sourceMappingURL=physicsBuildInfo.js.map
|
|
10
|
+
//# sourceMappingURL=physicsBuildInfo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physicsBuildInfo.js","sources":["
|
|
1
|
+
{"version":3,"file":"physicsBuildInfo.js","names":[],"sources":["../../src/physicsBuildInfo.ts"],"sourcesContent":["/**\n * Immutable compile-time build metadata for `@codexo/exojs-physics`.\n *\n * `development` mirrors the `__DEV__` compile-time constant and is statically\n * replaced before tree shaking. `version` is the exact `package.json` version\n * of the Physics package at build time. `revision` is the short source-control\n * revision (appended with `-dirty` when uncommitted changes are present) or\n * `\"unknown\"` when no revision information is available.\n */\nexport interface PhysicsBuildInfo {\n readonly version: string;\n readonly revision: string;\n readonly development: boolean;\n}\n\nexport const physicsBuildInfo: PhysicsBuildInfo = Object.freeze({\n version: __VERSION__,\n revision: __REVISION__,\n development: __DEV__,\n});\n"],"mappings":";AAeA,MAAa,mBAAqC,OAAO,OAAO;CAC9D;CACA;CACA;AACF,CAAC"}
|
package/dist/esm/public.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export type { Aabb } from './Aabb';
|
|
2
1
|
export { PhysicsBinding } from './binding/PhysicsBinding';
|
|
3
2
|
export type { ColliderOptions } from './Collider';
|
|
4
3
|
export { Collider } from './Collider';
|
|
4
|
+
export type { ContactModifier, ContactModifierContext } from './ContactModifier';
|
|
5
5
|
export type { CollisionEvent, ContactPoint, SensorEvent } from './events';
|
|
6
6
|
export { DistanceJoint, type DistanceJointOptions } from './joints/DistanceJoint';
|
|
7
7
|
export { Joint } from './joints/Joint';
|
|
@@ -18,11 +18,16 @@ export { PhysicsWorld } from './PhysicsWorld';
|
|
|
18
18
|
export type { QueryFilter, RayHit } from './query/QueryEngine';
|
|
19
19
|
export type { AnyShape } from './shapes/AnyShape';
|
|
20
20
|
export { BoxShape } from './shapes/BoxShape';
|
|
21
|
+
export { CapsuleShape } from './shapes/CapsuleShape';
|
|
22
|
+
export { ChainShape, type ChainShapeOptions } from './shapes/ChainShape';
|
|
21
23
|
export { CircleShape } from './shapes/CircleShape';
|
|
24
|
+
export { toConvexPolygonShapes } from './shapes/convexParts';
|
|
22
25
|
export { PolygonShape } from './shapes/PolygonShape';
|
|
23
|
-
export
|
|
26
|
+
export { SegmentShape } from './shapes/SegmentShape';
|
|
27
|
+
export type { ShapeMassProperties, ShapeType } from './shapes/Shape';
|
|
24
28
|
export { Shape } from './shapes/Shape';
|
|
25
29
|
export type { TimeStepperOptions } from './TimeStepper';
|
|
26
30
|
export { TimeStepper } from './TimeStepper';
|
|
27
|
-
export type { BodyType, CollisionFilter
|
|
31
|
+
export type { BodyType, CollisionFilter } from './types';
|
|
28
32
|
export { defaultFilter, shouldCollide } from './types';
|
|
33
|
+
//# sourceMappingURL=public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/public.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AabbLike, PointLike } from '@codexo/exojs';
|
|
2
2
|
import type { Collider } from '../Collider';
|
|
3
3
|
import type { PhysicsBody } from '../PhysicsBody';
|
|
4
4
|
import type { AnyShape } from '../shapes/AnyShape';
|
|
5
|
-
import type {
|
|
5
|
+
import type { SpatialIndex } from './SpatialIndex';
|
|
6
6
|
/** A category/mask/group filter applied to a query. Omitting it matches everything. */
|
|
7
7
|
export type QueryFilter = Partial<{
|
|
8
8
|
category: number;
|
|
@@ -31,21 +31,65 @@ export interface RayHit {
|
|
|
31
31
|
* reference to the world's collider array (kept world-synchronised on every
|
|
32
32
|
* body move), so queries always see current placements. Array-returning queries
|
|
33
33
|
* follow the three explicit allocation forms: fresh array, caller-owned `out`,
|
|
34
|
-
* or an allocation-free callback
|
|
34
|
+
* or an allocation-free callback - never a hidden shared buffer.
|
|
35
|
+
*
|
|
36
|
+
* The engine scans the geometry the broad phase holds, which for a chain
|
|
37
|
+
* collider is its per-edge proxies. Every result is reported as the authored
|
|
38
|
+
* collider, and an overlap query reports a chain once however many of its edges
|
|
39
|
+
* it touches. A ray still reports one hit per edge it crosses, because those are
|
|
40
|
+
* distinct intersections.
|
|
35
41
|
*/
|
|
36
42
|
export declare class QueryEngine {
|
|
37
43
|
private readonly _colliders;
|
|
38
|
-
|
|
44
|
+
private readonly _spatialIndex;
|
|
45
|
+
private readonly _scratchHits;
|
|
46
|
+
private readonly _scratchHitsForEach;
|
|
47
|
+
/** Chains already reported by the running `forEachAabbHit`, so one chain is one callback. */
|
|
48
|
+
private readonly _scratchSeenForEach;
|
|
49
|
+
private readonly _scratchAabb;
|
|
50
|
+
constructor(colliders: readonly Collider[], spatialIndex?: SpatialIndex);
|
|
51
|
+
/**
|
|
52
|
+
* Colliders to scan for a query over `bounds` - the spatial index's narrowed
|
|
53
|
+
* result if one is wired, else every live collider. `sync` is called first so
|
|
54
|
+
* colliders added/moved since the index's last detection pass (including
|
|
55
|
+
* before the world's very first `step()`) are still found.
|
|
56
|
+
*
|
|
57
|
+
* `buffer` is the scratch array the spatial index writes candidates into
|
|
58
|
+
* (cleared and refilled in place). Callers whose per-candidate loop can
|
|
59
|
+
* re-enter `_candidatesFor` - directly or via caller-supplied callback code -
|
|
60
|
+
* must pass a buffer dedicated to them, so a nested call refilling its own
|
|
61
|
+
* buffer can't truncate/corrupt an outer call's still-live iteration.
|
|
62
|
+
*/
|
|
63
|
+
private _candidatesFor;
|
|
39
64
|
/** Colliders containing `point`. Allocates a fresh array. */
|
|
40
|
-
queryPoint(point:
|
|
65
|
+
queryPoint(point: Readonly<PointLike>, filter?: QueryFilter): Collider[];
|
|
41
66
|
/** Colliders whose AABB overlaps `bounds`. Writes into `out` (cleared first) when given, else a fresh array. */
|
|
42
|
-
queryAabb(bounds:
|
|
43
|
-
/**
|
|
44
|
-
|
|
67
|
+
queryAabb(bounds: AabbLike, filter?: QueryFilter, out?: Collider[]): Collider[];
|
|
68
|
+
/**
|
|
69
|
+
* Invoke `callback` for each collider whose AABB overlaps `bounds`. Allocation-free.
|
|
70
|
+
*
|
|
71
|
+
* NOT re-entrant on itself: `callback` runs mid-traversal over a scratch
|
|
72
|
+
* buffer dedicated to this method, so it may safely call `queryPoint`,
|
|
73
|
+
* `queryAabb`, or `overlapShape` on this same `PhysicsWorld`/`QueryEngine`
|
|
74
|
+
* (they use a separate buffer and never invoke caller code mid-loop). It
|
|
75
|
+
* must NOT call `forEachAabbHit` again - directly or indirectly - on the
|
|
76
|
+
* same instance: the nested call would refill the same shared buffer this
|
|
77
|
+
* traversal is still iterating, silently truncating/corrupting it. This
|
|
78
|
+
* mirrors `DynamicAabbTree.query()`'s own non-reentrancy contract.
|
|
79
|
+
*/
|
|
80
|
+
forEachAabbHit(bounds: AabbLike, filter: QueryFilter | undefined, callback: (collider: Collider) => void): void;
|
|
45
81
|
/** Nearest collider hit by the ray from `origin` along `direction`, or `null`. */
|
|
46
|
-
rayCast(origin:
|
|
82
|
+
rayCast(origin: Readonly<PointLike>, direction: Readonly<PointLike>, filter?: QueryFilter, maxDistance?: number): RayHit | null;
|
|
47
83
|
/** All collider hits along the ray, sorted by distance. Writes into `out` (cleared first) when given. */
|
|
48
|
-
rayCastAll(origin:
|
|
49
|
-
/**
|
|
50
|
-
|
|
84
|
+
rayCastAll(origin: Readonly<PointLike>, direction: Readonly<PointLike>, filter?: QueryFilter, out?: RayHit[], maxDistance?: number): RayHit[];
|
|
85
|
+
/**
|
|
86
|
+
* Colliders overlapping `shape` placed at `position`/`angle`. Allocates a
|
|
87
|
+
* fresh array.
|
|
88
|
+
*
|
|
89
|
+
* A chain query shape is tested edge by edge, exactly as a chain collider is
|
|
90
|
+
* solved. Two boundaries have no overlap volume, so a chain - like a segment -
|
|
91
|
+
* never reports another chain or segment.
|
|
92
|
+
*/
|
|
93
|
+
overlapShape(shape: AnyShape, position: Readonly<PointLike>, filter?: QueryFilter, angle?: number): Collider[];
|
|
51
94
|
}
|
|
95
|
+
//# sourceMappingURL=QueryEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryEngine.d.ts","sourceRoot":"","sources":["../../../src/query/QueryEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAM5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAQnD,uFAAuF;AACvF,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAErF,sCAAsC;AACtC,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB,gCAAgC;IAChC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,6EAA6E;IAC7E,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAC/C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkB;IACtD,6FAA6F;IAC7F,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAkB;IACtD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;gBAEpC,SAAS,EAAE,SAAS,QAAQ,EAAE,EAAE,YAAY,CAAC,EAAE,YAAY;IAK9E;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,cAAc;IAUtB,6DAA6D;IACtD,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,QAAQ,EAAE;IAyB/E,gHAAgH;IACzG,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE;IAoBtF;;;;;;;;;;;OAWG;IACI,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAyBtH,kFAAkF;IAC3E,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,WAAW,SAAW,GAAG,MAAM,GAAG,IAAI;IAuCxI,yGAAyG;IAClG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,WAAW,SAAW,GAAG,MAAM,EAAE;IAyCtJ;;;;;;;OAOG;IACI,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,SAAI,GAAG,QAAQ,EAAE;CA2BjH"}
|