@codexo/exojs-physics 0.15.3 → 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/joints/Joint.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
|
+
//#region src/joints/Joint.ts
|
|
1
2
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
3
|
+
* Base class for a two-body constraint solved alongside contacts in the
|
|
4
|
+
* sub-step loop. Concrete joints (distance, revolute, weld) implement the
|
|
5
|
+
* three solver hooks; the world owns the joint list and drives them, and joins
|
|
6
|
+
* the two bodies into one sleep island so a jointed pair sleeps and wakes
|
|
7
|
+
* together.
|
|
8
|
+
*/
|
|
9
|
+
var Joint = class {
|
|
10
|
+
/** First constrained body. */
|
|
11
|
+
bodyA;
|
|
12
|
+
/** Second constrained body. */
|
|
13
|
+
bodyB;
|
|
14
|
+
/** When `false`, the joint is skipped by the solver (but still tracked by the world). */
|
|
15
|
+
enabled = true;
|
|
16
|
+
/** Whether this joint solves this frame - set in {@link _prepare} (disabled, sleeping or two static bodies → `false`). */
|
|
17
|
+
_active = false;
|
|
18
|
+
constructor(bodyA, bodyB) {
|
|
19
|
+
this.bodyA = bodyA;
|
|
20
|
+
this.bodyB = bodyB;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
22
23
|
|
|
24
|
+
//#endregion
|
|
23
25
|
export { Joint };
|
|
24
|
-
//# sourceMappingURL=Joint.js.map
|
|
26
|
+
//# sourceMappingURL=Joint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Joint.js","sources":["
|
|
1
|
+
{"version":3,"file":"Joint.js","names":[],"sources":["../../../src/joints/Joint.ts"],"sourcesContent":["import type { PhysicsBody } from '../PhysicsBody';\n\n/**\n * Base class for a two-body constraint solved alongside contacts in the\n * sub-step loop. Concrete joints (distance, revolute, weld) implement the\n * three solver hooks; the world owns the joint list and drives them, and joins\n * the two bodies into one sleep island so a jointed pair sleeps and wakes\n * together.\n */\nexport abstract class Joint {\n /** First constrained body. */\n public readonly bodyA: PhysicsBody;\n /** Second constrained body. */\n public readonly bodyB: PhysicsBody;\n /** When `false`, the joint is skipped by the solver (but still tracked by the world). */\n public enabled = true;\n\n /** Whether this joint solves this frame - set in {@link _prepare} (disabled, sleeping or two static bodies → `false`). */\n protected _active = false;\n\n protected constructor(bodyA: PhysicsBody, bodyB: PhysicsBody) {\n this.bodyA = bodyA;\n this.bodyB = bodyB;\n }\n\n /** @internal - build this frame's constraint data; called once per fixed step after detection. */\n public abstract _prepare(h: number): void;\n /** @internal - re-apply the accumulated impulse; called each sub-step (TGS-Soft warm-start). */\n public abstract _warmStart(): void;\n /** @internal - one velocity pass; `useBias` is the soft-bias pass, `false` the relax pass. */\n public abstract _solve(useBias: boolean): void;\n}\n"],"mappings":";;;;;;;;AASA,IAAsB,QAAtB,MAA4B;;CAE1B,AAAgB;;CAEhB,AAAgB;;CAEhB,AAAO,UAAU;;CAGjB,AAAU,UAAU;CAEpB,AAAU,YAAY,OAAoB,OAAoB;EAC5D,KAAK,QAAQ;EACb,KAAK,QAAQ;CACf;AAQF"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
+
import type { PointLike } from '@codexo/exojs';
|
|
1
2
|
import { PhysicsBody } from '../PhysicsBody';
|
|
2
|
-
import type { VectorLike } from '../types';
|
|
3
3
|
import { Joint } from './Joint';
|
|
4
4
|
/** Construction options for a {@link MouseJoint}. */
|
|
5
5
|
export interface MouseJointOptions {
|
|
6
6
|
/** The body to drag. */
|
|
7
7
|
body: PhysicsBody;
|
|
8
|
-
/** World point to pull the body toward
|
|
9
|
-
target:
|
|
8
|
+
/** World point to pull the body toward - also the grab point on the body at creation. */
|
|
9
|
+
target: Readonly<PointLike>;
|
|
10
10
|
/** Soft-spring frequency in Hz (higher = snappier). Default `5`. */
|
|
11
11
|
hertz?: number;
|
|
12
12
|
/** Soft-spring damping ratio. Default `0.7`. */
|
|
13
13
|
dampingRatio?: number;
|
|
14
|
-
/** Maximum pulling force
|
|
14
|
+
/** Maximum pulling force - clamps the per-step impulse so heavy bodies lag. Default `Infinity`. */
|
|
15
15
|
maxForce?: number;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Softly pulls a single body's grab point toward a movable **target** point
|
|
19
19
|
* (typically the mouse cursor). The grab point is fixed on the body at creation;
|
|
20
20
|
* update {@link target} each frame to drag. A soft constraint bounded by
|
|
21
|
-
* {@link maxForce}
|
|
21
|
+
* {@link maxForce} - solved in the sub-step loop, warm-started. Internally the
|
|
22
22
|
* "other" body is a private static ground sentinel, so this is a single-body
|
|
23
23
|
* constraint that touches only the dragged body.
|
|
24
24
|
*/
|
|
@@ -48,10 +48,11 @@ export declare class MouseJoint extends Joint {
|
|
|
48
48
|
private _maxImpulse;
|
|
49
49
|
constructor(options: MouseJointOptions);
|
|
50
50
|
/** The world point the body is pulled toward. Reassigning wakes the body so a drag tracks live. */
|
|
51
|
-
get target():
|
|
52
|
-
set target(value:
|
|
51
|
+
get target(): Readonly<PointLike>;
|
|
52
|
+
set target(value: Readonly<PointLike>);
|
|
53
53
|
_prepare(h: number): void;
|
|
54
54
|
_warmStart(): void;
|
|
55
55
|
_solve(useBias: boolean): void;
|
|
56
56
|
private _applyImpulse;
|
|
57
57
|
}
|
|
58
|
+
//# sourceMappingURL=MouseJoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MouseJoint.d.ts","sourceRoot":"","sources":["../../../src/joints/MouseJoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,yFAAyF;IACzF,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,mCAAmC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACrB,iCAAiC;IAC1B,YAAY,EAAE,MAAM,CAAC;IAC5B,6BAA6B;IACtB,QAAQ,EAAE,MAAM,CAAC;IAExB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAK;gBAEL,OAAO,EAAE,iBAAiB;IAiB7C,mGAAmG;IACnG,IAAW,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,CAEvC;IAED,IAAW,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAI3C;IAEe,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAwCzB,UAAU,IAAI,IAAI;IAQlB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAsC9C,OAAO,CAAC,aAAa;CAOtB"}
|
|
@@ -1,137 +1,136 @@
|
|
|
1
|
-
import { applyInverseTransform, applyTransform } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { applyInverseTransform, applyTransform } from "../math.js";
|
|
2
|
+
import { Joint } from "./Joint.js";
|
|
3
|
+
import { PhysicsBody } from "../PhysicsBody.js";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
//#region src/joints/MouseJoint.ts
|
|
6
|
+
/** Reused output sink - physics steps single-threaded, so a shared scratch is safe. */
|
|
7
|
+
const scratch = {
|
|
8
|
+
x: 0,
|
|
9
|
+
y: 0
|
|
10
|
+
};
|
|
7
11
|
/**
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const body = this.bodyB;
|
|
130
|
-
body.linearVelocityX += body.invMass * jx;
|
|
131
|
-
body.linearVelocityY += body.invMass * jy;
|
|
132
|
-
body.angularVelocity += body.invInertia * (this._rx * jy - this._ry * jx);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
12
|
+
* Softly pulls a single body's grab point toward a movable **target** point
|
|
13
|
+
* (typically the mouse cursor). The grab point is fixed on the body at creation;
|
|
14
|
+
* update {@link target} each frame to drag. A soft constraint bounded by
|
|
15
|
+
* {@link maxForce} - solved in the sub-step loop, warm-started. Internally the
|
|
16
|
+
* "other" body is a private static ground sentinel, so this is a single-body
|
|
17
|
+
* constraint that touches only the dragged body.
|
|
18
|
+
*/
|
|
19
|
+
var MouseJoint = class extends Joint {
|
|
20
|
+
/** Soft-spring frequency in Hz. */
|
|
21
|
+
hertz;
|
|
22
|
+
/** Soft-spring damping ratio. */
|
|
23
|
+
dampingRatio;
|
|
24
|
+
/** Maximum pulling force. */
|
|
25
|
+
maxForce;
|
|
26
|
+
_localAnchorX;
|
|
27
|
+
_localAnchorY;
|
|
28
|
+
_targetX;
|
|
29
|
+
_targetY;
|
|
30
|
+
_rx = 0;
|
|
31
|
+
_ry = 0;
|
|
32
|
+
_cx = 0;
|
|
33
|
+
_cy = 0;
|
|
34
|
+
_invK11 = 0;
|
|
35
|
+
_invK12 = 0;
|
|
36
|
+
_invK22 = 0;
|
|
37
|
+
_biasRate = 0;
|
|
38
|
+
_massScale = 1;
|
|
39
|
+
_impulseScale = 0;
|
|
40
|
+
_impulseX = 0;
|
|
41
|
+
_impulseY = 0;
|
|
42
|
+
_maxImpulse = 0;
|
|
43
|
+
constructor(options) {
|
|
44
|
+
super(new PhysicsBody({
|
|
45
|
+
type: "static",
|
|
46
|
+
position: options.target
|
|
47
|
+
}), options.body);
|
|
48
|
+
applyInverseTransform(options.body.transform, options.target.x, options.target.y, scratch);
|
|
49
|
+
this._localAnchorX = scratch.x;
|
|
50
|
+
this._localAnchorY = scratch.y;
|
|
51
|
+
this._targetX = options.target.x;
|
|
52
|
+
this._targetY = options.target.y;
|
|
53
|
+
this.hertz = options.hertz ?? 5;
|
|
54
|
+
this.dampingRatio = options.dampingRatio ?? .7;
|
|
55
|
+
this.maxForce = options.maxForce ?? Infinity;
|
|
56
|
+
}
|
|
57
|
+
/** The world point the body is pulled toward. Reassigning wakes the body so a drag tracks live. */
|
|
58
|
+
get target() {
|
|
59
|
+
return {
|
|
60
|
+
x: this._targetX,
|
|
61
|
+
y: this._targetY
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
set target(value) {
|
|
65
|
+
this._targetX = value.x;
|
|
66
|
+
this._targetY = value.y;
|
|
67
|
+
this.bodyB.wake();
|
|
68
|
+
}
|
|
69
|
+
_prepare(h) {
|
|
70
|
+
const body = this.bodyB;
|
|
71
|
+
this._active = this.enabled && !body.isSleeping && body.invMass > 0;
|
|
72
|
+
if (!this._active) return;
|
|
73
|
+
applyTransform(body.transform, this._localAnchorX, this._localAnchorY, scratch);
|
|
74
|
+
this._rx = scratch.x - body.worldCenterOfMassX;
|
|
75
|
+
this._ry = scratch.y - body.worldCenterOfMassY;
|
|
76
|
+
this._cx = scratch.x - this._targetX;
|
|
77
|
+
this._cy = scratch.y - this._targetY;
|
|
78
|
+
const m = body.invMass;
|
|
79
|
+
const i = body.invInertia;
|
|
80
|
+
const k11 = m + i * this._ry * this._ry;
|
|
81
|
+
const k12 = -i * this._rx * this._ry;
|
|
82
|
+
const k22 = m + i * this._rx * this._rx;
|
|
83
|
+
const det = k11 * k22 - k12 * k12;
|
|
84
|
+
const invDet = det !== 0 ? 1 / det : 0;
|
|
85
|
+
this._invK11 = invDet * k22;
|
|
86
|
+
this._invK12 = -invDet * k12;
|
|
87
|
+
this._invK22 = invDet * k11;
|
|
88
|
+
this._maxImpulse = this.maxForce * h;
|
|
89
|
+
const omega = 2 * Math.PI * this.hertz;
|
|
90
|
+
const a1 = 2 * this.dampingRatio + h * omega;
|
|
91
|
+
const a2 = h * omega * a1;
|
|
92
|
+
const a3 = 1 / (1 + a2);
|
|
93
|
+
this._biasRate = omega / a1;
|
|
94
|
+
this._massScale = a2 * a3;
|
|
95
|
+
this._impulseScale = a3;
|
|
96
|
+
}
|
|
97
|
+
_warmStart() {
|
|
98
|
+
if (!this._active) return;
|
|
99
|
+
this._applyImpulse(this._impulseX, this._impulseY);
|
|
100
|
+
}
|
|
101
|
+
_solve(useBias) {
|
|
102
|
+
if (!this._active) return;
|
|
103
|
+
const body = this.bodyB;
|
|
104
|
+
const cdotX = body.linearVelocityX - body.angularVelocity * this._ry;
|
|
105
|
+
const cdotY = body.linearVelocityY + body.angularVelocity * this._rx;
|
|
106
|
+
const rhsX = cdotX + (useBias ? this._biasRate * this._cx : 0);
|
|
107
|
+
const rhsY = cdotY + (useBias ? this._biasRate * this._cy : 0);
|
|
108
|
+
const solvedX = this._invK11 * rhsX + this._invK12 * rhsY;
|
|
109
|
+
const solvedY = this._invK12 * rhsX + this._invK22 * rhsY;
|
|
110
|
+
let impulseX = -this._massScale * solvedX - this._impulseScale * this._impulseX;
|
|
111
|
+
let impulseY = -this._massScale * solvedY - this._impulseScale * this._impulseY;
|
|
112
|
+
const oldX = this._impulseX;
|
|
113
|
+
const oldY = this._impulseY;
|
|
114
|
+
this._impulseX += impulseX;
|
|
115
|
+
this._impulseY += impulseY;
|
|
116
|
+
const magnitude = Math.hypot(this._impulseX, this._impulseY);
|
|
117
|
+
if (magnitude > this._maxImpulse) {
|
|
118
|
+
const scale = this._maxImpulse / magnitude;
|
|
119
|
+
this._impulseX *= scale;
|
|
120
|
+
this._impulseY *= scale;
|
|
121
|
+
}
|
|
122
|
+
impulseX = this._impulseX - oldX;
|
|
123
|
+
impulseY = this._impulseY - oldY;
|
|
124
|
+
this._applyImpulse(impulseX, impulseY);
|
|
125
|
+
}
|
|
126
|
+
_applyImpulse(jx, jy) {
|
|
127
|
+
const body = this.bodyB;
|
|
128
|
+
body.linearVelocityX += body.invMass * jx;
|
|
129
|
+
body.linearVelocityY += body.invMass * jy;
|
|
130
|
+
body.angularVelocity += body.invInertia * (this._rx * jy - this._ry * jx);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
135
133
|
|
|
134
|
+
//#endregion
|
|
136
135
|
export { MouseJoint };
|
|
137
|
-
//# sourceMappingURL=MouseJoint.js.map
|
|
136
|
+
//# sourceMappingURL=MouseJoint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MouseJoint.js","sources":["
|
|
1
|
+
{"version":3,"file":"MouseJoint.js","names":[],"sources":["../../../src/joints/MouseJoint.ts"],"sourcesContent":["import type { PointLike } from '@codexo/exojs';\n\nimport { applyInverseTransform, applyTransform } from '../math';\nimport { PhysicsBody } from '../PhysicsBody';\nimport { Joint } from './Joint';\n\n/** Construction options for a {@link MouseJoint}. */\nexport interface MouseJointOptions {\n /** The body to drag. */\n body: PhysicsBody;\n /** World point to pull the body toward - also the grab point on the body at creation. */\n target: Readonly<PointLike>;\n /** Soft-spring frequency in Hz (higher = snappier). Default `5`. */\n hertz?: number;\n /** Soft-spring damping ratio. Default `0.7`. */\n dampingRatio?: number;\n /** Maximum pulling force - clamps the per-step impulse so heavy bodies lag. Default `Infinity`. */\n maxForce?: number;\n}\n\n/** Reused output sink - physics steps single-threaded, so a shared scratch is safe. */\nconst scratch: PointLike = { x: 0, y: 0 };\n\n/**\n * Softly pulls a single body's grab point toward a movable **target** point\n * (typically the mouse cursor). The grab point is fixed on the body at creation;\n * update {@link target} each frame to drag. A soft constraint bounded by\n * {@link maxForce} - solved in the sub-step loop, warm-started. Internally the\n * \"other\" body is a private static ground sentinel, so this is a single-body\n * constraint that touches only the dragged body.\n */\nexport class MouseJoint extends Joint {\n /** Soft-spring frequency in Hz. */\n public hertz: number;\n /** Soft-spring damping ratio. */\n public dampingRatio: number;\n /** Maximum pulling force. */\n public maxForce: number;\n\n private readonly _localAnchorX: number;\n private readonly _localAnchorY: number;\n private _targetX: number;\n private _targetY: number;\n\n private _rx = 0;\n private _ry = 0;\n private _cx = 0;\n private _cy = 0;\n private _invK11 = 0;\n private _invK12 = 0;\n private _invK22 = 0;\n private _biasRate = 0;\n private _massScale = 1;\n private _impulseScale = 0;\n private _impulseX = 0;\n private _impulseY = 0;\n private _maxImpulse = 0;\n\n public constructor(options: MouseJointOptions) {\n // Single-body constraint: a private static ground stands in for bodyA so the\n // island/solver machinery (which assumes two bodies) sees a static anchor that\n // it never integrates, unions or mutates.\n super(new PhysicsBody({ type: 'static', position: options.target }), options.body);\n\n applyInverseTransform(options.body.transform, options.target.x, options.target.y, scratch);\n this._localAnchorX = scratch.x;\n this._localAnchorY = scratch.y;\n this._targetX = options.target.x;\n this._targetY = options.target.y;\n\n this.hertz = options.hertz ?? 5;\n this.dampingRatio = options.dampingRatio ?? 0.7;\n this.maxForce = options.maxForce ?? Infinity;\n }\n\n /** The world point the body is pulled toward. Reassigning wakes the body so a drag tracks live. */\n public get target(): Readonly<PointLike> {\n return { x: this._targetX, y: this._targetY };\n }\n\n public set target(value: Readonly<PointLike>) {\n this._targetX = value.x;\n this._targetY = value.y;\n this.bodyB.wake();\n }\n\n public override _prepare(h: number): void {\n const body = this.bodyB;\n\n this._active = this.enabled && !body.isSleeping && body.invMass > 0;\n\n if (!this._active) {\n return;\n }\n\n applyTransform(body.transform, this._localAnchorX, this._localAnchorY, scratch);\n this._rx = scratch.x - body.worldCenterOfMassX;\n this._ry = scratch.y - body.worldCenterOfMassY;\n this._cx = scratch.x - this._targetX;\n this._cy = scratch.y - this._targetY;\n\n const m = body.invMass;\n const i = body.invInertia;\n\n // 2×2 effective-mass matrix K (only the dragged body contributes) and its inverse.\n const k11 = m + i * this._ry * this._ry;\n const k12 = -i * this._rx * this._ry;\n const k22 = m + i * this._rx * this._rx;\n const det = k11 * k22 - k12 * k12;\n const invDet = det !== 0 ? 1 / det : 0;\n\n this._invK11 = invDet * k22;\n this._invK12 = -invDet * k12;\n this._invK22 = invDet * k11;\n this._maxImpulse = this.maxForce * h;\n\n const omega = 2 * Math.PI * this.hertz;\n const a1 = 2 * this.dampingRatio + h * omega;\n const a2 = h * omega * a1;\n const a3 = 1 / (1 + a2);\n\n this._biasRate = omega / a1;\n this._massScale = a2 * a3;\n this._impulseScale = a3;\n }\n\n public override _warmStart(): void {\n if (!this._active) {\n return;\n }\n\n this._applyImpulse(this._impulseX, this._impulseY);\n }\n\n public override _solve(useBias: boolean): void {\n if (!this._active) {\n return;\n }\n\n const body = this.bodyB;\n\n // Velocity of the grab point.\n const cdotX = body.linearVelocityX - body.angularVelocity * this._ry;\n const cdotY = body.linearVelocityY + body.angularVelocity * this._rx;\n const rhsX = cdotX + (useBias ? this._biasRate * this._cx : 0);\n const rhsY = cdotY + (useBias ? this._biasRate * this._cy : 0);\n\n const solvedX = this._invK11 * rhsX + this._invK12 * rhsY;\n const solvedY = this._invK12 * rhsX + this._invK22 * rhsY;\n let impulseX = -this._massScale * solvedX - this._impulseScale * this._impulseX;\n let impulseY = -this._massScale * solvedY - this._impulseScale * this._impulseY;\n\n // Clamp the accumulated impulse magnitude to maxForce·h (a heavy body lags).\n const oldX = this._impulseX;\n const oldY = this._impulseY;\n this._impulseX += impulseX;\n this._impulseY += impulseY;\n\n const magnitude = Math.hypot(this._impulseX, this._impulseY);\n\n if (magnitude > this._maxImpulse) {\n const scale = this._maxImpulse / magnitude;\n\n this._impulseX *= scale;\n this._impulseY *= scale;\n }\n\n impulseX = this._impulseX - oldX;\n impulseY = this._impulseY - oldY;\n this._applyImpulse(impulseX, impulseY);\n }\n\n private _applyImpulse(jx: number, jy: number): void {\n const body = this.bodyB;\n\n body.linearVelocityX += body.invMass * jx;\n body.linearVelocityY += body.invMass * jy;\n body.angularVelocity += body.invInertia * (this._rx * jy - this._ry * jx);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { PointLike } from '@codexo/exojs';
|
|
1
2
|
import type { PhysicsBody } from '../PhysicsBody';
|
|
2
|
-
import type { VectorLike } from '../types';
|
|
3
3
|
import { Joint } from './Joint';
|
|
4
4
|
/** Construction options for a {@link PrismaticJoint}. */
|
|
5
5
|
export interface PrismaticJointOptions {
|
|
@@ -8,14 +8,14 @@ export interface PrismaticJointOptions {
|
|
|
8
8
|
/** Second body (the slider). */
|
|
9
9
|
bodyB: PhysicsBody;
|
|
10
10
|
/** Shared world-space anchor at creation. */
|
|
11
|
-
anchor:
|
|
11
|
+
anchor: Readonly<PointLike>;
|
|
12
12
|
/** Slide axis in world space at creation (normalised internally). The body may only translate along this axis. */
|
|
13
|
-
axis:
|
|
13
|
+
axis: Readonly<PointLike>;
|
|
14
14
|
/** Enable the linear motor (drives translation along the axis toward {@link motorSpeed}). Default `false`. */
|
|
15
15
|
enableMotor?: boolean;
|
|
16
16
|
/** Target translation speed along the axis (px/s). Default `0`. */
|
|
17
17
|
motorSpeed?: number;
|
|
18
|
-
/** Maximum motor force
|
|
18
|
+
/** Maximum motor force - clamps the per-step motor impulse. Default `0`. */
|
|
19
19
|
maxMotorForce?: number;
|
|
20
20
|
/** Enable the translation limit (keeps the axis translation in `[lowerTranslation, upperTranslation]`). Default `false`. */
|
|
21
21
|
enableLimit?: boolean;
|
|
@@ -83,3 +83,4 @@ export declare class PrismaticJoint extends Joint {
|
|
|
83
83
|
private _applyAxial;
|
|
84
84
|
private _applyBlock;
|
|
85
85
|
}
|
|
86
|
+
//# sourceMappingURL=PrismaticJoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PrismaticJoint.d.ts","sourceRoot":"","sources":["../../../src/joints/PrismaticJoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,yDAAyD;AACzD,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,KAAK,EAAE,WAAW,CAAC;IACnB,gCAAgC;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,6CAA6C;IAC7C,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,kHAAkH;IAClH,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1B,8GAA8G;IAC9G,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4HAA4H;IAC5H,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAKD;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,oFAAoF;IAC7E,WAAW,EAAE,OAAO,CAAC;IAC5B,sDAAsD;IAC/C,UAAU,EAAE,MAAM,CAAC;IAC1B,2BAA2B;IACpB,aAAa,EAAE,MAAM,CAAC;IAC7B,kGAAkG;IAC3F,WAAW,EAAE,OAAO,CAAC;IAC5B,8CAA8C;IACvC,gBAAgB,EAAE,MAAM,CAAC;IAChC,8CAA8C;IACvC,gBAAgB,EAAE,MAAM,CAAC;IAEhC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,EAAE,CAAK;IACf,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;gBAEP,OAAO,EAAE,qBAAqB;IA6BjC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IA2EzB,UAAU,IAAI,IAAI;IAUlB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAgE9C,iFAAiF;IACjF,OAAO,CAAC,aAAa;IAYrB,0FAA0F;IAC1F,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,WAAW;CAapB"}
|