@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.
@@ -0,0 +1,3 @@
1
+ import type { Physics2DWorld } from '@flighthq/types/contract';
2
+ export declare function synchronizePhysics2DBroadphase(world: Physics2DWorld): void;
3
+ //# sourceMappingURL=broadphase.d.ts.map
@@ -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"}
@@ -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
@@ -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
@@ -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,3 @@
1
+ import type { Physics2DJointResolutionExplanation, Physics2DWorld } from '@flighthq/types/contract';
2
+ export declare function explainPhysics2DJoints(world: Readonly<Physics2DWorld>): Physics2DJointResolutionExplanation;
3
+ //# sourceMappingURL=explainPhysics2DJoints.d.ts.map
@@ -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
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,cAAc,EAIf,MAAM,0BAA0B,CAAC;AAuXlC,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAoIrE"}
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 { updatePhysics2DColliderWorldShape, writePhysics2DColliderBounds } from './colliderTransform';
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
- updatePhysics2DBroadphase(world);
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":"AAAA,OAAO,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAWtG,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAC1G,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEpE,uGAAuG;AACvG,YAAY;AACZ,EAAE;AACF,uEAAuE;AACvE,EAAE;AACF,wGAAwG;AACxG,yGAAyG;AACzG,uFAAuF;AACvF,6FAA6F;AAC7F,yGAAyG;AACzG,qGAAqG;AACrG,EAAE;AACF,qGAAqG;AACrG,iGAAiG;AACjG,SAAS,sBAAsB,CAAC,KAAqB;IACnD,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE3C,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;IAE/D,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;YAAE,SAAS;QAChD,4FAA4F;QAC5F,iGAAiG;QACjG,iGAAiG;QACjG,+FAA+F;QAC/F,4FAA4F;QAC5F,yFAAyF;QACzF,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC,CAAC;QAC1E,IAAI,aAAa,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7E,SAAS;QACX,CAAC;QACD,6FAA6F;QAC7F,+FAA+F;QAC/F,IAAI,8BAA8B,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YAAE,SAAS;QAE/E,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,8BAA8B,CAAC,SAAS,EAAE,SAAS,CAAC;oBAAE,SAAS;gBACpE,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC;gBACxD,+FAA+F;gBAC/F,6FAA6F;gBAC7F,2FAA2F;gBAC3F,6FAA6F;gBAC7F,+DAA+D;gBAC/D,IAAI,aAAa,IAAI,CAAC,UAAU;oBAAE,SAAS;gBAC3C,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;oBAAE,SAAS;gBACzF,qBAAqB,CACnB,KAAK,EACL,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,EACX,CAAC,EACD,CAAC,EACD,eAAe,EACf,UAAU,EACV,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC/D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CACzE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,mGAAmG;IACnG,wGAAwG;IACxG,0EAA0E;IAC1E,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,8BAA8B,CACrC,SAAqD,EACrD,SAAqD;IAErD,qGAAqG;IACrG,gFAAgF;IAChF,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,IAAI,sBAAsB,CAAC;IAC3D,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,IAAI,sBAAsB,CAAC;IAC3D,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU;QAAE,OAAO,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;IACzG,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5G,CAAC;AAED,wGAAwG;AACxG,wGAAwG;AACxG,yGAAyG;AACzG,0EAA0E;AAC1E,SAAS,qBAAqB,CAC5B,KAAqB,EACrB,KAAa,EACb,KAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,QAA4C,EAC5C,MAAe,EACf,QAAgB,EAChB,WAAmB;IAEnB,IAAI,OAAO,GAA4B,IAAI,CAAC;IAC5C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACtC,IACE,QAAQ,CAAC,KAAK,KAAK,KAAK;YACxB,QAAQ,CAAC,KAAK,KAAK,KAAK;YACxB,QAAQ,CAAC,SAAS,KAAK,SAAS;YAChC,QAAQ,CAAC,SAAS,KAAK,SAAS,EAChC,CAAC;YACD,OAAO,GAAG,QAAQ,CAAC;YACnB,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,GAAG;YACR,KAAK;YACL,KAAK;YACL,SAAS;YACT,SAAS;YACT,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,CAAC,2BAA2B,EAAE,EAAE,2BAA2B,EAAE,CAAC;YACtE,QAAQ;YACR,WAAW;YACX,OAAO,EAAE,IAAI;YACb,MAAM;YACN,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO;QAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE9C,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACnC,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACnC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5B,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;IAClC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAExB,qGAAqG;IACrG,qGAAqG;IACrG,mGAAmG;IACnG,gFAAgF;IAChF,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IACzC,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,aAAa,GAAG,CAAC,IAAI,WAAW,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1D,aAAa,GAAG,UAAU,CAAC;YAC3B,cAAc,GAAG,WAAW,CAAC;QAC/B,CAAC;aAAM,IAAI,aAAa,GAAG,CAAC,IAAI,WAAW,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;YACjE,aAAa,GAAG,UAAU,CAAC;YAC3B,cAAc,GAAG,WAAW,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACpC,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;QACrC,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;IACD,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC3C,CAAC;AAED,qGAAqG;AACrG,sGAAsG;AACtG,2BAA2B;AAC3B,SAAS,2BAA2B,CAAC,KAAqB;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM;YAAE,SAAS;QACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAE/C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzG,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzG,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzG,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEzG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC;QAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC;QAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC/B,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC/B,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC/B,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YAE/B,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7G,KAAK,CAAC,WAAW,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEhH,mGAAmG;YACnG,mDAAmD;YACnD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/E,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,mGAAmG;AACnG,sGAAsG;AACtG,oGAAoG;AACpG,8FAA8F;AAC9F,SAAS,2BAA2B,CAAC,KAAqB;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM;YAAE,SAAS;QACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAC/C,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC;YAAE,SAAS;QAEpD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACjE,iCAAiC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpD,iCAAiC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;YAAE,SAAS;QAEzF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;QACxC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC;YACpD,IAAI,MAAM,IAAI,CAAC;gBAAE,SAAS;YAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzG,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzG,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzG,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzG,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC;YAC/B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAAC;YAC1D,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;YACnC,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;YAEnC,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;YACxC,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;YACxC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC;YACxE,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;YACxC,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC;YACxC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;AACH,CAAC;AAED,mGAAmG;AACnG,qGAAqG;AACrG,yGAAyG;AACzG,sFAAsF;AACtF,SAAS,aAAa,CACpB,KAA4B,EAC5B,KAA4B,EAC5B,GAAW,EACX,GAAW,EACX,GAAW,EACX,GAAW,EACX,KAAa,EACb,KAAa;IAEb,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;IACzC,MAAM,KAAK,GACT,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,cAAc,GAAG,MAAM,GAAG,MAAM;QACtC,KAAK,CAAC,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,uGAAuG;AACvG,sGAAsG;AACtG,qCAAqC;AACrC,EAAE;AACF,oGAAoG;AACpG,qGAAqG;AACrG,sGAAsG;AACtG,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,KAAqB,EAAE,EAAU;IAC7D,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO;IAEtB,8BAA8B,CAAC,KAAK,CAAC,CAAC;IACtC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAE9B,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC7C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,MAAM;gBAAE,SAAS;YAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACzB,kGAAkG;YAClG,iGAAiG;YACjG,gFAAgF;YAChF,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC5C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;oBACpC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,sGAAsG;IACtG,uGAAuG;IACvG,uGAAuG;IACvG,kEAAkE;IAClE,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ;YAAE,SAAS;QACvD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QAC7F,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QAC7F,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAC/D,oGAAoG;QACpG,kGAAkG;QAClG,0BAA0B;QAC1B,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QAC9C,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IACvD,CAAC;IAED,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;YAAE,SAAS;QACnD,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,qGAAqG;IACrG,iGAAiG;IACjG,iGAAiG;IACjG,+FAA+F;IAC/F,yFAAyF;IACzF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,gGAAgG;QAChG,mGAAmG;QACnG,mGAAmG;QACnG,gGAAgG;QAChG,+FAA+F;QAC/F,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;gBACpC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IACD,oGAAoG;IACpG,sGAAsG;IACtG,oGAAoG;IACpG,iGAAiG;IACjG,iGAAiG;IACjG,oGAAoG;IACpG,4FAA4F;IAC5F,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,gGAAgG;QAChG,6FAA6F;QAC7F,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;YAAE,SAAS;QACnD,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1D,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,wBAAwB,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,oGAAoG;IACpG,wGAAwG;IACxG,uDAAuD;IACvD,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,kBAAkB,EAAE,SAAS,EAAE,EAAE,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;gBAAE,SAAS;YACnD,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;QACD,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;IAC/C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM;gBAAE,SAAS;YACjD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC;gBAAE,SAAS;YACxF,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,sGAAsG;IACtG,qGAAqG;IACrG,sGAAsG;IACtG,qGAAqG;IACrG,6FAA6F;IAC7F,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ;YAAE,SAAS;QACtD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,kBAAkB,EAAE,SAAS,EAAE,EAAE,CAAC;QAC3E,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B;IAClC,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,CAAC;QACZ,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,CAAC;QACN,aAAa,EAAE,CAAC;QAChB,cAAc,EAAE,CAAC;QACjB,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,CAAC;QACd,IAAI,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,qGAAqG;AACrG,2FAA2F;AAC3F,SAAS,qBAAqB,CAAC,KAA+B,EAAE,KAA+B;IAC7F,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,mGAAmG;AACnG,iGAAiG;AACjG,SAAS,iBAAiB,CAAC,IAA2B;IACpD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wGAAwG;AACxG,mFAAmF;AACnF,SAAS,wBAAwB,CAAC,IAAgC,EAAE,KAAiC;IACnG,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAChE,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAChE,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAChF,OAAO,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAC1C,CAAC;AAED,MAAM,WAAW,GAAkB,EAAE,CAAC;AACtC,MAAM,eAAe,GAA6B,8BAA8B,EAAE,CAAC;AACnF,MAAM,sBAAsB,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AAExF,qEAAqE;AACrE,SAAS,8BAA8B,CAAC,KAA+B,EAAE,KAAa,EAAE,MAAc;IACpG,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,gBAAgB;YAAE,SAAS;QACrC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,CAAC;YAC3G,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -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.1560.03a2b36",
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.1560.03a2b36",
40
- "@flighthq/math": "0.3.0-next.1560.03a2b36",
41
- "@flighthq/spatial": "0.3.0-next.1560.03a2b36",
42
- "@flighthq/types": "0.3.0-next.1560.03a2b36"
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
+ });