@flighthq/physics2d 0.3.0-next.1601.12b771e → 0.3.0-next.1665.6235922
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 +1 -0
- package/dist/broadphase.d.ts.map +1 -1
- package/dist/broadphase.js +39 -0
- package/dist/broadphase.js.map +1 -1
- package/dist/contract.d.ts +3 -2
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +3 -2
- package/dist/contract.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/islands.d.ts +8 -0
- package/dist/islands.d.ts.map +1 -1
- package/dist/islands.js +143 -16
- package/dist/islands.js.map +1 -1
- package/dist/jointCollisionSuppression.d.ts +4 -0
- package/dist/jointCollisionSuppression.d.ts.map +1 -0
- package/dist/jointCollisionSuppression.js +30 -0
- package/dist/jointCollisionSuppression.js.map +1 -0
- package/dist/jointRegistry.d.ts.map +1 -1
- package/dist/jointRegistry.js +10 -1
- package/dist/jointRegistry.js.map +1 -1
- package/dist/massProperties.js +1 -1
- package/dist/massProperties.js.map +1 -1
- package/dist/material.d.ts +3 -0
- package/dist/material.d.ts.map +1 -0
- package/dist/material.js +13 -0
- package/dist/material.js.map +1 -0
- package/dist/ownership.d.ts +3 -0
- package/dist/ownership.d.ts.map +1 -1
- package/dist/ownership.js +15 -0
- package/dist/ownership.js.map +1 -1
- package/dist/solver.d.ts +2 -0
- package/dist/solver.d.ts.map +1 -1
- package/dist/solver.js +45 -30
- package/dist/solver.js.map +1 -1
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +461 -97
- package/dist/step.js.map +1 -1
- package/dist/stepValidation.d.ts +2 -1
- package/dist/stepValidation.d.ts.map +1 -1
- package/dist/stepValidation.js +42 -34
- package/dist/stepValidation.js.map +1 -1
- package/dist/world.d.ts +5 -0
- package/dist/world.d.ts.map +1 -1
- package/dist/world.js +146 -8
- package/dist/world.js.map +1 -1
- package/dist/worldQueries.d.ts +6 -4
- package/dist/worldQueries.d.ts.map +1 -1
- package/dist/worldQueries.js +85 -8
- package/dist/worldQueries.js.map +1 -1
- package/package.json +5 -5
- package/src/broadphase.test.ts +44 -1
- package/src/islands.test.ts +82 -1
- package/src/jointCollisionSuppression.test.ts +38 -0
- package/src/jointRegistry.test.ts +29 -0
- package/src/massProperties.test.ts +11 -0
- package/src/material.test.ts +28 -0
- package/src/ownership.test.ts +35 -0
- package/src/solver.test.ts +59 -1
- package/src/step.test.ts +304 -1
- package/src/stepValidation.test.ts +41 -0
- package/src/stress.test.ts +186 -0
- package/src/world.test.ts +166 -0
- package/src/worldQueries.test.ts +93 -0
package/dist/broadphase.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { Physics2DWorld } from '@flighthq/types/contract';
|
|
2
2
|
export declare function synchronizePhysics2DBroadphase(world: Physics2DWorld): void;
|
|
3
|
+
export declare function synchronizePhysics2DSweptBroadphase(world: Physics2DWorld, dt: number): void;
|
|
3
4
|
//# sourceMappingURL=broadphase.d.ts.map
|
package/dist/broadphase.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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,CAE1E;AAKD,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAE3F"}
|
package/dist/broadphase.js
CHANGED
|
@@ -3,11 +3,21 @@ import { updatePhysics2DColliderWorldShape, writePhysics2DColliderBounds } from
|
|
|
3
3
|
// and public world queries share this path so a query observes the body's current authored pose, not
|
|
4
4
|
// the pre-integration snapshot used to build the most recent contact set.
|
|
5
5
|
export function synchronizePhysics2DBroadphase(world) {
|
|
6
|
+
synchronizePhysics2DBroadphaseBounds(world, 0);
|
|
7
|
+
}
|
|
8
|
+
// Publishes the union of every body's current and linearly translated bounds for one CCD interval.
|
|
9
|
+
// The ordinary index is reused deliberately: a step queries the candidate pairs immediately and then
|
|
10
|
+
// restores current bounds, avoiding a second hidden index while retaining the backend swap point.
|
|
11
|
+
export function synchronizePhysics2DSweptBroadphase(world, dt) {
|
|
12
|
+
synchronizePhysics2DBroadphaseBounds(world, dt);
|
|
13
|
+
}
|
|
14
|
+
function synchronizePhysics2DBroadphaseBounds(world, dt) {
|
|
6
15
|
for (const body of world.bodies) {
|
|
7
16
|
let minX = Infinity;
|
|
8
17
|
let minY = Infinity;
|
|
9
18
|
let maxX = -Infinity;
|
|
10
19
|
let maxY = -Infinity;
|
|
20
|
+
let rotationRadiusSquared = 0;
|
|
11
21
|
for (const collider of body.colliders) {
|
|
12
22
|
updatePhysics2DColliderWorldShape(collider, body);
|
|
13
23
|
writePhysics2DColliderBounds(collider, boundsScratch);
|
|
@@ -19,6 +29,11 @@ export function synchronizePhysics2DBroadphase(world) {
|
|
|
19
29
|
maxX = boundsScratch.maxX;
|
|
20
30
|
if (boundsScratch.maxY > maxY)
|
|
21
31
|
maxY = boundsScratch.maxY;
|
|
32
|
+
const radiusX = Math.max(Math.abs(boundsScratch.minX - body.x), Math.abs(boundsScratch.maxX - body.x));
|
|
33
|
+
const radiusY = Math.max(Math.abs(boundsScratch.minY - body.y), Math.abs(boundsScratch.maxY - body.y));
|
|
34
|
+
const radiusSquared = radiusX * radiusX + radiusY * radiusY;
|
|
35
|
+
if (radiusSquared > rotationRadiusSquared)
|
|
36
|
+
rotationRadiusSquared = radiusSquared;
|
|
22
37
|
}
|
|
23
38
|
if (minX > maxX) {
|
|
24
39
|
// No collider produced bounds, so there is nothing to index. Withdraw rather than skip: the id
|
|
@@ -26,6 +41,30 @@ export function synchronizePhysics2DBroadphase(world) {
|
|
|
26
41
|
world.index.removeSpatialObject(body.index);
|
|
27
42
|
continue;
|
|
28
43
|
}
|
|
44
|
+
if (dt > 0 && body.type !== 'static' && !body.sleeping) {
|
|
45
|
+
const translationX = body.velocityX * dt;
|
|
46
|
+
const translationY = body.velocityY * dt;
|
|
47
|
+
if (body.angularVelocity !== 0) {
|
|
48
|
+
// A circle around the body origin encloses every orientation of every collider. Sweeping that
|
|
49
|
+
// circle along the origin's translation is conservative for arbitrary rotation, including an
|
|
50
|
+
// offset circle whose centre follows an arc rather than the linear path used by shape sweep.
|
|
51
|
+
const radius = Math.sqrt(rotationRadiusSquared);
|
|
52
|
+
minX = Math.min(minX, body.x - radius, body.x + translationX - radius);
|
|
53
|
+
minY = Math.min(minY, body.y - radius, body.y + translationY - radius);
|
|
54
|
+
maxX = Math.max(maxX, body.x + radius, body.x + translationX + radius);
|
|
55
|
+
maxY = Math.max(maxY, body.y + radius, body.y + translationY + radius);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
if (translationX < 0)
|
|
59
|
+
minX += translationX;
|
|
60
|
+
else
|
|
61
|
+
maxX += translationX;
|
|
62
|
+
if (translationY < 0)
|
|
63
|
+
minY += translationY;
|
|
64
|
+
else
|
|
65
|
+
maxY += translationY;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
29
68
|
// The spatial package bounds its own indexing cost. This second limit expresses the physics
|
|
30
69
|
// world's stricter judgement that a non-finite or ten-million-unit body has diverged and should no
|
|
31
70
|
// longer participate in collision or queries.
|
package/dist/broadphase.js.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"broadphase.js","sourceRoot":"","sources":["../src/broadphase.ts"],"names":[],"mappings":"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"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
export * from './colliderTransform';
|
|
2
2
|
export * from './explainPhysics2DJoints';
|
|
3
3
|
export * from './explainPhysics2DStep';
|
|
4
|
-
export
|
|
4
|
+
export { isRigidBody2DPairAwake, updatePhysics2DSleep, wakePhysics2DBody } from './islands';
|
|
5
5
|
export * from './jointFactories';
|
|
6
6
|
export * from './jointRegistry';
|
|
7
7
|
export * from './joints';
|
|
8
8
|
export * from './massProperties';
|
|
9
|
+
export * from './material';
|
|
9
10
|
export * from './registerBuiltInPhysics2DJointSolvers';
|
|
10
|
-
export
|
|
11
|
+
export { applyPhysics2DImpulse, relativeNormalVelocity, solvePhysics2DContacts, solvePhysics2DContactsOnce, warmStartPhysics2DContacts, } from './solver';
|
|
11
12
|
export * from './step';
|
|
12
13
|
export * from './world';
|
|
13
14
|
export * from './worldQueries';
|
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,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5F,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,wCAAwC,CAAC;AACvD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAClB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
|
package/dist/contract.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
export * from './colliderTransform';
|
|
2
2
|
export * from './explainPhysics2DJoints';
|
|
3
3
|
export * from './explainPhysics2DStep';
|
|
4
|
-
export
|
|
4
|
+
export { isRigidBody2DPairAwake, updatePhysics2DSleep, wakePhysics2DBody } from './islands';
|
|
5
5
|
export * from './jointFactories';
|
|
6
6
|
export * from './jointRegistry';
|
|
7
7
|
export * from './joints';
|
|
8
8
|
export * from './massProperties';
|
|
9
|
+
export * from './material';
|
|
9
10
|
export * from './registerBuiltInPhysics2DJointSolvers';
|
|
10
|
-
export
|
|
11
|
+
export { applyPhysics2DImpulse, relativeNormalVelocity, solvePhysics2DContacts, solvePhysics2DContactsOnce, warmStartPhysics2DContacts, } from './solver';
|
|
11
12
|
export * from './step';
|
|
12
13
|
export * from './world';
|
|
13
14
|
export * from './worldQueries';
|
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,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5F,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,wCAAwC,CAAC;AACvD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAClB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,9 +7,10 @@ export { createPhysics2DDistanceJoint, createPhysics2DGearJoint, createPhysics2D
|
|
|
7
7
|
export { Physics2DDistanceJointKind, Physics2DGearJointKind, Physics2DMouseJointKind, Physics2DPrismaticJointKind, Physics2DPulleyJointKind, Physics2DRevoluteJointKind, Physics2DRopeJointKind, Physics2DWheelJointKind, Physics2DWeldJointKind, physics2DDistanceJointSolver, physics2DGearJointSolver, physics2DMouseJointSolver, physics2DPrismaticJointSolver, physics2DPulleyJointSolver, physics2DRevoluteJointSolver, physics2DRopeJointSolver, physics2DWheelJointSolver, physics2DWeldJointSolver, } from './joints';
|
|
8
8
|
export { addPhysics2DJoint, getPhysics2DJointSolver, invalidatePhysics2DJoint, registerPhysics2DJointSolver, removePhysics2DJoint, } from './jointRegistry';
|
|
9
9
|
export { computePhysics2DColliderMassData, updateRigidBody2DMassData } from './massProperties';
|
|
10
|
+
export { mixPhysics2DFriction, mixPhysics2DRestitution } from './material';
|
|
10
11
|
export { registerBuiltInPhysics2DJointSolvers } from './registerBuiltInPhysics2DJointSolvers';
|
|
11
12
|
export { applyPhysics2DImpulse, relativeNormalVelocity, solvePhysics2DContacts, solvePhysics2DContactsOnce, warmStartPhysics2DContacts, } from './solver';
|
|
12
13
|
export { stepPhysics2D } from './step';
|
|
13
|
-
export { addPhysics2DBody, addPhysics2DCollider, applyPhysics2DForce, applyPhysics2DForceAtPoint, applyPhysics2DLinearImpulse, applyPhysics2DLinearImpulseAtPoint, applyPhysics2DTorque, findPhysics2DBody, createPhysics2DCollider, createPhysics2DSolverConfig, createPhysics2DWorld, createRigidBody2D, invalidatePhysics2DCollider, isPhysics2DPairOrdered, removePhysics2DBody, removePhysics2DCollider, setPhysics2DBodyTransform, setPhysics2DBodyType, } from './world';
|
|
14
|
-
export { createPhysics2DQueryResult, createPhysics2DRayResult, queryPhysics2DPoint, queryPhysics2DRay, queryPhysics2DRegion, } from './worldQueries';
|
|
14
|
+
export { addPhysics2DBody, addPhysics2DCollider, applyPhysics2DForce, applyPhysics2DForceAtPoint, applyPhysics2DLinearImpulse, applyPhysics2DLinearImpulseAtPoint, applyPhysics2DTorque, findPhysics2DBody, createPhysics2DCollider, createPhysics2DSolverConfig, createPhysics2DWorld, createRigidBody2D, hydratePhysics2DWorld, invalidatePhysics2DCollider, isPhysics2DPairOrdered, removePhysics2DBody, removePhysics2DCollider, setPhysics2DBodyTransform, setPhysics2DBodyFixedRotation, setPhysics2DBodyBullet, setPhysics2DBodySleepEnabled, setPhysics2DBodyType, Physics2DWorldVersion, } from './world';
|
|
15
|
+
export { createPhysics2DQueryFilter, createPhysics2DQueryResult, createPhysics2DRayResult, queryPhysics2DPoint, queryPhysics2DRay, queryPhysics2DRayClosest, queryPhysics2DRegion, } from './worldQueries';
|
|
15
16
|
//# 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,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,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,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,oCAAoC,EAAE,MAAM,wCAAwC,CAAC;AAC9F,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,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,
|
|
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,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,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,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wCAAwC,CAAC;AAC9F,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,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,9 +7,10 @@ export { createPhysics2DDistanceJoint, createPhysics2DGearJoint, createPhysics2D
|
|
|
7
7
|
export { Physics2DDistanceJointKind, Physics2DGearJointKind, Physics2DMouseJointKind, Physics2DPrismaticJointKind, Physics2DPulleyJointKind, Physics2DRevoluteJointKind, Physics2DRopeJointKind, Physics2DWheelJointKind, Physics2DWeldJointKind, physics2DDistanceJointSolver, physics2DGearJointSolver, physics2DMouseJointSolver, physics2DPrismaticJointSolver, physics2DPulleyJointSolver, physics2DRevoluteJointSolver, physics2DRopeJointSolver, physics2DWheelJointSolver, physics2DWeldJointSolver, } from './joints';
|
|
8
8
|
export { addPhysics2DJoint, getPhysics2DJointSolver, invalidatePhysics2DJoint, registerPhysics2DJointSolver, removePhysics2DJoint, } from './jointRegistry';
|
|
9
9
|
export { computePhysics2DColliderMassData, updateRigidBody2DMassData } from './massProperties';
|
|
10
|
+
export { mixPhysics2DFriction, mixPhysics2DRestitution } from './material';
|
|
10
11
|
export { registerBuiltInPhysics2DJointSolvers } from './registerBuiltInPhysics2DJointSolvers';
|
|
11
12
|
export { applyPhysics2DImpulse, relativeNormalVelocity, solvePhysics2DContacts, solvePhysics2DContactsOnce, warmStartPhysics2DContacts, } from './solver';
|
|
12
13
|
export { stepPhysics2D } from './step';
|
|
13
|
-
export { addPhysics2DBody, addPhysics2DCollider, applyPhysics2DForce, applyPhysics2DForceAtPoint, applyPhysics2DLinearImpulse, applyPhysics2DLinearImpulseAtPoint, applyPhysics2DTorque, findPhysics2DBody, createPhysics2DCollider, createPhysics2DSolverConfig, createPhysics2DWorld, createRigidBody2D, invalidatePhysics2DCollider, isPhysics2DPairOrdered, removePhysics2DBody, removePhysics2DCollider, setPhysics2DBodyTransform, setPhysics2DBodyType, } from './world';
|
|
14
|
-
export { createPhysics2DQueryResult, createPhysics2DRayResult, queryPhysics2DPoint, queryPhysics2DRay, queryPhysics2DRegion, } from './worldQueries';
|
|
14
|
+
export { addPhysics2DBody, addPhysics2DCollider, applyPhysics2DForce, applyPhysics2DForceAtPoint, applyPhysics2DLinearImpulse, applyPhysics2DLinearImpulseAtPoint, applyPhysics2DTorque, findPhysics2DBody, createPhysics2DCollider, createPhysics2DSolverConfig, createPhysics2DWorld, createRigidBody2D, hydratePhysics2DWorld, invalidatePhysics2DCollider, isPhysics2DPairOrdered, removePhysics2DBody, removePhysics2DCollider, setPhysics2DBodyTransform, setPhysics2DBodyFixedRotation, setPhysics2DBodyBullet, setPhysics2DBodySleepEnabled, setPhysics2DBodyType, Physics2DWorldVersion, } from './world';
|
|
15
|
+
export { createPhysics2DQueryFilter, createPhysics2DQueryResult, createPhysics2DRayResult, queryPhysics2DPoint, queryPhysics2DRay, queryPhysics2DRayClosest, queryPhysics2DRegion, } from './worldQueries';
|
|
15
16
|
//# 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,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,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,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,oCAAoC,EAAE,MAAM,wCAAwC,CAAC;AAC9F,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,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,
|
|
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,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,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,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wCAAwC,CAAC;AAC9F,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,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
|
package/dist/islands.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { Physics2DWorld, RigidBody2D } from '@flighthq/types/contract';
|
|
2
|
+
/** Rebuilds deterministic contiguous lists for the awake solve islands.
|
|
3
|
+
*
|
|
4
|
+
* The sleep reduction already owns the union-find graph, so solving consumes that same graph rather
|
|
5
|
+
* than discovering connectivity a second way. Roots are admitted in body order, and bodies,
|
|
6
|
+
* contacts, and joints retain their canonical world-list order inside each root. Disconnected islands
|
|
7
|
+
* therefore cannot perturb one another's iteration order, and sleeping constraints cost no solver
|
|
8
|
+
* scans. Every array and map is world-owned high-water workspace and is cleared/refilled in place. */
|
|
9
|
+
export declare function buildPhysics2DSolveIslands(world: Physics2DWorld): void;
|
|
2
10
|
/** Whether a constraint between these two bodies still has anything to solve.
|
|
3
11
|
*
|
|
4
12
|
* A constraint is live only while at least one of its ends can still move this step. Two sleeping
|
package/dist/islands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../src/islands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"islands.d.ts","sourceRoot":"","sources":["../src/islands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5E;;;;;;uGAMuG;AACvG,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CA6EtE;AAED;;;;;;;;;;uCAUuC;AACvC,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAElG;AAED;;;;;;;;;;;;;;;uFAeuF;AACvF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAoF5E;AAED;;;;;sGAKsG;AACtG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAIzD"}
|
package/dist/islands.js
CHANGED
|
@@ -1,4 +1,92 @@
|
|
|
1
|
+
import { assertPhysics2DBodyNotStepping } from './ownership';
|
|
1
2
|
import { findPhysics2DBody } from './world';
|
|
3
|
+
/** Rebuilds deterministic contiguous lists for the awake solve islands.
|
|
4
|
+
*
|
|
5
|
+
* The sleep reduction already owns the union-find graph, so solving consumes that same graph rather
|
|
6
|
+
* than discovering connectivity a second way. Roots are admitted in body order, and bodies,
|
|
7
|
+
* contacts, and joints retain their canonical world-list order inside each root. Disconnected islands
|
|
8
|
+
* therefore cannot perturb one another's iteration order, and sleeping constraints cost no solver
|
|
9
|
+
* scans. Every array and map is world-owned high-water workspace and is cleared/refilled in place. */
|
|
10
|
+
export function buildPhysics2DSolveIslands(world) {
|
|
11
|
+
const roots = world.solveIslandRoots;
|
|
12
|
+
const byRoot = world.solveIslandByRoot;
|
|
13
|
+
const bodyCounts = world.solveIslandBodyCounts;
|
|
14
|
+
const contactCounts = world.solveIslandContactCounts;
|
|
15
|
+
const jointCounts = world.solveIslandJointCounts;
|
|
16
|
+
roots.length = 0;
|
|
17
|
+
byRoot.clear();
|
|
18
|
+
bodyCounts.length = 0;
|
|
19
|
+
contactCounts.length = 0;
|
|
20
|
+
jointCounts.length = 0;
|
|
21
|
+
for (const body of world.bodies) {
|
|
22
|
+
if (body.type === 'static' || body.sleeping)
|
|
23
|
+
continue;
|
|
24
|
+
const root = _islandRootOf(world.islandParents, body.index);
|
|
25
|
+
let island = byRoot.get(root);
|
|
26
|
+
if (island === undefined) {
|
|
27
|
+
island = roots.length;
|
|
28
|
+
roots.push(root);
|
|
29
|
+
byRoot.set(root, island);
|
|
30
|
+
bodyCounts.push(0);
|
|
31
|
+
contactCounts.push(0);
|
|
32
|
+
jointCounts.push(0);
|
|
33
|
+
}
|
|
34
|
+
bodyCounts[island]++;
|
|
35
|
+
}
|
|
36
|
+
for (const contact of world.contacts) {
|
|
37
|
+
if (!contact.enabled || contact.sensor)
|
|
38
|
+
continue;
|
|
39
|
+
const island = _physics2DSolveIslandForPair(world, contact.bodyA, contact.bodyB);
|
|
40
|
+
if (island >= 0)
|
|
41
|
+
contactCounts[island]++;
|
|
42
|
+
}
|
|
43
|
+
for (const joint of world.joints) {
|
|
44
|
+
const solver = world.jointSolvers.get(joint.kind);
|
|
45
|
+
if (solver === undefined)
|
|
46
|
+
continue;
|
|
47
|
+
const island = solver.usesBodyA === false
|
|
48
|
+
? _physics2DSolveIslandForBody(world, joint.bodyB)
|
|
49
|
+
: _physics2DSolveIslandForPair(world, joint.bodyA, joint.bodyB);
|
|
50
|
+
if (island >= 0)
|
|
51
|
+
jointCounts[island]++;
|
|
52
|
+
}
|
|
53
|
+
_preparePhysics2DIslandSlices(world.solveIslandBodyStarts, bodyCounts, world.solveIslandCursors);
|
|
54
|
+
_preparePhysics2DIslandSlices(world.solveIslandContactStarts, contactCounts, world.solveIslandCursors);
|
|
55
|
+
_preparePhysics2DIslandSlices(world.solveIslandJointStarts, jointCounts, world.solveIslandCursors);
|
|
56
|
+
world.solveIslandBodyIndices.length = _physics2DIslandItemCount(world.solveIslandBodyStarts, bodyCounts);
|
|
57
|
+
world.solveIslandContactIndices.length = _physics2DIslandItemCount(world.solveIslandContactStarts, contactCounts);
|
|
58
|
+
world.solveIslandJointIndices.length = _physics2DIslandItemCount(world.solveIslandJointStarts, jointCounts);
|
|
59
|
+
_copyPhysics2DIslandStarts(world.solveIslandCursors, world.solveIslandBodyStarts);
|
|
60
|
+
for (let i = 0; i < world.bodies.length; i++) {
|
|
61
|
+
const body = world.bodies[i];
|
|
62
|
+
if (body.type === 'static' || body.sleeping)
|
|
63
|
+
continue;
|
|
64
|
+
const island = byRoot.get(_islandRootOf(world.islandParents, body.index));
|
|
65
|
+
if (island !== undefined)
|
|
66
|
+
world.solveIslandBodyIndices[world.solveIslandCursors[island]++] = i;
|
|
67
|
+
}
|
|
68
|
+
_copyPhysics2DIslandStarts(world.solveIslandCursors, world.solveIslandContactStarts);
|
|
69
|
+
for (let i = 0; i < world.contacts.length; i++) {
|
|
70
|
+
const contact = world.contacts[i];
|
|
71
|
+
if (!contact.enabled || contact.sensor)
|
|
72
|
+
continue;
|
|
73
|
+
const island = _physics2DSolveIslandForPair(world, contact.bodyA, contact.bodyB);
|
|
74
|
+
if (island >= 0)
|
|
75
|
+
world.solveIslandContactIndices[world.solveIslandCursors[island]++] = i;
|
|
76
|
+
}
|
|
77
|
+
_copyPhysics2DIslandStarts(world.solveIslandCursors, world.solveIslandJointStarts);
|
|
78
|
+
for (let i = 0; i < world.joints.length; i++) {
|
|
79
|
+
const joint = world.joints[i];
|
|
80
|
+
const solver = world.jointSolvers.get(joint.kind);
|
|
81
|
+
if (solver === undefined)
|
|
82
|
+
continue;
|
|
83
|
+
const island = solver.usesBodyA === false
|
|
84
|
+
? _physics2DSolveIslandForBody(world, joint.bodyB)
|
|
85
|
+
: _physics2DSolveIslandForPair(world, joint.bodyA, joint.bodyB);
|
|
86
|
+
if (island >= 0)
|
|
87
|
+
world.solveIslandJointIndices[world.solveIslandCursors[island]++] = i;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
2
90
|
/** Whether a constraint between these two bodies still has anything to solve.
|
|
3
91
|
*
|
|
4
92
|
* A constraint is live only while at least one of its ends can still move this step. Two sleeping
|
|
@@ -32,6 +120,24 @@ export function isRigidBody2DPairAwake(a, b) {
|
|
|
32
120
|
export function updatePhysics2DSleep(world, dt) {
|
|
33
121
|
const config = world.config;
|
|
34
122
|
const bodies = world.bodies;
|
|
123
|
+
const parents = world.islandParents;
|
|
124
|
+
const islandTimers = world.islandSleepTimers;
|
|
125
|
+
parents.clear();
|
|
126
|
+
islandTimers.clear();
|
|
127
|
+
// Build the active constraint graph even when sleeping is disabled. The same union-find owns the
|
|
128
|
+
// solve islands below; clearing it and returning here would split every awake body into a singleton
|
|
129
|
+
// and assign a multi-body constraint to only the first of those artificial components.
|
|
130
|
+
for (const contact of world.contacts) {
|
|
131
|
+
if (!contact.enabled || contact.sensor)
|
|
132
|
+
continue;
|
|
133
|
+
_unionDynamicPair(world, parents, contact.bodyA, contact.bodyB);
|
|
134
|
+
}
|
|
135
|
+
for (const joint of world.joints) {
|
|
136
|
+
const solver = world.jointSolvers.get(joint.kind);
|
|
137
|
+
if (solver === undefined || solver.usesBodyA === false)
|
|
138
|
+
continue;
|
|
139
|
+
_unionDynamicPair(world, parents, joint.bodyA, joint.bodyB);
|
|
140
|
+
}
|
|
35
141
|
if (!config.allowSleeping) {
|
|
36
142
|
// The mechanism is off, so nothing may be left asleep from when it was on — a body that stayed
|
|
37
143
|
// asleep here would never be integrated again and would look frozen for the rest of the session.
|
|
@@ -45,6 +151,11 @@ export function updatePhysics2DSleep(world, dt) {
|
|
|
45
151
|
for (const body of bodies) {
|
|
46
152
|
if (body.type === 'static')
|
|
47
153
|
continue;
|
|
154
|
+
if (!body.sleepEnabled) {
|
|
155
|
+
body.sleeping = false;
|
|
156
|
+
body.sleepTimer = 0;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
48
159
|
if (_isBodyStill(body, config.sleepLinearThreshold, config.sleepAngularThreshold)) {
|
|
49
160
|
body.sleepTimer += dt;
|
|
50
161
|
}
|
|
@@ -63,22 +174,7 @@ export function updatePhysics2DSleep(world, dt) {
|
|
|
63
174
|
_keepPhysics2DBodyAwake(world, joint.bodyA);
|
|
64
175
|
_keepPhysics2DBodyAwake(world, joint.bodyB);
|
|
65
176
|
}
|
|
66
|
-
// Then the island reduction. `_islandRootOf` is union-find over the contact and joint graph, so the
|
|
67
|
-
// root is a stable representative for the connected component.
|
|
68
|
-
const parents = new Map();
|
|
69
|
-
for (const contact of world.contacts) {
|
|
70
|
-
if (!contact.enabled || contact.sensor)
|
|
71
|
-
continue;
|
|
72
|
-
_unionDynamicPair(world, parents, contact.bodyA, contact.bodyB);
|
|
73
|
-
}
|
|
74
|
-
for (const joint of world.joints) {
|
|
75
|
-
const solver = world.jointSolvers.get(joint.kind);
|
|
76
|
-
if (solver === undefined || solver.usesBodyA === false)
|
|
77
|
-
continue;
|
|
78
|
-
_unionDynamicPair(world, parents, joint.bodyA, joint.bodyB);
|
|
79
|
-
}
|
|
80
177
|
// The island's timer is the MINIMUM across its members: the least-settled body decides.
|
|
81
|
-
const islandTimers = new Map();
|
|
82
178
|
for (const body of bodies) {
|
|
83
179
|
if (body.type === 'static')
|
|
84
180
|
continue;
|
|
@@ -90,7 +186,7 @@ export function updatePhysics2DSleep(world, dt) {
|
|
|
90
186
|
if (body.type === 'static')
|
|
91
187
|
continue;
|
|
92
188
|
const islandTimer = islandTimers.get(_islandRootOf(parents, body.index)) ?? body.sleepTimer;
|
|
93
|
-
const shouldSleep = islandTimer >= config.timeToSleep;
|
|
189
|
+
const shouldSleep = body.sleepEnabled && islandTimer >= config.timeToSleep;
|
|
94
190
|
if (!shouldSleep && body.sleeping) {
|
|
95
191
|
// Waking clears the timer so a woken island must earn its rest again from zero rather than
|
|
96
192
|
// falling straight back asleep on the next step.
|
|
@@ -115,6 +211,7 @@ export function updatePhysics2DSleep(world, dt) {
|
|
|
115
211
|
* change to a sleeping body must do — applying a force, teleporting it, or removing what it rested on —
|
|
116
212
|
* since a sleeping body is skipped by integration and would otherwise ignore the change entirely. */
|
|
117
213
|
export function wakePhysics2DBody(body) {
|
|
214
|
+
assertPhysics2DBodyNotStepping(body);
|
|
118
215
|
body.sleeping = false;
|
|
119
216
|
body.sleepTimer = 0;
|
|
120
217
|
}
|
|
@@ -140,6 +237,36 @@ function _keepPhysics2DBodyAwake(world, bodyIndex) {
|
|
|
140
237
|
if (body !== null && body.type !== 'static')
|
|
141
238
|
body.sleepTimer = 0;
|
|
142
239
|
}
|
|
240
|
+
function _physics2DSolveIslandForBody(world, bodyIndex) {
|
|
241
|
+
const body = findPhysics2DBody(world, bodyIndex);
|
|
242
|
+
if (body === null || body.type === 'static' || body.sleeping)
|
|
243
|
+
return -1;
|
|
244
|
+
return world.solveIslandByRoot.get(_islandRootOf(world.islandParents, body.index)) ?? -1;
|
|
245
|
+
}
|
|
246
|
+
function _physics2DSolveIslandForPair(world, bodyA, bodyB) {
|
|
247
|
+
const islandA = _physics2DSolveIslandForBody(world, bodyA);
|
|
248
|
+
if (islandA >= 0)
|
|
249
|
+
return islandA;
|
|
250
|
+
return _physics2DSolveIslandForBody(world, bodyB);
|
|
251
|
+
}
|
|
252
|
+
function _preparePhysics2DIslandSlices(starts, counts, cursors) {
|
|
253
|
+
starts.length = counts.length;
|
|
254
|
+
cursors.length = counts.length;
|
|
255
|
+
let start = 0;
|
|
256
|
+
for (let i = 0; i < counts.length; i++) {
|
|
257
|
+
starts[i] = start;
|
|
258
|
+
start += counts[i];
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function _copyPhysics2DIslandStarts(cursors, starts) {
|
|
262
|
+
cursors.length = starts.length;
|
|
263
|
+
for (let i = 0; i < starts.length; i++)
|
|
264
|
+
cursors[i] = starts[i];
|
|
265
|
+
}
|
|
266
|
+
function _physics2DIslandItemCount(starts, counts) {
|
|
267
|
+
const last = counts.length - 1;
|
|
268
|
+
return last < 0 ? 0 : starts[last] + counts[last];
|
|
269
|
+
}
|
|
143
270
|
// Joins two bodies into one island, but only when BOTH are dynamic. A static body is not a member of
|
|
144
271
|
// any island, so it cannot act as a bridge — otherwise the ground would merge every stack in the level
|
|
145
272
|
// into a single island that sleeps only when nothing anywhere is moving.
|
package/dist/islands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"islands.js","sourceRoot":"","sources":["../src/islands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"islands.js","sourceRoot":"","sources":["../src/islands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Physics2DWorld } from '@flighthq/types/contract';
|
|
2
|
+
export declare function isPhysics2DPairJointSuppressed(world: Readonly<Physics2DWorld>, bodyA: number, bodyB: number): boolean;
|
|
3
|
+
export declare function rebuildPhysics2DJointCollisionSuppressions(world: Physics2DWorld): void;
|
|
4
|
+
//# sourceMappingURL=jointCollisionSuppression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jointCollisionSuppression.d.ts","sourceRoot":"","sources":["../src/jointCollisionSuppression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIrH;AAMD,wBAAgB,0CAA0C,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAgBtF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Constant-time broadphase lookup for whether any active joint suppresses this body pair.
|
|
2
|
+
export function isPhysics2DPairJointSuppressed(world, bodyA, bodyB) {
|
|
3
|
+
const first = Math.min(bodyA, bodyB);
|
|
4
|
+
const second = Math.max(bodyA, bodyB);
|
|
5
|
+
return (world.jointCollisionSuppressions.get(first)?.get(second) ?? 0) > 0;
|
|
6
|
+
}
|
|
7
|
+
// Rebuilds the authored-joint suppression index at lifecycle/invalidation boundaries. This work is
|
|
8
|
+
// intentionally O(joints) there so broadphase pair filtering is O(1) per candidate during every step.
|
|
9
|
+
// Rebuilding also makes explicit invalidation sufficient after callers edit endpoints or
|
|
10
|
+
// collideConnected directly: the index never needs hidden per-joint shadow state.
|
|
11
|
+
export function rebuildPhysics2DJointCollisionSuppressions(world) {
|
|
12
|
+
const suppressions = world.jointCollisionSuppressions;
|
|
13
|
+
suppressions.clear();
|
|
14
|
+
for (const joint of world.joints) {
|
|
15
|
+
if (joint.collideConnected)
|
|
16
|
+
continue;
|
|
17
|
+
const solver = world.jointSolvers.get(joint.kind);
|
|
18
|
+
if (solver === undefined || solver.usesBodyA === false)
|
|
19
|
+
continue;
|
|
20
|
+
const first = Math.min(joint.bodyA, joint.bodyB);
|
|
21
|
+
const second = Math.max(joint.bodyA, joint.bodyB);
|
|
22
|
+
let seconds = suppressions.get(first);
|
|
23
|
+
if (seconds === undefined) {
|
|
24
|
+
seconds = new Map();
|
|
25
|
+
suppressions.set(first, seconds);
|
|
26
|
+
}
|
|
27
|
+
seconds.set(second, (seconds.get(second) ?? 0) + 1);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=jointCollisionSuppression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jointCollisionSuppression.js","sourceRoot":"","sources":["../src/jointCollisionSuppression.ts"],"names":[],"mappings":"AAEA,0FAA0F;AAC1F,MAAM,UAAU,8BAA8B,CAAC,KAA+B,EAAE,KAAa,EAAE,KAAa;IAC1G,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,mGAAmG;AACnG,sGAAsG;AACtG,yFAAyF;AACzF,kFAAkF;AAClF,MAAM,UAAU,0CAA0C,CAAC,KAAqB;IAC9E,MAAM,YAAY,GAAG,KAAK,CAAC,0BAA0B,CAAC;IACtD,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,gBAAgB;YAAE,SAAS;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK;YAAE,SAAS;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YACpB,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jointRegistry.d.ts","sourceRoot":"","sources":["../src/jointRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"jointRegistry.d.ts","sourceRoot":"","sources":["../src/jointRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACf,MAAM,0BAA0B,CAAC;AAgBlC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,cAAc,CAuB9F;AA0BD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC/B,IAAI,EAAE,kBAAkB,GACvB,oBAAoB,GAAG,IAAI,CAE7B;AAMD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAU9F;AASD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,oBAAoB,GAC3B,IAAI,CAeN;AAGD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,OAAO,CASpG"}
|
package/dist/jointRegistry.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { wakePhysics2DBody } from './islands';
|
|
2
|
-
import {
|
|
2
|
+
import { rebuildPhysics2DJointCollisionSuppressions } from './jointCollisionSuppression';
|
|
3
|
+
import { assertPhysics2DWorldNotStepping, physics2DJointOwners } from './ownership';
|
|
3
4
|
import { findPhysics2DBody, isPhysics2DPairOrdered } from './world';
|
|
4
5
|
// Adds `joint` to `world` under the same canonical body ordering contacts use, swapping its two ends when
|
|
5
6
|
// the caller supplied them the other way round.
|
|
@@ -11,6 +12,7 @@ import { findPhysics2DBody, isPhysics2DPairOrdered } from './world';
|
|
|
11
12
|
// world. The anchors and lever arms swap with the bodies — a joint whose ends were exchanged without its
|
|
12
13
|
// anchors would attach to the wrong points and hold the pair in a pose nobody asked for.
|
|
13
14
|
export function addPhysics2DJoint(world, joint) {
|
|
15
|
+
assertPhysics2DWorldNotStepping(world);
|
|
14
16
|
if (physics2DJointOwners.has(joint) || world.joints.includes(joint)) {
|
|
15
17
|
throw new Error('Cannot add a physics joint that already belongs to a physics world');
|
|
16
18
|
}
|
|
@@ -27,6 +29,7 @@ export function addPhysics2DJoint(world, joint) {
|
|
|
27
29
|
_canonicalizePhysics2DJointEnds(world, joint);
|
|
28
30
|
world.joints.push(joint);
|
|
29
31
|
physics2DJointOwners.set(joint, world);
|
|
32
|
+
rebuildPhysics2DJointCollisionSuppressions(world);
|
|
30
33
|
// Adding an active constraint changes what both bodies may do THIS step. A sleeping pair would skip
|
|
31
34
|
// prepare and solve forever unless something unrelated happened to wake it. Unknown kinds remain
|
|
32
35
|
// inert until registration, and are woken on that activation path instead.
|
|
@@ -68,12 +71,14 @@ export function getPhysics2DJointSolver(world, kind) {
|
|
|
68
71
|
// limit changes can kick both bodies before the new equation gets its first iteration. The solver clears
|
|
69
72
|
// any kind-specific accumulators, while the registry owns the common block and wake transition.
|
|
70
73
|
export function invalidatePhysics2DJoint(world, joint) {
|
|
74
|
+
assertPhysics2DWorldNotStepping(world);
|
|
71
75
|
if (physics2DJointOwners.get(joint) !== world || !world.joints.includes(joint))
|
|
72
76
|
return false;
|
|
73
77
|
getPhysics2DJointSolver(world, joint.kind)?.clearAccumulatedImpulses?.(joint);
|
|
74
78
|
joint.impulse0 = 0;
|
|
75
79
|
joint.impulse1 = 0;
|
|
76
80
|
joint.impulse2 = 0;
|
|
81
|
+
rebuildPhysics2DJointCollisionSuppressions(world);
|
|
77
82
|
_wakePhysics2DJointBodies(world, joint);
|
|
78
83
|
return true;
|
|
79
84
|
}
|
|
@@ -85,6 +90,7 @@ export function invalidatePhysics2DJoint(world, joint) {
|
|
|
85
90
|
// bundle that never registers a joint never links one: nine solvers are nine chunks of constraint math,
|
|
86
91
|
// and a game using none of them should pay for none of them.
|
|
87
92
|
export function registerPhysics2DJointSolver(world, kind, solver) {
|
|
93
|
+
assertPhysics2DWorldNotStepping(world);
|
|
88
94
|
world.jointSolvers.set(kind, solver);
|
|
89
95
|
// Joints of this kind may already be in the world: addPhysics2DJoint deliberately leaves an
|
|
90
96
|
// unknown-kind joint in its authored order, because canonicalizing it without the kind's consent
|
|
@@ -98,9 +104,11 @@ export function registerPhysics2DJointSolver(world, kind, solver) {
|
|
|
98
104
|
// replace its equation entirely, so it is the same topology change from the sleepers' perspective.
|
|
99
105
|
_wakePhysics2DJointBodies(world, joint);
|
|
100
106
|
}
|
|
107
|
+
rebuildPhysics2DJointCollisionSuppressions(world);
|
|
101
108
|
}
|
|
102
109
|
// Removes `joint` from `world`. Returns false when the world does not hold it.
|
|
103
110
|
export function removePhysics2DJoint(world, joint) {
|
|
111
|
+
assertPhysics2DWorldNotStepping(world);
|
|
104
112
|
const at = world.joints.indexOf(joint);
|
|
105
113
|
if (at < 0)
|
|
106
114
|
return false;
|
|
@@ -108,6 +116,7 @@ export function removePhysics2DJoint(world, joint) {
|
|
|
108
116
|
_wakePhysics2DJointBodies(world, joint);
|
|
109
117
|
world.joints.splice(at, 1);
|
|
110
118
|
physics2DJointOwners.delete(joint);
|
|
119
|
+
rebuildPhysics2DJointCollisionSuppressions(world);
|
|
111
120
|
return true;
|
|
112
121
|
}
|
|
113
122
|
function _wakePhysics2DJointBodies(world, joint) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jointRegistry.js","sourceRoot":"","sources":["../src/jointRegistry.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"jointRegistry.js","sourceRoot":"","sources":["../src/jointRegistry.ts"],"names":[],"mappings":"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"}
|
package/dist/massProperties.js
CHANGED
|
@@ -93,7 +93,7 @@ export function updateRigidBody2DMassData(body) {
|
|
|
93
93
|
body.mass = simulated ? mass : 0;
|
|
94
94
|
body.inertia = simulated ? inertia : 0;
|
|
95
95
|
body.inverseMass = simulated && mass > 0 ? 1 / mass : 0;
|
|
96
|
-
body.inverseInertia = simulated && inertia > 0 ? 1 / inertia : 0;
|
|
96
|
+
body.inverseInertia = simulated && !body.fixedRotation && inertia > 0 ? 1 / inertia : 0;
|
|
97
97
|
}
|
|
98
98
|
// Centroid and second moment of a simple polygon, accumulated per triangle fanned from the origin.
|
|
99
99
|
// Each triangle's signed area weights its contribution, so the winding cancels correctly on concave
|