@flighthq/physics2d 0.3.0-next.1560.03a2b36 → 0.3.0-next.1566.dcdf1d3
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/dist/broadphase.d.ts +3 -0
- package/dist/broadphase.d.ts.map +1 -0
- package/dist/broadphase.js +53 -0
- package/dist/broadphase.js.map +1 -0
- package/dist/contract.d.ts +3 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +3 -0
- package/dist/contract.js.map +1 -1
- package/dist/explainPhysics2DJoints.d.ts +3 -0
- package/dist/explainPhysics2DJoints.d.ts.map +1 -0
- package/dist/explainPhysics2DJoints.js +40 -0
- package/dist/explainPhysics2DJoints.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/jointFactories.d.ts +11 -0
- package/dist/jointFactories.d.ts.map +1 -0
- package/dist/jointFactories.js +142 -0
- package/dist/jointFactories.js.map +1 -0
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +3 -66
- package/dist/step.js.map +1 -1
- package/dist/worldQueries.d.ts +5 -0
- package/dist/worldQueries.d.ts.map +1 -0
- package/dist/worldQueries.js +71 -0
- package/dist/worldQueries.js.map +1 -0
- package/package.json +5 -5
- package/src/broadphase.test.ts +21 -0
- package/src/explainPhysics2DJoints.test.ts +89 -0
- package/src/jointFactories.test.ts +151 -0
- package/src/worldQueries.test.ts +127 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadphase.d.ts","sourceRoot":"","sources":["../src/broadphase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,0BAA0B,CAAC;AAO5E,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAwC1E"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { updatePhysics2DColliderWorldShape, writePhysics2DColliderBounds } from './colliderTransform';
|
|
2
|
+
// Refreshes every collider's world shape and republishes its bounds to the broadphase index. The step
|
|
3
|
+
// and public world queries share this path so a query observes the body's current authored pose, not
|
|
4
|
+
// the pre-integration snapshot used to build the most recent contact set.
|
|
5
|
+
export function synchronizePhysics2DBroadphase(world) {
|
|
6
|
+
for (const body of world.bodies) {
|
|
7
|
+
let minX = Infinity;
|
|
8
|
+
let minY = Infinity;
|
|
9
|
+
let maxX = -Infinity;
|
|
10
|
+
let maxY = -Infinity;
|
|
11
|
+
for (const collider of body.colliders) {
|
|
12
|
+
updatePhysics2DColliderWorldShape(collider, body);
|
|
13
|
+
writePhysics2DColliderBounds(collider, boundsScratch);
|
|
14
|
+
if (boundsScratch.minX < minX)
|
|
15
|
+
minX = boundsScratch.minX;
|
|
16
|
+
if (boundsScratch.minY < minY)
|
|
17
|
+
minY = boundsScratch.minY;
|
|
18
|
+
if (boundsScratch.maxX > maxX)
|
|
19
|
+
maxX = boundsScratch.maxX;
|
|
20
|
+
if (boundsScratch.maxY > maxY)
|
|
21
|
+
maxY = boundsScratch.maxY;
|
|
22
|
+
}
|
|
23
|
+
if (minX > maxX) {
|
|
24
|
+
// No collider produced bounds, so there is nothing to index. Withdraw rather than skip: the id
|
|
25
|
+
// may have been indexed on a previous step, and stale bounds would keep returning an empty body.
|
|
26
|
+
world.index.removeSpatialObject(body.index);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
// The spatial package bounds its own indexing cost. This second limit expresses the physics
|
|
30
|
+
// world's stricter judgement that a non-finite or ten-million-unit body has diverged and should no
|
|
31
|
+
// longer participate in collision or queries.
|
|
32
|
+
if (!Number.isFinite(minX) ||
|
|
33
|
+
!Number.isFinite(minY) ||
|
|
34
|
+
!Number.isFinite(maxX) ||
|
|
35
|
+
!Number.isFinite(maxY) ||
|
|
36
|
+
maxX - minX > MAX_SIMULATED_EXTENT ||
|
|
37
|
+
maxY - minY > MAX_SIMULATED_EXTENT) {
|
|
38
|
+
world.index.removeSpatialObject(body.index);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
bodyBounds.minX = minX;
|
|
42
|
+
bodyBounds.minY = minY;
|
|
43
|
+
bodyBounds.maxX = maxX;
|
|
44
|
+
bodyBounds.maxY = maxY;
|
|
45
|
+
world.index.updateSpatialObject(body.index, bodyBounds);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// The widest body this world still treats as simulating. Named for what it bounds — the simulation's
|
|
49
|
+
// tolerance for divergence — not for the index, which bounds its own insert cost independently.
|
|
50
|
+
const MAX_SIMULATED_EXTENT = 1e7;
|
|
51
|
+
const boundsScratch = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
52
|
+
const bodyBounds = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
53
|
+
//# sourceMappingURL=broadphase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadphase.js","sourceRoot":"","sources":["../src/broadphase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAEtG,sGAAsG;AACtG,qGAAqG;AACrG,0EAA0E;AAC1E,MAAM,UAAU,8BAA8B,CAAC,KAAqB;IAClE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;QACrB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;QACrB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,iCAAiC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClD,4BAA4B,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACtD,IAAI,aAAa,CAAC,IAAI,GAAG,IAAI;gBAAE,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;YACzD,IAAI,aAAa,CAAC,IAAI,GAAG,IAAI;gBAAE,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;YACzD,IAAI,aAAa,CAAC,IAAI,GAAG,IAAI;gBAAE,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;YACzD,IAAI,aAAa,CAAC,IAAI,GAAG,IAAI;gBAAE,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;QAC3D,CAAC;QACD,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YAChB,+FAA+F;YAC/F,iGAAiG;YACjG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,4FAA4F;QAC5F,mGAAmG;QACnG,8CAA8C;QAC9C,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACtB,IAAI,GAAG,IAAI,GAAG,oBAAoB;YAClC,IAAI,GAAG,IAAI,GAAG,oBAAoB,EAClC,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,qGAAqG;AACrG,gGAAgG;AAChG,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,aAAa,GAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC1E,MAAM,UAAU,GAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export * from './colliderTransform';
|
|
2
|
+
export * from './explainPhysics2DJoints';
|
|
2
3
|
export * from './islands';
|
|
4
|
+
export * from './jointFactories';
|
|
3
5
|
export * from './jointRegistry';
|
|
4
6
|
export * from './joints';
|
|
5
7
|
export * from './massProperties';
|
|
6
8
|
export * from './solver';
|
|
7
9
|
export * from './step';
|
|
8
10
|
export * from './world';
|
|
11
|
+
export * from './worldQueries';
|
|
9
12
|
//# sourceMappingURL=contract.d.ts.map
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
|
package/dist/contract.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
export * from './colliderTransform';
|
|
2
|
+
export * from './explainPhysics2DJoints';
|
|
2
3
|
export * from './islands';
|
|
4
|
+
export * from './jointFactories';
|
|
3
5
|
export * from './jointRegistry';
|
|
4
6
|
export * from './joints';
|
|
5
7
|
export * from './massProperties';
|
|
6
8
|
export * from './solver';
|
|
7
9
|
export * from './step';
|
|
8
10
|
export * from './world';
|
|
11
|
+
export * from './worldQueries';
|
|
9
12
|
//# sourceMappingURL=contract.js.map
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainPhysics2DJoints.d.ts","sourceRoot":"","sources":["../src/explainPhysics2DJoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mCAAmC,EAEnC,cAAc,EACf,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,mCAAmC,CAsB3G"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { findPhysics2DBody } from './world';
|
|
2
|
+
// Pure diagnostic twin of the step's silent joint skips. It re-walks the world as it exists now and
|
|
3
|
+
// retains nothing, letting callers distinguish an intentionally extensible unknown kind from missing
|
|
4
|
+
// body endpoints without adding messages or allocations to the solver path.
|
|
5
|
+
export function explainPhysics2DJoints(world) {
|
|
6
|
+
const joints = [];
|
|
7
|
+
let readyCount = 0;
|
|
8
|
+
for (let jointIndex = 0; jointIndex < world.joints.length; jointIndex++) {
|
|
9
|
+
const joint = world.joints[jointIndex];
|
|
10
|
+
const solverRegistered = world.jointSolvers.has(joint.kind);
|
|
11
|
+
const bodyAFound = findPhysics2DBody(world, joint.bodyA) !== null;
|
|
12
|
+
const bodyBFound = findPhysics2DBody(world, joint.bodyB) !== null;
|
|
13
|
+
const status = getJointResolutionStatus(solverRegistered, bodyAFound, bodyBFound);
|
|
14
|
+
if (status === 'ready')
|
|
15
|
+
readyCount++;
|
|
16
|
+
joints.push({
|
|
17
|
+
bodyA: joint.bodyA,
|
|
18
|
+
bodyAFound,
|
|
19
|
+
bodyB: joint.bodyB,
|
|
20
|
+
bodyBFound,
|
|
21
|
+
jointIndex,
|
|
22
|
+
kind: joint.kind,
|
|
23
|
+
solverRegistered,
|
|
24
|
+
status,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return { joints, readyCount, status: readyCount === joints.length ? 'complete' : 'unresolved-joints' };
|
|
28
|
+
}
|
|
29
|
+
function getJointResolutionStatus(solverRegistered, bodyAFound, bodyBFound) {
|
|
30
|
+
if (!solverRegistered)
|
|
31
|
+
return 'solver-unregistered';
|
|
32
|
+
if (!bodyAFound && !bodyBFound)
|
|
33
|
+
return 'bodies-missing';
|
|
34
|
+
if (!bodyAFound)
|
|
35
|
+
return 'body-a-missing';
|
|
36
|
+
if (!bodyBFound)
|
|
37
|
+
return 'body-b-missing';
|
|
38
|
+
return 'ready';
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=explainPhysics2DJoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainPhysics2DJoints.js","sourceRoot":"","sources":["../src/explainPhysics2DJoints.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,oGAAoG;AACpG,qGAAqG;AACrG,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,KAA+B;IACpE,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;QACxE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;QAClE,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;QAClE,MAAM,MAAM,GAAG,wBAAwB,CAAC,gBAAgB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAClF,IAAI,MAAM,KAAK,OAAO;YAAE,UAAU,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU;YACV,UAAU;YACV,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,gBAAgB;YAChB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,wBAAwB,CAC/B,gBAAyB,EACzB,UAAmB,EACnB,UAAmB;IAEnB,IAAI,CAAC,gBAAgB;QAAE,OAAO,qBAAqB,CAAC;IACpD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;QAAE,OAAO,gBAAgB,CAAC;IACxD,IAAI,CAAC,UAAU;QAAE,OAAO,gBAAgB,CAAC;IACzC,IAAI,CAAC,UAAU;QAAE,OAAO,gBAAgB,CAAC;IACzC,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export { createPhysics2DColliderWorldShape, updatePhysics2DColliderWorldShape, writePhysics2DColliderBounds, } from './colliderTransform';
|
|
2
2
|
export { createPhysics2DDebugGeometry, writePhysics2DDebugGeometry } from './debugGeometry';
|
|
3
|
+
export { explainPhysics2DJoints } from './explainPhysics2DJoints';
|
|
3
4
|
export { isRigidBody2DPairAwake, updatePhysics2DSleep, wakePhysics2DBody } from './islands';
|
|
5
|
+
export { createPhysics2DDistanceJoint, createPhysics2DGearJoint, createPhysics2DMouseJoint, createPhysics2DPrismaticJoint, createPhysics2DPulleyJoint, createPhysics2DRevoluteJoint, createPhysics2DRopeJoint, createPhysics2DWeldJoint, createPhysics2DWheelJoint, } from './jointFactories';
|
|
4
6
|
export { Physics2DDistanceJointKind, Physics2DGearJointKind, Physics2DMouseJointKind, Physics2DPrismaticJointKind, Physics2DPulleyJointKind, Physics2DRevoluteJointKind, Physics2DRopeJointKind, Physics2DWheelJointKind, Physics2DWeldJointKind, physics2DDistanceJointSolver, physics2DGearJointSolver, physics2DMouseJointSolver, physics2DPrismaticJointSolver, physics2DPulleyJointSolver, physics2DRevoluteJointSolver, physics2DRopeJointSolver, physics2DWheelJointSolver, physics2DWeldJointSolver, } from './joints';
|
|
5
7
|
export { addPhysics2DJoint, getPhysics2DJointSolver, registerPhysics2DJointSolver, removePhysics2DJoint, } from './jointRegistry';
|
|
6
8
|
export { computePhysics2DColliderMassData, updateRigidBody2DMassData } from './massProperties';
|
|
7
9
|
export { applyPhysics2DImpulse, relativeNormalVelocity, solvePhysics2DContacts, solvePhysics2DContactsOnce, warmStartPhysics2DContacts, } from './solver';
|
|
8
10
|
export { stepPhysics2D } from './step';
|
|
9
11
|
export { addPhysics2DBody, findPhysics2DBody, createPhysics2DCollider, createPhysics2DSolverConfig, createPhysics2DWorld, createRigidBody2D, isPhysics2DPairOrdered, removePhysics2DBody, } from './world';
|
|
12
|
+
export { createPhysics2DQueryResult, queryPhysics2DPoint, queryPhysics2DRegion } from './worldQueries';
|
|
10
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export { createPhysics2DColliderWorldShape, updatePhysics2DColliderWorldShape, writePhysics2DColliderBounds, } from './colliderTransform';
|
|
2
2
|
export { createPhysics2DDebugGeometry, writePhysics2DDebugGeometry } from './debugGeometry';
|
|
3
|
+
export { explainPhysics2DJoints } from './explainPhysics2DJoints';
|
|
3
4
|
export { isRigidBody2DPairAwake, updatePhysics2DSleep, wakePhysics2DBody } from './islands';
|
|
5
|
+
export { createPhysics2DDistanceJoint, createPhysics2DGearJoint, createPhysics2DMouseJoint, createPhysics2DPrismaticJoint, createPhysics2DPulleyJoint, createPhysics2DRevoluteJoint, createPhysics2DRopeJoint, createPhysics2DWeldJoint, createPhysics2DWheelJoint, } from './jointFactories';
|
|
4
6
|
export { Physics2DDistanceJointKind, Physics2DGearJointKind, Physics2DMouseJointKind, Physics2DPrismaticJointKind, Physics2DPulleyJointKind, Physics2DRevoluteJointKind, Physics2DRopeJointKind, Physics2DWheelJointKind, Physics2DWeldJointKind, physics2DDistanceJointSolver, physics2DGearJointSolver, physics2DMouseJointSolver, physics2DPrismaticJointSolver, physics2DPulleyJointSolver, physics2DRevoluteJointSolver, physics2DRopeJointSolver, physics2DWheelJointSolver, physics2DWeldJointSolver, } from './joints';
|
|
5
7
|
export { addPhysics2DJoint, getPhysics2DJointSolver, registerPhysics2DJointSolver, removePhysics2DJoint, } from './jointRegistry';
|
|
6
8
|
export { computePhysics2DColliderMassData, updateRigidBody2DMassData } from './massProperties';
|
|
7
9
|
export { applyPhysics2DImpulse, relativeNormalVelocity, solvePhysics2DContacts, solvePhysics2DContactsOnce, warmStartPhysics2DContacts, } from './solver';
|
|
8
10
|
export { stepPhysics2D } from './step';
|
|
9
11
|
export { addPhysics2DBody, findPhysics2DBody, createPhysics2DCollider, createPhysics2DSolverConfig, createPhysics2DWorld, createRigidBody2D, isPhysics2DPairOrdered, removePhysics2DBody, } from './world';
|
|
12
|
+
export { createPhysics2DQueryResult, queryPhysics2DPoint, queryPhysics2DRegion } from './worldQueries';
|
|
10
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,iCAAiC,EACjC,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Physics2DDistanceJoint, Physics2DDistanceJointOptions, Physics2DGearJoint, Physics2DGearJointOptions, Physics2DMouseJoint, Physics2DMouseJointOptions, Physics2DPrismaticJoint, Physics2DPrismaticJointOptions, Physics2DPulleyJoint, Physics2DPulleyJointOptions, Physics2DRevoluteJoint, Physics2DRevoluteJointOptions, Physics2DRopeJoint, Physics2DRopeJointOptions, Physics2DWeldJoint, Physics2DWeldJointOptions, Physics2DWheelJoint, Physics2DWheelJointOptions } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createPhysics2DDistanceJoint(options: Readonly<Physics2DDistanceJointOptions>): Physics2DDistanceJoint;
|
|
3
|
+
export declare function createPhysics2DGearJoint(options: Readonly<Physics2DGearJointOptions>): Physics2DGearJoint;
|
|
4
|
+
export declare function createPhysics2DMouseJoint(options: Readonly<Physics2DMouseJointOptions>): Physics2DMouseJoint;
|
|
5
|
+
export declare function createPhysics2DPrismaticJoint(options: Readonly<Physics2DPrismaticJointOptions>): Physics2DPrismaticJoint;
|
|
6
|
+
export declare function createPhysics2DPulleyJoint(options: Readonly<Physics2DPulleyJointOptions>): Physics2DPulleyJoint;
|
|
7
|
+
export declare function createPhysics2DRevoluteJoint(options: Readonly<Physics2DRevoluteJointOptions>): Physics2DRevoluteJoint;
|
|
8
|
+
export declare function createPhysics2DRopeJoint(options: Readonly<Physics2DRopeJointOptions>): Physics2DRopeJoint;
|
|
9
|
+
export declare function createPhysics2DWeldJoint(options: Readonly<Physics2DWeldJointOptions>): Physics2DWeldJoint;
|
|
10
|
+
export declare function createPhysics2DWheelJoint(options: Readonly<Physics2DWheelJointOptions>): Physics2DWheelJoint;
|
|
11
|
+
//# sourceMappingURL=jointFactories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jointFactories.d.ts","sourceRoot":"","sources":["../src/jointFactories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,yBAAyB,EAGzB,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,EACvB,8BAA8B,EAC9B,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,EACtB,6BAA6B,EAC7B,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,0BAA0B,CAAC;AAuClC,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAAG,sBAAsB,CAQrH;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,kBAAkB,CAazG;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,0BAA0B,CAAC,GAAG,mBAAmB,CAuB5G;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,QAAQ,CAAC,8BAA8B,CAAC,GAChD,uBAAuB,CAezB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,QAAQ,CAAC,2BAA2B,CAAC,GAAG,oBAAoB,CAW/G;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,QAAQ,CAAC,6BAA6B,CAAC,GAAG,sBAAsB,CAarH;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,kBAAkB,CAMzG;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,kBAAkB,CAMzG;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,0BAA0B,CAAC,GAAG,mBAAmB,CAc5G"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { Physics2DDistanceJointKind, Physics2DGearJointKind, Physics2DMouseJointKind, Physics2DPrismaticJointKind, Physics2DPulleyJointKind, Physics2DRevoluteJointKind, Physics2DRopeJointKind, Physics2DWeldJointKind, Physics2DWheelJointKind, } from './joints';
|
|
2
|
+
// Joint factories mirror Flight's other descriptor factories: they allocate plain data, accept one
|
|
3
|
+
// readonly options object, and make only authoring choices. Registration and world mutation remain
|
|
4
|
+
// explicit operations. The common helper is also the boundary that keeps solver-owned cache out of
|
|
5
|
+
// every public options type.
|
|
6
|
+
function createJointBase(options) {
|
|
7
|
+
return {
|
|
8
|
+
bodyA: options.bodyA,
|
|
9
|
+
bodyB: options.bodyB,
|
|
10
|
+
localAnchorAX: options.localAnchorAX ?? 0,
|
|
11
|
+
localAnchorAY: options.localAnchorAY ?? 0,
|
|
12
|
+
localAnchorBX: options.localAnchorBX ?? 0,
|
|
13
|
+
localAnchorBY: options.localAnchorBY ?? 0,
|
|
14
|
+
collideConnected: options.collideConnected ?? false,
|
|
15
|
+
impulse0: 0,
|
|
16
|
+
impulse1: 0,
|
|
17
|
+
impulse2: 0,
|
|
18
|
+
rAX: 0,
|
|
19
|
+
rAY: 0,
|
|
20
|
+
rBX: 0,
|
|
21
|
+
rBY: 0,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function createPhysics2DDistanceJoint(options) {
|
|
25
|
+
return {
|
|
26
|
+
kind: Physics2DDistanceJointKind,
|
|
27
|
+
...createJointBase(options),
|
|
28
|
+
length: options.length,
|
|
29
|
+
stiffness: options.stiffness ?? 0,
|
|
30
|
+
damping: options.damping ?? 0,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function createPhysics2DGearJoint(options) {
|
|
34
|
+
return {
|
|
35
|
+
kind: Physics2DGearJointKind,
|
|
36
|
+
...createJointBase(options),
|
|
37
|
+
coordinateA: options.coordinateA,
|
|
38
|
+
coordinateB: options.coordinateB,
|
|
39
|
+
axisAX: options.axisAX ?? 1,
|
|
40
|
+
axisAY: options.axisAY ?? 0,
|
|
41
|
+
axisBX: options.axisBX ?? 1,
|
|
42
|
+
axisBY: options.axisBY ?? 0,
|
|
43
|
+
ratio: options.ratio ?? 1,
|
|
44
|
+
constant: options.constant,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export function createPhysics2DMouseJoint(options) {
|
|
48
|
+
return {
|
|
49
|
+
kind: Physics2DMouseJointKind,
|
|
50
|
+
bodyA: options.body,
|
|
51
|
+
bodyB: options.body,
|
|
52
|
+
localAnchorAX: 0,
|
|
53
|
+
localAnchorAY: 0,
|
|
54
|
+
localAnchorBX: options.localAnchorX ?? 0,
|
|
55
|
+
localAnchorBY: options.localAnchorY ?? 0,
|
|
56
|
+
collideConnected: false,
|
|
57
|
+
impulse0: 0,
|
|
58
|
+
impulse1: 0,
|
|
59
|
+
impulse2: 0,
|
|
60
|
+
rAX: 0,
|
|
61
|
+
rAY: 0,
|
|
62
|
+
rBX: 0,
|
|
63
|
+
rBY: 0,
|
|
64
|
+
targetX: options.targetX,
|
|
65
|
+
targetY: options.targetY,
|
|
66
|
+
maxForce: options.maxForce,
|
|
67
|
+
stiffness: options.stiffness ?? 5,
|
|
68
|
+
damping: options.damping ?? 0.7,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export function createPhysics2DPrismaticJoint(options) {
|
|
72
|
+
return {
|
|
73
|
+
kind: Physics2DPrismaticJointKind,
|
|
74
|
+
...createJointBase(options),
|
|
75
|
+
localAxisAX: options.localAxisAX ?? 1,
|
|
76
|
+
localAxisAY: options.localAxisAY ?? 0,
|
|
77
|
+
referenceAngle: options.referenceAngle ?? 0,
|
|
78
|
+
enableMotor: options.enableMotor ?? false,
|
|
79
|
+
motorSpeed: options.motorSpeed ?? 0,
|
|
80
|
+
maxMotorForce: options.maxMotorForce ?? 0,
|
|
81
|
+
motorImpulse: 0,
|
|
82
|
+
enableLimit: options.enableLimit ?? false,
|
|
83
|
+
lowerTranslation: options.lowerTranslation ?? 0,
|
|
84
|
+
upperTranslation: options.upperTranslation ?? 0,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function createPhysics2DPulleyJoint(options) {
|
|
88
|
+
return {
|
|
89
|
+
kind: Physics2DPulleyJointKind,
|
|
90
|
+
...createJointBase(options),
|
|
91
|
+
groundAnchorAX: options.groundAnchorAX,
|
|
92
|
+
groundAnchorAY: options.groundAnchorAY,
|
|
93
|
+
groundAnchorBX: options.groundAnchorBX,
|
|
94
|
+
groundAnchorBY: options.groundAnchorBY,
|
|
95
|
+
ratio: options.ratio ?? 1,
|
|
96
|
+
constant: options.constant,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
export function createPhysics2DRevoluteJoint(options) {
|
|
100
|
+
return {
|
|
101
|
+
kind: Physics2DRevoluteJointKind,
|
|
102
|
+
...createJointBase(options),
|
|
103
|
+
enableMotor: options.enableMotor ?? false,
|
|
104
|
+
motorSpeed: options.motorSpeed ?? 0,
|
|
105
|
+
maxMotorTorque: options.maxMotorTorque ?? 0,
|
|
106
|
+
motorImpulse: 0,
|
|
107
|
+
enableLimit: options.enableLimit ?? false,
|
|
108
|
+
lowerAngle: options.lowerAngle ?? 0,
|
|
109
|
+
upperAngle: options.upperAngle ?? 0,
|
|
110
|
+
referenceAngle: options.referenceAngle ?? 0,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export function createPhysics2DRopeJoint(options) {
|
|
114
|
+
return {
|
|
115
|
+
kind: Physics2DRopeJointKind,
|
|
116
|
+
...createJointBase(options),
|
|
117
|
+
maxLength: options.maxLength,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export function createPhysics2DWeldJoint(options) {
|
|
121
|
+
return {
|
|
122
|
+
kind: Physics2DWeldJointKind,
|
|
123
|
+
...createJointBase(options),
|
|
124
|
+
referenceAngle: options.referenceAngle ?? 0,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export function createPhysics2DWheelJoint(options) {
|
|
128
|
+
return {
|
|
129
|
+
kind: Physics2DWheelJointKind,
|
|
130
|
+
...createJointBase(options),
|
|
131
|
+
localAxisAX: options.localAxisAX ?? 0,
|
|
132
|
+
localAxisAY: options.localAxisAY ?? 1,
|
|
133
|
+
restTranslation: options.restTranslation ?? 0,
|
|
134
|
+
stiffness: options.stiffness ?? 0,
|
|
135
|
+
damping: options.damping ?? 0,
|
|
136
|
+
enableMotor: options.enableMotor ?? false,
|
|
137
|
+
motorSpeed: options.motorSpeed ?? 0,
|
|
138
|
+
maxMotorTorque: options.maxMotorTorque ?? 0,
|
|
139
|
+
motorImpulse: 0,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=jointFactories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jointFactories.js","sourceRoot":"","sources":["../src/jointFactories.ts"],"names":[],"mappings":"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"}
|
package/dist/step.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,cAAc,
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,cAAc,EAGf,MAAM,0BAA0B,CAAC;AA8TlC,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAoIrE"}
|
package/dist/step.js
CHANGED
|
@@ -1,67 +1,9 @@
|
|
|
1
1
|
import { collideContactManifold, createCollisionContactManifold } from '@flighthq/collision/contract';
|
|
2
|
-
import {
|
|
2
|
+
import { synchronizePhysics2DBroadphase } from './broadphase';
|
|
3
|
+
import { updatePhysics2DColliderWorldShape } from './colliderTransform';
|
|
3
4
|
import { isRigidBody2DPairAwake, updatePhysics2DSleep } from './islands';
|
|
4
5
|
import { relativeNormalVelocity, solvePhysics2DContactsOnce, warmStartPhysics2DContacts } from './solver';
|
|
5
6
|
import { findPhysics2DBody, isPhysics2DPairOrdered } from './world';
|
|
6
|
-
// Refreshes every collider's world shape and republishes its bounds to the broadphase index.
|
|
7
|
-
function updatePhysics2DBroadphase(world) {
|
|
8
|
-
for (const body of world.bodies) {
|
|
9
|
-
let minX = Infinity;
|
|
10
|
-
let minY = Infinity;
|
|
11
|
-
let maxX = -Infinity;
|
|
12
|
-
let maxY = -Infinity;
|
|
13
|
-
for (const collider of body.colliders) {
|
|
14
|
-
updatePhysics2DColliderWorldShape(collider, body);
|
|
15
|
-
writePhysics2DColliderBounds(collider, boundsScratch);
|
|
16
|
-
if (boundsScratch.minX < minX)
|
|
17
|
-
minX = boundsScratch.minX;
|
|
18
|
-
if (boundsScratch.minY < minY)
|
|
19
|
-
minY = boundsScratch.minY;
|
|
20
|
-
if (boundsScratch.maxX > maxX)
|
|
21
|
-
maxX = boundsScratch.maxX;
|
|
22
|
-
if (boundsScratch.maxY > maxY)
|
|
23
|
-
maxY = boundsScratch.maxY;
|
|
24
|
-
}
|
|
25
|
-
if (minX > maxX) {
|
|
26
|
-
// No collider produced bounds, so there is nothing to index. Withdraw rather than skip: the id
|
|
27
|
-
// may have been indexed on a previous step, and a stale AABB keeps generating pairs for a body
|
|
28
|
-
// this step has already decided not to collide.
|
|
29
|
-
world.index.removeSpatialObject(body.index);
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
// Bounds this package declines to hand to the broadphase — a physics judgement, kept as
|
|
33
|
-
// defence in depth rather than as a substitute for the index's own bound.
|
|
34
|
-
//
|
|
35
|
-
// `@flighthq/spatial` now bounds its own insert cost (non-finite bounds are declined with a
|
|
36
|
-
// sentinel, oversized ones go to a flat overflow list), so this is no longer what stands between a
|
|
37
|
-
// diverging body and a hung caller. What it still expresses is a rigid-body world's own opinion:
|
|
38
|
-
// a body that is non-finite, or ten million units across, has diverged by any measure this
|
|
39
|
-
// simulation cares about, and continuing to collide it wastes narrow-phase work on a result
|
|
40
|
-
// already meaningless. Skipping it stops that one body colliding and lets the rest of the world
|
|
41
|
-
// keep simulating.
|
|
42
|
-
//
|
|
43
|
-
// Keeping it also keeps the two packages honest about ownership: the cost bound is the index's,
|
|
44
|
-
// and this is a divergence filter that happens to share its shape.
|
|
45
|
-
if (!Number.isFinite(minX) ||
|
|
46
|
-
!Number.isFinite(minY) ||
|
|
47
|
-
!Number.isFinite(maxX) ||
|
|
48
|
-
!Number.isFinite(maxY) ||
|
|
49
|
-
maxX - minX > MAX_SIMULATED_EXTENT ||
|
|
50
|
-
maxY - minY > MAX_SIMULATED_EXTENT) {
|
|
51
|
-
// Withdraw the body from the index instead of merely skipping the update. Skipping left
|
|
52
|
-
// whatever AABB it had last step in place, so a body this filter had declared diverged went on
|
|
53
|
-
// producing broadphase pairs and holding live contacts from its last valid pose — the opposite
|
|
54
|
-
// of the "stops colliding" this comment claims. Removal is a no-op for an id never indexed.
|
|
55
|
-
world.index.removeSpatialObject(body.index);
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
bodyBounds.minX = minX;
|
|
59
|
-
bodyBounds.minY = minY;
|
|
60
|
-
bodyBounds.maxX = maxX;
|
|
61
|
-
bodyBounds.maxY = maxY;
|
|
62
|
-
world.index.updateSpatialObject(body.index, bodyBounds);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
7
|
// Builds this step's contact set from the broadphase pairs, preserving each surviving contact's cached
|
|
66
8
|
// impulses.
|
|
67
9
|
//
|
|
@@ -333,7 +275,7 @@ function effectiveMass(bodyA, bodyB, rAX, rAY, rBX, rBY, axisX, axisY) {
|
|
|
333
275
|
export function stepPhysics2D(world, dt) {
|
|
334
276
|
if (!(dt > 0))
|
|
335
277
|
return;
|
|
336
|
-
|
|
278
|
+
synchronizePhysics2DBroadphase(world);
|
|
337
279
|
buildPhysics2DContacts(world);
|
|
338
280
|
const preSolve = world.contactHooks.preSolve;
|
|
339
281
|
if (preSolve !== null) {
|
|
@@ -511,11 +453,6 @@ function comparePhysics2DContacts(left, right) {
|
|
|
511
453
|
return left.colliderA - right.colliderA;
|
|
512
454
|
return left.colliderB - right.colliderB;
|
|
513
455
|
}
|
|
514
|
-
// The widest body this world still treats as simulating. Named for what it bounds — the simulation's
|
|
515
|
-
// tolerance for divergence — not for the index, which bounds its own insert cost independently.
|
|
516
|
-
const MAX_SIMULATED_EXTENT = 1e7;
|
|
517
|
-
const boundsScratch = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
518
|
-
const bodyBounds = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
519
456
|
const pairScratch = [];
|
|
520
457
|
const manifoldScratch = createCollisionContactManifold();
|
|
521
458
|
const defaultCollisionFilter = { categoryBits: 1, maskBits: 0xffffffff, groupIndex: 0 };
|
package/dist/step.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Physics2DQueryResult, Physics2DWorld, SpatialAabb } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createPhysics2DQueryResult(): Physics2DQueryResult;
|
|
3
|
+
export declare function queryPhysics2DPoint(world: Physics2DWorld, x: number, y: number, out: Physics2DQueryResult): void;
|
|
4
|
+
export declare function queryPhysics2DRegion(world: Physics2DWorld, region: Readonly<SpatialAabb>, out: Physics2DQueryResult): void;
|
|
5
|
+
//# sourceMappingURL=worldQueries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worldQueries.d.ts","sourceRoot":"","sources":["../src/worldQueries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,oBAAoB,EACpB,cAAc,EAEd,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,0BAA0B,IAAI,oBAAoB,CAEjE;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,IAAI,CAehH;AAKD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC7B,GAAG,EAAE,oBAAoB,GACxB,IAAI,CAgBN"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { getCollisionShapeContainsPoint } from '@flighthq/collision/contract';
|
|
2
|
+
import { synchronizePhysics2DBroadphase } from './broadphase';
|
|
3
|
+
import { writePhysics2DColliderBounds } from './colliderTransform';
|
|
4
|
+
import { findPhysics2DBody } from './world';
|
|
5
|
+
// Allocates a reusable query buffer. Entries stay allocated at their high-water mark; query functions
|
|
6
|
+
// rewrite them and publish only `hitCount`, so pointer picking can run each frame without garbage.
|
|
7
|
+
export function createPhysics2DQueryResult() {
|
|
8
|
+
return { hits: [], hitCount: 0 };
|
|
9
|
+
}
|
|
10
|
+
// Writes every collider containing the world-space point. Broadphase candidates are confirmed by the
|
|
11
|
+
// collision package's exact shape predicate, so rotated boxes and convex polygons do not report their
|
|
12
|
+
// empty bounding-box corners. Results are ordered by body identity and collider array index rather than
|
|
13
|
+
// backend traversal history.
|
|
14
|
+
export function queryPhysics2DPoint(world, x, y, out) {
|
|
15
|
+
out.hitCount = 0;
|
|
16
|
+
synchronizePhysics2DBroadphase(world);
|
|
17
|
+
world.index.querySpatialPoint(x, y, candidateBodyScratch);
|
|
18
|
+
candidateBodyScratch.sort(compareNumbers);
|
|
19
|
+
for (const bodyIndex of candidateBodyScratch) {
|
|
20
|
+
const body = findPhysics2DBody(world, bodyIndex);
|
|
21
|
+
if (body === null)
|
|
22
|
+
continue;
|
|
23
|
+
for (let colliderIndex = 0; colliderIndex < body.colliders.length; colliderIndex++) {
|
|
24
|
+
const collider = body.colliders[colliderIndex];
|
|
25
|
+
if (!getCollisionShapeContainsPoint(collider.world, x, y))
|
|
26
|
+
continue;
|
|
27
|
+
writeQueryHit(out, body, collider, colliderIndex);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Writes every collider whose current world-space AABB overlaps `region`. The spatial index is over
|
|
32
|
+
// aggregate BODY bounds, so its candidates are refined per collider before publication: a region in
|
|
33
|
+
// the empty gap between two colliders on one body must not report either collider as a hit.
|
|
34
|
+
export function queryPhysics2DRegion(world, region, out) {
|
|
35
|
+
out.hitCount = 0;
|
|
36
|
+
synchronizePhysics2DBroadphase(world);
|
|
37
|
+
world.index.querySpatialRegion(region, candidateBodyScratch);
|
|
38
|
+
candidateBodyScratch.sort(compareNumbers);
|
|
39
|
+
for (const bodyIndex of candidateBodyScratch) {
|
|
40
|
+
const body = findPhysics2DBody(world, bodyIndex);
|
|
41
|
+
if (body === null)
|
|
42
|
+
continue;
|
|
43
|
+
for (let colliderIndex = 0; colliderIndex < body.colliders.length; colliderIndex++) {
|
|
44
|
+
const collider = body.colliders[colliderIndex];
|
|
45
|
+
writePhysics2DColliderBounds(collider, colliderBoundsScratch);
|
|
46
|
+
if (!boundsOverlap(colliderBoundsScratch, region))
|
|
47
|
+
continue;
|
|
48
|
+
writeQueryHit(out, body, collider, colliderIndex);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function writeQueryHit(out, body, collider, colliderIndex) {
|
|
53
|
+
const hit = out.hits[out.hitCount];
|
|
54
|
+
if (hit === undefined)
|
|
55
|
+
out.hits.push({ body, collider, colliderIndex });
|
|
56
|
+
else {
|
|
57
|
+
hit.body = body;
|
|
58
|
+
hit.collider = collider;
|
|
59
|
+
hit.colliderIndex = colliderIndex;
|
|
60
|
+
}
|
|
61
|
+
out.hitCount++;
|
|
62
|
+
}
|
|
63
|
+
function boundsOverlap(a, b) {
|
|
64
|
+
return a.minX <= b.maxX && a.maxX >= b.minX && a.minY <= b.maxY && a.maxY >= b.minY;
|
|
65
|
+
}
|
|
66
|
+
function compareNumbers(a, b) {
|
|
67
|
+
return a - b;
|
|
68
|
+
}
|
|
69
|
+
const candidateBodyScratch = [];
|
|
70
|
+
const colliderBoundsScratch = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
71
|
+
//# sourceMappingURL=worldQueries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worldQueries.js","sourceRoot":"","sources":["../src/worldQueries.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/physics2d",
|
|
3
|
-
"version": "0.3.0-next.
|
|
3
|
+
"version": "0.3.0-next.1566.dcdf1d3",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@flighthq/collision": "0.3.0-next.
|
|
40
|
-
"@flighthq/math": "0.3.0-next.
|
|
41
|
-
"@flighthq/spatial": "0.3.0-next.
|
|
42
|
-
"@flighthq/types": "0.3.0-next.
|
|
39
|
+
"@flighthq/collision": "0.3.0-next.1566.dcdf1d3",
|
|
40
|
+
"@flighthq/math": "0.3.0-next.1566.dcdf1d3",
|
|
41
|
+
"@flighthq/spatial": "0.3.0-next.1566.dcdf1d3",
|
|
42
|
+
"@flighthq/types": "0.3.0-next.1566.dcdf1d3"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"typescript": "^5.3.0"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { synchronizePhysics2DBroadphase } from './broadphase';
|
|
4
|
+
import { addPhysics2DBody, createPhysics2DCollider, createPhysics2DWorld, createRigidBody2D } from './world';
|
|
5
|
+
|
|
6
|
+
const STONE = { density: 1, friction: 0.3, restitution: 0 };
|
|
7
|
+
|
|
8
|
+
describe('synchronizePhysics2DBroadphase', () => {
|
|
9
|
+
it('publishes a body at its current pose', () => {
|
|
10
|
+
const world = createPhysics2DWorld(0, 0);
|
|
11
|
+
const body = createRigidBody2D('dynamic', 2, 3);
|
|
12
|
+
body.colliders.push(createPhysics2DCollider({ kind: 'circle', radius: 1, x: 0, y: 0 }, STONE));
|
|
13
|
+
addPhysics2DBody(world, body);
|
|
14
|
+
const found: number[] = [];
|
|
15
|
+
|
|
16
|
+
synchronizePhysics2DBroadphase(world);
|
|
17
|
+
world.index.querySpatialPoint(2, 3, found);
|
|
18
|
+
|
|
19
|
+
expect(found).toEqual([body.index]);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { explainPhysics2DJoints } from './explainPhysics2DJoints';
|
|
4
|
+
import { createPhysics2DDistanceJoint } from './jointFactories';
|
|
5
|
+
import { addPhysics2DJoint, registerPhysics2DJointSolver } from './jointRegistry';
|
|
6
|
+
import { addPhysics2DBody, createPhysics2DWorld, createRigidBody2D } from './world';
|
|
7
|
+
|
|
8
|
+
const NOOP_SOLVER = { prepare: () => {}, solve: () => {} };
|
|
9
|
+
|
|
10
|
+
describe('explainPhysics2DJoints', () => {
|
|
11
|
+
it('reports a fully resolvable world as complete', () => {
|
|
12
|
+
const world = createPhysics2DWorld();
|
|
13
|
+
registerPhysics2DJointSolver(world, 'Distance', NOOP_SOLVER);
|
|
14
|
+
const first = addPhysics2DBody(world, createRigidBody2D('dynamic', 0, 0));
|
|
15
|
+
const second = addPhysics2DBody(world, createRigidBody2D('dynamic', 1, 0));
|
|
16
|
+
addPhysics2DJoint(world, createPhysics2DDistanceJoint({ bodyA: first.index, bodyB: second.index, length: 1 }));
|
|
17
|
+
|
|
18
|
+
expect(explainPhysics2DJoints(world)).toEqual({
|
|
19
|
+
joints: [
|
|
20
|
+
{
|
|
21
|
+
bodyA: first.index,
|
|
22
|
+
bodyAFound: true,
|
|
23
|
+
bodyB: second.index,
|
|
24
|
+
bodyBFound: true,
|
|
25
|
+
jointIndex: 0,
|
|
26
|
+
kind: 'Distance',
|
|
27
|
+
solverRegistered: true,
|
|
28
|
+
status: 'ready',
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
readyCount: 1,
|
|
32
|
+
status: 'complete',
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('makes an unregistered kind and every missing endpoint observable', () => {
|
|
37
|
+
const world = createPhysics2DWorld();
|
|
38
|
+
const body = addPhysics2DBody(world, createRigidBody2D('dynamic', 0, 0));
|
|
39
|
+
addPhysics2DJoint(world, {
|
|
40
|
+
...createPhysics2DDistanceJoint({ bodyA: body.index, bodyB: 99, length: 1 }),
|
|
41
|
+
kind: 'acme.Unknown',
|
|
42
|
+
});
|
|
43
|
+
registerPhysics2DJointSolver(world, 'MissingA', NOOP_SOLVER);
|
|
44
|
+
registerPhysics2DJointSolver(world, 'MissingB', NOOP_SOLVER);
|
|
45
|
+
registerPhysics2DJointSolver(world, 'MissingBoth', NOOP_SOLVER);
|
|
46
|
+
addPhysics2DJoint(world, {
|
|
47
|
+
...createPhysics2DDistanceJoint({ bodyA: 98, bodyB: body.index, length: 1 }),
|
|
48
|
+
kind: 'MissingA',
|
|
49
|
+
});
|
|
50
|
+
addPhysics2DJoint(world, {
|
|
51
|
+
...createPhysics2DDistanceJoint({ bodyA: body.index, bodyB: 99, length: 1 }),
|
|
52
|
+
kind: 'MissingB',
|
|
53
|
+
});
|
|
54
|
+
addPhysics2DJoint(world, {
|
|
55
|
+
...createPhysics2DDistanceJoint({ bodyA: 98, bodyB: 99, length: 1 }),
|
|
56
|
+
kind: 'MissingBoth',
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const explanation = explainPhysics2DJoints(world);
|
|
60
|
+
|
|
61
|
+
expect(explanation.status).toBe('unresolved-joints');
|
|
62
|
+
expect(explanation.readyCount).toBe(0);
|
|
63
|
+
expect(explanation.joints.map((joint) => joint.status)).toEqual([
|
|
64
|
+
'solver-unregistered',
|
|
65
|
+
'body-a-missing',
|
|
66
|
+
'body-b-missing',
|
|
67
|
+
'bodies-missing',
|
|
68
|
+
]);
|
|
69
|
+
expect(explanation.joints[0]).toMatchObject({ bodyAFound: true, bodyBFound: false, solverRegistered: false });
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('recomputes current state without retaining earlier failures', () => {
|
|
73
|
+
const world = createPhysics2DWorld();
|
|
74
|
+
const first = addPhysics2DBody(world, createRigidBody2D('dynamic', 0, 0));
|
|
75
|
+
const second = addPhysics2DBody(world, createRigidBody2D('dynamic', 1, 0));
|
|
76
|
+
addPhysics2DJoint(world, {
|
|
77
|
+
...createPhysics2DDistanceJoint({ bodyA: first.index, bodyB: second.index, length: 1 }),
|
|
78
|
+
kind: 'acme.Deferred',
|
|
79
|
+
});
|
|
80
|
+
const before = explainPhysics2DJoints(world);
|
|
81
|
+
|
|
82
|
+
registerPhysics2DJointSolver(world, 'acme.Deferred', NOOP_SOLVER);
|
|
83
|
+
const after = explainPhysics2DJoints(world);
|
|
84
|
+
|
|
85
|
+
expect(before.joints[0].status).toBe('solver-unregistered');
|
|
86
|
+
expect(after.joints[0].status).toBe('ready');
|
|
87
|
+
expect(after.status).toBe('complete');
|
|
88
|
+
});
|
|
89
|
+
});
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
createPhysics2DDistanceJoint,
|
|
5
|
+
createPhysics2DGearJoint,
|
|
6
|
+
createPhysics2DMouseJoint,
|
|
7
|
+
createPhysics2DPrismaticJoint,
|
|
8
|
+
createPhysics2DPulleyJoint,
|
|
9
|
+
createPhysics2DRevoluteJoint,
|
|
10
|
+
createPhysics2DRopeJoint,
|
|
11
|
+
createPhysics2DWeldJoint,
|
|
12
|
+
createPhysics2DWheelJoint,
|
|
13
|
+
} from './jointFactories';
|
|
14
|
+
|
|
15
|
+
describe('createPhysics2DDistanceJoint', () => {
|
|
16
|
+
it('owns common defaults and solver scratch', () => {
|
|
17
|
+
expect(createPhysics2DDistanceJoint({ bodyA: 1, bodyB: 2, length: 3 })).toEqual({
|
|
18
|
+
kind: 'Distance',
|
|
19
|
+
bodyA: 1,
|
|
20
|
+
bodyB: 2,
|
|
21
|
+
localAnchorAX: 0,
|
|
22
|
+
localAnchorAY: 0,
|
|
23
|
+
localAnchorBX: 0,
|
|
24
|
+
localAnchorBY: 0,
|
|
25
|
+
collideConnected: false,
|
|
26
|
+
impulse0: 0,
|
|
27
|
+
impulse1: 0,
|
|
28
|
+
impulse2: 0,
|
|
29
|
+
rAX: 0,
|
|
30
|
+
rAY: 0,
|
|
31
|
+
rBX: 0,
|
|
32
|
+
rBY: 0,
|
|
33
|
+
length: 3,
|
|
34
|
+
stiffness: 0,
|
|
35
|
+
damping: 0,
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('createPhysics2DGearJoint', () => {
|
|
41
|
+
it('requires coordinate semantics and defaults both linear axes', () => {
|
|
42
|
+
expect(
|
|
43
|
+
createPhysics2DGearJoint({
|
|
44
|
+
bodyA: 1,
|
|
45
|
+
bodyB: 2,
|
|
46
|
+
coordinateA: 'angular',
|
|
47
|
+
coordinateB: 'linear',
|
|
48
|
+
constant: 0,
|
|
49
|
+
}),
|
|
50
|
+
).toMatchObject({ axisAX: 1, axisAY: 0, axisBX: 1, axisBY: 0, kind: 'Gear', ratio: 1 });
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe('createPhysics2DMouseJoint', () => {
|
|
55
|
+
it('hides the dummy endpoint and owns stable drag defaults', () => {
|
|
56
|
+
const joint = createPhysics2DMouseJoint({ body: 7, targetX: 3, targetY: 4, maxForce: 100 });
|
|
57
|
+
expect(joint).toMatchObject({ bodyA: 7, bodyB: 7, damping: 0.7, kind: 'Mouse', stiffness: 5 });
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
describe('createPhysics2DPrismaticJoint', () => {
|
|
62
|
+
it('preserves authored controls while initializing motor scratch', () => {
|
|
63
|
+
expect(
|
|
64
|
+
createPhysics2DPrismaticJoint({
|
|
65
|
+
bodyA: 3,
|
|
66
|
+
bodyB: 4,
|
|
67
|
+
localAnchorAX: 1,
|
|
68
|
+
collideConnected: true,
|
|
69
|
+
localAxisAX: 0,
|
|
70
|
+
localAxisAY: -1,
|
|
71
|
+
enableMotor: true,
|
|
72
|
+
motorSpeed: 2,
|
|
73
|
+
maxMotorForce: 8,
|
|
74
|
+
enableLimit: true,
|
|
75
|
+
lowerTranslation: -3,
|
|
76
|
+
upperTranslation: 5,
|
|
77
|
+
}),
|
|
78
|
+
).toMatchObject({
|
|
79
|
+
collideConnected: true,
|
|
80
|
+
enableLimit: true,
|
|
81
|
+
enableMotor: true,
|
|
82
|
+
kind: 'Prismatic',
|
|
83
|
+
localAnchorAX: 1,
|
|
84
|
+
localAxisAX: 0,
|
|
85
|
+
localAxisAY: -1,
|
|
86
|
+
lowerTranslation: -3,
|
|
87
|
+
maxMotorForce: 8,
|
|
88
|
+
motorImpulse: 0,
|
|
89
|
+
motorSpeed: 2,
|
|
90
|
+
upperTranslation: 5,
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
describe('createPhysics2DPulleyJoint', () => {
|
|
96
|
+
it('defaults the ratio while retaining required world anchors', () => {
|
|
97
|
+
expect(
|
|
98
|
+
createPhysics2DPulleyJoint({
|
|
99
|
+
bodyA: 1,
|
|
100
|
+
bodyB: 2,
|
|
101
|
+
groundAnchorAX: -1,
|
|
102
|
+
groundAnchorAY: 2,
|
|
103
|
+
groundAnchorBX: 1,
|
|
104
|
+
groundAnchorBY: 2,
|
|
105
|
+
constant: 6,
|
|
106
|
+
}),
|
|
107
|
+
).toMatchObject({ groundAnchorAX: -1, groundAnchorBX: 1, kind: 'Pulley', ratio: 1 });
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
describe('createPhysics2DRevoluteJoint', () => {
|
|
112
|
+
it('starts with inactive motor and limits', () => {
|
|
113
|
+
expect(createPhysics2DRevoluteJoint({ bodyA: 1, bodyB: 2 })).toMatchObject({
|
|
114
|
+
enableLimit: false,
|
|
115
|
+
enableMotor: false,
|
|
116
|
+
kind: 'Revolute',
|
|
117
|
+
motorImpulse: 0,
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
describe('createPhysics2DRopeJoint', () => {
|
|
123
|
+
it('requires the authored maximum length', () => {
|
|
124
|
+
expect(createPhysics2DRopeJoint({ bodyA: 1, bodyB: 2, maxLength: 4 })).toMatchObject({
|
|
125
|
+
kind: 'Rope',
|
|
126
|
+
maxLength: 4,
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe('createPhysics2DWeldJoint', () => {
|
|
132
|
+
it('defaults the reference pose to zero relative angle', () => {
|
|
133
|
+
expect(createPhysics2DWeldJoint({ bodyA: 1, bodyB: 2 })).toMatchObject({
|
|
134
|
+
kind: 'Weld',
|
|
135
|
+
referenceAngle: 0,
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
describe('createPhysics2DWheelJoint', () => {
|
|
141
|
+
it('defaults to a vertical free suspension with no motor', () => {
|
|
142
|
+
expect(createPhysics2DWheelJoint({ bodyA: 1, bodyB: 2 })).toMatchObject({
|
|
143
|
+
enableMotor: false,
|
|
144
|
+
kind: 'Wheel',
|
|
145
|
+
localAxisAX: 0,
|
|
146
|
+
localAxisAY: 1,
|
|
147
|
+
motorImpulse: 0,
|
|
148
|
+
stiffness: 0,
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { addPhysics2DBody, createPhysics2DCollider, createPhysics2DWorld, createRigidBody2D } from './world';
|
|
4
|
+
import { createPhysics2DQueryResult, queryPhysics2DPoint, queryPhysics2DRegion } from './worldQueries';
|
|
5
|
+
|
|
6
|
+
const STONE = { density: 1, friction: 0.3, restitution: 0 };
|
|
7
|
+
|
|
8
|
+
describe('createPhysics2DQueryResult', () => {
|
|
9
|
+
it('starts with no live hits', () => {
|
|
10
|
+
expect(createPhysics2DQueryResult()).toEqual({ hits: [], hitCount: 0 });
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
describe('queryPhysics2DPoint', () => {
|
|
15
|
+
it('returns exact collider hits rather than broadphase-only body hits', () => {
|
|
16
|
+
const world = createPhysics2DWorld(0, 0);
|
|
17
|
+
const body = createRigidBody2D('dynamic', 0, 0, Math.PI / 4);
|
|
18
|
+
body.colliders.push(createPhysics2DCollider({ kind: 'aabb', minX: -2, minY: -0.25, maxX: 2, maxY: 0.25 }, STONE));
|
|
19
|
+
addPhysics2DBody(world, body);
|
|
20
|
+
const out = createPhysics2DQueryResult();
|
|
21
|
+
|
|
22
|
+
queryPhysics2DPoint(world, 1, 0, out);
|
|
23
|
+
expect(out.hitCount).toBe(0);
|
|
24
|
+
queryPhysics2DPoint(world, 1, 1, out);
|
|
25
|
+
|
|
26
|
+
expect(out.hitCount).toBe(1);
|
|
27
|
+
expect(out.hits[0]).toEqual({ body, collider: body.colliders[0], colliderIndex: 0 });
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('observes current poses and reuses its high-water hit object', () => {
|
|
31
|
+
const world = createPhysics2DWorld(0, 0);
|
|
32
|
+
const body = createRigidBody2D('dynamic', 0, 0);
|
|
33
|
+
body.colliders.push(createPhysics2DCollider({ kind: 'circle', radius: 1, x: 0, y: 0 }, STONE));
|
|
34
|
+
addPhysics2DBody(world, body);
|
|
35
|
+
const out = createPhysics2DQueryResult();
|
|
36
|
+
|
|
37
|
+
queryPhysics2DPoint(world, 0, 0, out);
|
|
38
|
+
const retainedHit = out.hits[0];
|
|
39
|
+
body.x = 5;
|
|
40
|
+
queryPhysics2DPoint(world, 0, 0, out);
|
|
41
|
+
expect(out.hitCount).toBe(0);
|
|
42
|
+
queryPhysics2DPoint(world, 5, 0, out);
|
|
43
|
+
|
|
44
|
+
expect(out.hitCount).toBe(1);
|
|
45
|
+
expect(out.hits[0]).toBe(retainedHit);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('reports every containing collider in deterministic order', () => {
|
|
49
|
+
const world = createPhysics2DWorld(0, 0);
|
|
50
|
+
const first = createRigidBody2D('dynamic', 0, 0);
|
|
51
|
+
first.colliders.push(
|
|
52
|
+
createPhysics2DCollider({ kind: 'circle', radius: 2, x: 0, y: 0 }, STONE),
|
|
53
|
+
createPhysics2DCollider({ kind: 'circle', radius: 1, x: 0, y: 0 }, STONE),
|
|
54
|
+
);
|
|
55
|
+
const second = createRigidBody2D('dynamic', 0, 0);
|
|
56
|
+
second.colliders.push(createPhysics2DCollider({ kind: 'circle', radius: 1, x: 0, y: 0 }, STONE));
|
|
57
|
+
addPhysics2DBody(world, first);
|
|
58
|
+
addPhysics2DBody(world, second);
|
|
59
|
+
const out = createPhysics2DQueryResult();
|
|
60
|
+
|
|
61
|
+
queryPhysics2DPoint(world, 0, 0, out);
|
|
62
|
+
|
|
63
|
+
expect(out.hits.slice(0, out.hitCount).map((hit) => [hit.body.index, hit.colliderIndex])).toEqual([
|
|
64
|
+
[first.index, 0],
|
|
65
|
+
[first.index, 1],
|
|
66
|
+
[second.index, 0],
|
|
67
|
+
]);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
describe('queryPhysics2DRegion', () => {
|
|
72
|
+
it('refines aggregate body candidates to overlapping collider bounds', () => {
|
|
73
|
+
const world = createPhysics2DWorld(0, 0);
|
|
74
|
+
const body = createRigidBody2D('dynamic', 0, 0);
|
|
75
|
+
body.colliders.push(
|
|
76
|
+
createPhysics2DCollider({ kind: 'circle', radius: 1, x: -5, y: 0 }, STONE),
|
|
77
|
+
createPhysics2DCollider({ kind: 'circle', radius: 1, x: 5, y: 0 }, STONE),
|
|
78
|
+
);
|
|
79
|
+
addPhysics2DBody(world, body);
|
|
80
|
+
const out = createPhysics2DQueryResult();
|
|
81
|
+
|
|
82
|
+
queryPhysics2DRegion(world, { minX: -0.5, minY: -0.5, maxX: 0.5, maxY: 0.5 }, out);
|
|
83
|
+
expect(out.hitCount).toBe(0);
|
|
84
|
+
|
|
85
|
+
queryPhysics2DRegion(world, { minX: 4.5, minY: -0.5, maxX: 5.5, maxY: 0.5 }, out);
|
|
86
|
+
expect(out.hitCount).toBe(1);
|
|
87
|
+
expect(out.hits[0]).toEqual({ body, collider: body.colliders[1], colliderIndex: 1 });
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('uses current poses and preserves deterministic body/collider order', () => {
|
|
91
|
+
const world = createPhysics2DWorld(0, 0);
|
|
92
|
+
const first = createRigidBody2D('dynamic', -10, 0);
|
|
93
|
+
first.colliders.push(
|
|
94
|
+
createPhysics2DCollider({ kind: 'circle', radius: 1, x: 0, y: 0 }, STONE),
|
|
95
|
+
createPhysics2DCollider({ kind: 'circle', radius: 0.5, x: 0, y: 0 }, STONE),
|
|
96
|
+
);
|
|
97
|
+
const second = createRigidBody2D('dynamic', 0, 0);
|
|
98
|
+
second.colliders.push(createPhysics2DCollider({ kind: 'circle', radius: 1, x: 0, y: 0 }, STONE));
|
|
99
|
+
addPhysics2DBody(world, first);
|
|
100
|
+
addPhysics2DBody(world, second);
|
|
101
|
+
first.x = 0;
|
|
102
|
+
const out = createPhysics2DQueryResult();
|
|
103
|
+
|
|
104
|
+
queryPhysics2DRegion(world, { minX: -0.25, minY: -0.25, maxX: 0.25, maxY: 0.25 }, out);
|
|
105
|
+
|
|
106
|
+
expect(out.hits.slice(0, out.hitCount).map((hit) => [hit.body.index, hit.colliderIndex])).toEqual([
|
|
107
|
+
[first.index, 0],
|
|
108
|
+
[first.index, 1],
|
|
109
|
+
[second.index, 0],
|
|
110
|
+
]);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('clears live hits for an empty region while retaining high-water storage', () => {
|
|
114
|
+
const world = createPhysics2DWorld(0, 0);
|
|
115
|
+
const body = createRigidBody2D('dynamic', 0, 0);
|
|
116
|
+
body.colliders.push(createPhysics2DCollider({ kind: 'circle', radius: 1, x: 0, y: 0 }, STONE));
|
|
117
|
+
addPhysics2DBody(world, body);
|
|
118
|
+
const out = createPhysics2DQueryResult();
|
|
119
|
+
queryPhysics2DRegion(world, { minX: -1, minY: -1, maxX: 1, maxY: 1 }, out);
|
|
120
|
+
const retained = out.hits[0];
|
|
121
|
+
|
|
122
|
+
queryPhysics2DRegion(world, { minX: 10, minY: 10, maxX: 11, maxY: 11 }, out);
|
|
123
|
+
|
|
124
|
+
expect(out.hitCount).toBe(0);
|
|
125
|
+
expect(out.hits[0]).toBe(retained);
|
|
126
|
+
});
|
|
127
|
+
});
|