@flighthq/physics2d 0.3.0-next.1315.1d4eb64 → 0.3.0-next.1392.f0bd0cc

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.
@@ -1,4 +1,5 @@
1
1
  export * from './colliderTransform';
2
+ export * from './islands';
2
3
  export * from './jointRegistry';
3
4
  export * from './joints';
4
5
  export * from './massProperties';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,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,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"}
package/dist/contract.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './colliderTransform';
2
+ export * from './islands';
2
3
  export * from './jointRegistry';
3
4
  export * from './joints';
4
5
  export * from './massProperties';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,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,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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { createPhysics2DColliderWorldShape, updatePhysics2DColliderWorldShape, writePhysics2DColliderBounds, } from './colliderTransform';
2
+ export { isRigidBody2DPairAwake, updatePhysics2DSleep, wakePhysics2DBody } from './islands';
2
3
  export { Physics2DDistanceJointKind, Physics2DMouseJointKind, Physics2DRevoluteJointKind, Physics2DRopeJointKind, Physics2DWeldJointKind, physics2DDistanceJointSolver, physics2DMouseJointSolver, physics2DRevoluteJointSolver, physics2DRopeJointSolver, physics2DWeldJointSolver, } from './joints';
3
4
  export { addPhysics2DJoint, getPhysics2DJointSolver, registerPhysics2DJointSolver, removePhysics2DJoint, } from './jointRegistry';
4
5
  export { computePhysics2DColliderMassData, updateRigidBody2DMassData } from './massProperties';
@@ -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,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,EACxB,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,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,EACxB,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"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { createPhysics2DColliderWorldShape, updatePhysics2DColliderWorldShape, writePhysics2DColliderBounds, } from './colliderTransform';
2
+ export { isRigidBody2DPairAwake, updatePhysics2DSleep, wakePhysics2DBody } from './islands';
2
3
  export { Physics2DDistanceJointKind, Physics2DMouseJointKind, Physics2DRevoluteJointKind, Physics2DRopeJointKind, Physics2DWeldJointKind, physics2DDistanceJointSolver, physics2DMouseJointSolver, physics2DRevoluteJointSolver, physics2DRopeJointSolver, physics2DWeldJointSolver, } from './joints';
3
4
  export { addPhysics2DJoint, getPhysics2DJointSolver, registerPhysics2DJointSolver, removePhysics2DJoint, } from './jointRegistry';
4
5
  export { computePhysics2DColliderMassData, updateRigidBody2DMassData } from './massProperties';
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,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,EACxB,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,sBAAsB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,EACxB,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"}
@@ -0,0 +1,38 @@
1
+ import type { Physics2DWorld, RigidBody2D } from '@flighthq/types/contract';
2
+ /** Whether a constraint between these two bodies still has anything to solve.
3
+ *
4
+ * A constraint is live only while at least one of its ends can still move this step. Two sleeping
5
+ * bodies, a sleeper against static scenery, or two static bodies all resolve to nothing: every impulse
6
+ * the solver could compute would be applied to a body that is not being integrated.
7
+ *
8
+ * Skipping is not merely an optimisation, and this is the reason sleep needs a solver-side test at all
9
+ * rather than only an integrator-side one. A resting contact usually carries penetration beyond the
10
+ * slop, so its positional bias is non-zero; solved, it hands the sleeping pair a velocity, which the
11
+ * end-of-step stillness test then reads as motion and wakes them again. A stack would twitch itself
12
+ * awake every step and never rest. */
13
+ export declare function isRigidBody2DPairAwake(a: Readonly<RigidBody2D>, b: Readonly<RigidBody2D>): boolean;
14
+ /** Advances every body's sleep state for one step, and returns whether any body is awake.
15
+ *
16
+ * Sleep is decided per ISLAND, not per body. Two dynamic bodies are in the same island when a contact
17
+ * or a joint connects them, transitively — so a stack, a chain of links, and a pile all settle or wake
18
+ * as one unit. Deciding per body instead produces the visible failure this exists to prevent: a crate
19
+ * that has stopped moving falls asleep while the crate it rests on is still sliding out from under it,
20
+ * and the sleeper hangs in the air until something happens to wake it.
21
+ *
22
+ * Static bodies are excluded entirely. They never move, so they are neither awake nor asleep, and
23
+ * crucially they do NOT join islands: every dynamic body resting on the same ground would otherwise be
24
+ * transitively connected into one world-sized island that can only sleep when the last object in the
25
+ * level stops moving.
26
+ *
27
+ * An island sleeps only once EVERY member has been continuously below both thresholds for
28
+ * `timeToSleep`. Any member exceeding a threshold resets its own timer, and because the island's timer
29
+ * is the minimum across its members, one moving body keeps the whole island awake. */
30
+ export declare function updatePhysics2DSleep(world: Physics2DWorld, dt: number): void;
31
+ /** Wakes `body` and clears its stillness timer, so it is simulated again from this step.
32
+ *
33
+ * The caller wakes a body; the island reduction then keeps its neighbours awake too, because a woken
34
+ * body's zeroed timer becomes the minimum for its island on the next step. Waking is what any external
35
+ * change to a sleeping body must do — applying a force, teleporting it, or removing what it rested on —
36
+ * since a sleeping body is skipped by integration and would otherwise ignore the change entirely. */
37
+ export declare function wakePhysics2DBody(body: RigidBody2D): void;
38
+ //# sourceMappingURL=islands.d.ts.map
@@ -0,0 +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;AAI5E;;;;;;;;;;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,CAgE5E;AAED;;;;;sGAKsG;AACtG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAGzD"}
@@ -0,0 +1,159 @@
1
+ import { findPhysics2DBody } from './world';
2
+ /** Whether a constraint between these two bodies still has anything to solve.
3
+ *
4
+ * A constraint is live only while at least one of its ends can still move this step. Two sleeping
5
+ * bodies, a sleeper against static scenery, or two static bodies all resolve to nothing: every impulse
6
+ * the solver could compute would be applied to a body that is not being integrated.
7
+ *
8
+ * Skipping is not merely an optimisation, and this is the reason sleep needs a solver-side test at all
9
+ * rather than only an integrator-side one. A resting contact usually carries penetration beyond the
10
+ * slop, so its positional bias is non-zero; solved, it hands the sleeping pair a velocity, which the
11
+ * end-of-step stillness test then reads as motion and wakes them again. A stack would twitch itself
12
+ * awake every step and never rest. */
13
+ export function isRigidBody2DPairAwake(a, b) {
14
+ return _isBodyLive(a) || _isBodyLive(b);
15
+ }
16
+ /** Advances every body's sleep state for one step, and returns whether any body is awake.
17
+ *
18
+ * Sleep is decided per ISLAND, not per body. Two dynamic bodies are in the same island when a contact
19
+ * or a joint connects them, transitively — so a stack, a chain of links, and a pile all settle or wake
20
+ * as one unit. Deciding per body instead produces the visible failure this exists to prevent: a crate
21
+ * that has stopped moving falls asleep while the crate it rests on is still sliding out from under it,
22
+ * and the sleeper hangs in the air until something happens to wake it.
23
+ *
24
+ * Static bodies are excluded entirely. They never move, so they are neither awake nor asleep, and
25
+ * crucially they do NOT join islands: every dynamic body resting on the same ground would otherwise be
26
+ * transitively connected into one world-sized island that can only sleep when the last object in the
27
+ * level stops moving.
28
+ *
29
+ * An island sleeps only once EVERY member has been continuously below both thresholds for
30
+ * `timeToSleep`. Any member exceeding a threshold resets its own timer, and because the island's timer
31
+ * is the minimum across its members, one moving body keeps the whole island awake. */
32
+ export function updatePhysics2DSleep(world, dt) {
33
+ const config = world.config;
34
+ const bodies = world.bodies;
35
+ if (!config.allowSleeping) {
36
+ // The mechanism is off, so nothing may be left asleep from when it was on — a body that stayed
37
+ // asleep here would never be integrated again and would look frozen for the rest of the session.
38
+ for (const body of bodies) {
39
+ body.sleeping = false;
40
+ body.sleepTimer = 0;
41
+ }
42
+ return;
43
+ }
44
+ // Per-body stillness first: each body's own timer, independent of who it is touching.
45
+ for (const body of bodies) {
46
+ if (body.type === 'static')
47
+ continue;
48
+ if (_isBodyStill(body, config.sleepLinearThreshold, config.sleepAngularThreshold)) {
49
+ body.sleepTimer += dt;
50
+ }
51
+ else {
52
+ body.sleepTimer = 0;
53
+ }
54
+ }
55
+ // Then the island reduction. `_islandRootOf` is union-find over the contact and joint graph, so the
56
+ // root is a stable representative for the connected component.
57
+ const parents = new Map();
58
+ for (const contact of world.contacts) {
59
+ if (contact.sensor)
60
+ continue; // A sensor reports overlap and resolves nothing, so it couples no motion.
61
+ _unionDynamicPair(world, parents, contact.bodyA, contact.bodyB);
62
+ }
63
+ for (const joint of world.joints) {
64
+ _unionDynamicPair(world, parents, joint.bodyA, joint.bodyB);
65
+ }
66
+ // The island's timer is the MINIMUM across its members: the least-settled body decides.
67
+ const islandTimers = new Map();
68
+ for (const body of bodies) {
69
+ if (body.type === 'static')
70
+ continue;
71
+ const root = _islandRootOf(parents, body.index);
72
+ const current = islandTimers.get(root);
73
+ islandTimers.set(root, current === undefined ? body.sleepTimer : Math.min(current, body.sleepTimer));
74
+ }
75
+ for (const body of bodies) {
76
+ if (body.type === 'static')
77
+ continue;
78
+ const islandTimer = islandTimers.get(_islandRootOf(parents, body.index)) ?? body.sleepTimer;
79
+ const shouldSleep = islandTimer >= config.timeToSleep;
80
+ if (!shouldSleep && body.sleeping) {
81
+ // Waking clears the timer so a woken island must earn its rest again from zero rather than
82
+ // falling straight back asleep on the next step.
83
+ body.sleepTimer = 0;
84
+ }
85
+ body.sleeping = shouldSleep;
86
+ if (shouldSleep) {
87
+ // Zeroed rather than merely small. A sleeping body is not integrated, so any residual velocity is
88
+ // motion that will be silently resumed the moment it wakes — a crate that settled ten steps ago
89
+ // would twitch on waking. Zeroing also makes the stillness test trivially true next step, so a
90
+ // body cannot oscillate across the threshold while asleep.
91
+ body.velocityX = 0;
92
+ body.velocityY = 0;
93
+ body.angularVelocity = 0;
94
+ }
95
+ }
96
+ }
97
+ /** Wakes `body` and clears its stillness timer, so it is simulated again from this step.
98
+ *
99
+ * The caller wakes a body; the island reduction then keeps its neighbours awake too, because a woken
100
+ * body's zeroed timer becomes the minimum for its island on the next step. Waking is what any external
101
+ * change to a sleeping body must do — applying a force, teleporting it, or removing what it rested on —
102
+ * since a sleeping body is skipped by integration and would otherwise ignore the change entirely. */
103
+ export function wakePhysics2DBody(body) {
104
+ body.sleeping = false;
105
+ body.sleepTimer = 0;
106
+ }
107
+ // A body the solver can still move: dynamic or kinematic, and awake. Static bodies are never live —
108
+ // their inverse mass is zero, so an impulse against them changes nothing regardless of sleep state.
109
+ function _isBodyLive(body) {
110
+ return body.type !== 'static' && !body.sleeping;
111
+ }
112
+ function _isBodyStill(body, linearThreshold, angularThreshold) {
113
+ // A body someone has applied force or torque to is not at rest, whatever its velocity currently reads.
114
+ // Velocity alone would miss it: force is applied during the step, so a sleeper skips the integration
115
+ // that would have turned it into motion, and the force is cleared at the end of the step — the push
116
+ // would be silently swallowed and the body would stay asleep under continuous load.
117
+ if (body.forceX !== 0 || body.forceY !== 0 || body.torque !== 0)
118
+ return false;
119
+ const speedSquared = body.velocityX * body.velocityX + body.velocityY * body.velocityY;
120
+ if (speedSquared > linearThreshold * linearThreshold)
121
+ return false;
122
+ return Math.abs(body.angularVelocity) <= angularThreshold;
123
+ }
124
+ // Joins two bodies into one island, but only when BOTH are dynamic. A static body is not a member of
125
+ // any island, so it cannot act as a bridge — otherwise the ground would merge every stack in the level
126
+ // into a single island that sleeps only when nothing anywhere is moving.
127
+ function _unionDynamicPair(world, parents, a, b) {
128
+ const first = findPhysics2DBody(world, a);
129
+ const second = findPhysics2DBody(world, b);
130
+ if (first === null || second === null)
131
+ return;
132
+ if (first.type === 'static' || second.type === 'static')
133
+ return;
134
+ const rootA = _islandRootOf(parents, a);
135
+ const rootB = _islandRootOf(parents, b);
136
+ if (rootA !== rootB)
137
+ parents.set(rootA, rootB);
138
+ }
139
+ // Union-find with path compression. An index with no entry is its own root, so a body touching nothing
140
+ // is an island of one without needing to be inserted first.
141
+ function _islandRootOf(parents, index) {
142
+ let root = index;
143
+ for (;;) {
144
+ const parent = parents.get(root);
145
+ if (parent === undefined || parent === root)
146
+ break;
147
+ root = parent;
148
+ }
149
+ let walk = index;
150
+ for (;;) {
151
+ const parent = parents.get(walk);
152
+ if (parent === undefined || parent === walk)
153
+ break;
154
+ parents.set(walk, root);
155
+ walk = parent;
156
+ }
157
+ return root;
158
+ }
159
+ //# sourceMappingURL=islands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"islands.js","sourceRoot":"","sources":["../src/islands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"joints.d.ts","sourceRoot":"","sources":["../src/joints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EAKd,cAAc,EAEf,MAAM,0BAA0B,CAAC;AAMlC,eAAO,MAAM,0BAA0B,aAAa,CAAC;AACrD,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,0BAA0B,aAAa,CAAC;AACrD,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAQ7C,eAAO,MAAM,4BAA4B;qBACtB,cAAc,SAAS,cAAc,GAAG,IAAI;oCAkB7B,cAAc,GAAG,IAAI;mBAItC,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBA6C1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAa1D,CAAC;AAOF,eAAO,MAAM,yBAAyB;gBAMxB,OAAO;oCAMa,cAAc,GAAG,IAAI;mBAKtC,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBA4B1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAqC1D,CAAC;AAOF,eAAO,MAAM,4BAA4B;qBACtB,cAAc,SAAS,cAAc,GAAG,IAAI;oCAO7B,cAAc,GAAG,IAAI;oBAarC,cAAc,GAAG,OAAO;mBAWzB,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBAuB1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAiE1D,CAAC;AAMF,eAAO,MAAM,wBAAwB;qBAClB,cAAc,SAAS,cAAc,GAAG,IAAI;oCAkB7B,cAAc,GAAG,IAAI;mBAItC,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBA0B1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAe1D,CAAC;AAWF,eAAO,MAAM,wBAAwB;qBAClB,cAAc,SAAS,cAAc,GAAG,IAAI;oCAS7B,cAAc,GAAG,IAAI;oBAMrC,cAAc,GAAG,OAAO;mBAMzB,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBAkB1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAe1D,CAAC"}
1
+ {"version":3,"file":"joints.d.ts","sourceRoot":"","sources":["../src/joints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EAKd,cAAc,EAEf,MAAM,0BAA0B,CAAC;AAMlC,eAAO,MAAM,0BAA0B,aAAa,CAAC;AACrD,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,0BAA0B,aAAa,CAAC;AACrD,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAQ7C,eAAO,MAAM,4BAA4B;qBACtB,cAAc,SAAS,cAAc,GAAG,IAAI;oCAkB7B,cAAc,GAAG,IAAI;mBAItC,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBA6C1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAa1D,CAAC;AAOF,eAAO,MAAM,yBAAyB;gBAMxB,OAAO;oCAMa,cAAc,GAAG,IAAI;mBAKtC,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBA4B1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAqC1D,CAAC;AAOF,eAAO,MAAM,4BAA4B;qBACtB,cAAc,SAAS,cAAc,GAAG,IAAI;oCAiC7B,cAAc,GAAG,IAAI;oBAarC,cAAc,GAAG,OAAO;mBAezB,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBAyB1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAqE1D,CAAC;AAMF,eAAO,MAAM,wBAAwB;qBAClB,cAAc,SAAS,cAAc,GAAG,IAAI;oCAkB7B,cAAc,GAAG,IAAI;mBAItC,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBA0B1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAe1D,CAAC;AAWF,eAAO,MAAM,wBAAwB;qBAClB,cAAc,SAAS,cAAc,GAAG,IAAI;oCAS7B,cAAc,GAAG,IAAI;oBAMrC,cAAc,GAAG,OAAO;mBAMzB,cAAc,SAAS,cAAc,MAAM,MAAM,GAAG,IAAI;iBAkB1D,cAAc,SAAS,cAAc,GAAG,IAAI;CAe1D,CAAC"}
package/dist/joints.js CHANGED
@@ -64,7 +64,7 @@ export const physics2DDistanceJointSolver = {
64
64
  jointScratch[2] = 0;
65
65
  }
66
66
  distance.rAX = joint.rAX;
67
- const distanceState = acquireJointState(distance, 5);
67
+ const distanceState = beginJointSolve(distance, 5);
68
68
  distanceState[0] = jointScratch[0];
69
69
  distanceState[1] = jointScratch[1];
70
70
  distanceState[2] = jointScratch[2];
@@ -126,7 +126,7 @@ export const physics2DMouseJointSolver = {
126
126
  // maxForce is a force; joint.impulse0/1 accumulate an impulse. Clamping one against the other was
127
127
  // a unit error worth a factor of 1/dt — at dt 0.01 the bound admitted a hundred times the force it
128
128
  // named. Convert once here, where dt is in hand, rather than in solve, which does not receive it.
129
- const mouseState = acquireJointState(mouse, 5);
129
+ const mouseState = beginJointSolve(mouse, 5);
130
130
  mouseState[0] = inverseGamma;
131
131
  mouseState[1] = biasFactor;
132
132
  mouseState[2] = dt * mouse.maxForce;
@@ -182,6 +182,33 @@ export const physics2DRevoluteJointSolver = {
182
182
  if (bodyA === null || bodyB === null)
183
183
  return;
184
184
  applyPhysics2DImpulse(bodyA, bodyB, joint.rAX, joint.rAY, joint.rBX, joint.rBY, -joint.impulse0, -joint.impulse1);
185
+ // The motor accumulator persists across steps, so it has to be REAPPLIED here like every other
186
+ // persisted impulse. Warm-starting only the point pair left it accumulating without ever acting:
187
+ // the solve clamps the running total against maxMotorTorque * dt, so once it reached that bound it
188
+ // stayed there and every later step added nothing. A low-torque motor would apply its first
189
+ // increment and then hold the same value forever, looking like a motor that had reached speed while
190
+ // the body never moved.
191
+ //
192
+ // Gated on the CURRENT enableMotor, not on the value being non-zero. A cached impulse is only valid
193
+ // while the thing that produced it is still running: `solve` skips a disabled motor, so reapplying
194
+ // its last impulse here would exert torque no solver ever asks for and nothing ever cancels — a
195
+ // disabled motor that keeps turning the joint forever. Clearing rather than merely skipping means a
196
+ // motor switched back on starts from rest instead of resuming a stale accumulator from whenever it
197
+ // was last enabled.
198
+ //
199
+ // Read plainly, because `prepare` has already established the accumulator and runs before this on
200
+ // every path. Defaulting again here would be a second owner for one invariant — and the version of
201
+ // that defense which shipped read into a LOCAL without writing the field back, so the very next read
202
+ // in `solve` saw the absent value again. A default that does not persist is not a fix.
203
+ const revolute = joint;
204
+ const motorImpulse = revolute.motorImpulse;
205
+ if (!revolute.enableMotor) {
206
+ revolute.motorImpulse = 0;
207
+ }
208
+ else if (motorImpulse !== 0) {
209
+ bodyA.angularVelocity -= bodyA.inverseInertia * motorImpulse;
210
+ bodyB.angularVelocity += bodyB.inverseInertia * motorImpulse;
211
+ }
185
212
  },
186
213
  clearAccumulatedImpulses(joint) {
187
214
  joint.impulse0 = 0;
@@ -202,7 +229,11 @@ export const physics2DRevoluteJointSolver = {
202
229
  revolute.upperAngle = -lower;
203
230
  revolute.referenceAngle = -revolute.referenceAngle;
204
231
  revolute.motorSpeed = -revolute.motorSpeed;
205
- revolute.motorImpulse = -revolute.motorImpulse;
232
+ // Defaulted BEFORE the negation, not after. This runs when the joint is added, ahead of the first
233
+ // prepare, so the field may still be absent — and `-undefined` is NaN, which is not nullish, so a
234
+ // later `??` would accept the poison rather than replace it. Negating an absent accumulator has to
235
+ // produce zero, not NaN.
236
+ revolute.motorImpulse = -(revolute.motorImpulse ?? 0);
206
237
  return true;
207
238
  },
208
239
  prepare(world, joint, dt) {
@@ -219,7 +250,9 @@ export const physics2DRevoluteJointSolver = {
219
250
  // by zero.
220
251
  const inverseInertiaSum = bodyA.inverseInertia + bodyB.inverseInertia;
221
252
  const angularMass = inverseInertiaSum > 0 ? 1 / inverseInertiaSum : 0;
222
- const revoluteState = acquireJointState(joint, 7);
253
+ // The motor accumulator is revolute-specific, so the shared entry point above cannot reach it.
254
+ revolute.motorImpulse ??= 0;
255
+ const revoluteState = beginJointSolve(joint, 7);
223
256
  revoluteState[0] = errorX * (BAUMGARTE / dt);
224
257
  revoluteState[1] = errorY * (BAUMGARTE / dt);
225
258
  revoluteState[2] = angularMass;
@@ -257,20 +290,26 @@ export const physics2DRevoluteJointSolver = {
257
290
  if (revolute.enableLimit) {
258
291
  const bias = state[6];
259
292
  const angle = bodyB.angle - bodyA.angle - revolute.referenceAngle;
260
- // Each end is a one-sided constraint: it may only push the angle back inside the interval,
261
- // never pull it in. Two things make that true together. The non-negative clamp on the running
262
- // impulse means a limit can push and never pull. And the bias is the REMAINING ROOM to the
263
- // bound, max(C, 0) / dt, not the violation depth: while the angle is inside the interval that
264
- // room is large and positive, which drives the desired impulse negative, so the clamp holds
265
- // the accumulator at zero and the limit contributes nothing.
293
+ // Each end is a one-sided constraint: the non-negative clamp on the running impulse lets a
294
+ // limit push the angle back inside the interval and never pull it in.
295
+ //
296
+ // The bias is the SIGNED distance to the bound, C / dt, with no clamp on C — and both clamps
297
+ // are wrong, in opposite ways:
266
298
  //
267
- // Using the violation depth instead — min(C, 0) — zeroes the bias while inside the interval,
268
- // and the upper end then reads a positive desired impulse against any forward rotation and
269
- // brakes it to a standstill. Measured while building this: a motor at speed 5 held the arm at
270
- // exactly zero, spending its whole torque budget every step against a limit it was nowhere
271
- // near.
299
+ // max(C, 0) suppresses correctly but cannot correct. It zeroes the bias exactly when the
300
+ // angle is already outside the interval, leaving only the relative-velocity term, so a joint
301
+ // authored out of range and sitting still is never pushed back: it stays violated forever.
302
+ //
303
+ // min(C, 0) corrects but cannot suppress. It zeroes the bias while INSIDE the interval, and
304
+ // the upper end then reads a positive desired impulse against any forward rotation and brakes
305
+ // it to a standstill — a motor at speed 5 held the arm at exactly zero, spending its whole
306
+ // torque budget against a limit it was nowhere near.
307
+ //
308
+ // Signed C does both. Inside the interval it is positive, which drives the desired impulse
309
+ // negative and the clamp holds the accumulator at zero, so the limit contributes nothing.
310
+ // Outside it is negative, which drives the desired impulse positive and pushes the angle back.
272
311
  const lowerError = angle - revolute.lowerAngle;
273
- const lowerDesired = -angularMass * (bodyB.angularVelocity - bodyA.angularVelocity + Math.max(lowerError, 0) * bias);
312
+ const lowerDesired = -angularMass * (bodyB.angularVelocity - bodyA.angularVelocity + lowerError * bias);
274
313
  const lowerPrevious = state[3];
275
314
  const lowerTotal = Math.max(lowerPrevious + lowerDesired, 0);
276
315
  state[3] = lowerTotal;
@@ -278,7 +317,7 @@ export const physics2DRevoluteJointSolver = {
278
317
  bodyA.angularVelocity -= bodyA.inverseInertia * lowerApplied;
279
318
  bodyB.angularVelocity += bodyB.inverseInertia * lowerApplied;
280
319
  const upperError = revolute.upperAngle - angle;
281
- const upperDesired = -angularMass * (bodyA.angularVelocity - bodyB.angularVelocity + Math.max(upperError, 0) * bias);
320
+ const upperDesired = -angularMass * (bodyA.angularVelocity - bodyB.angularVelocity + upperError * bias);
282
321
  const upperPrevious = state[4];
283
322
  const upperTotal = Math.max(upperPrevious + upperDesired, 0);
284
323
  state[4] = upperTotal;
@@ -325,7 +364,7 @@ export const physics2DRopeJointSolver = {
325
364
  // Slack: no constraint at all this step, which is what a rope IS. Marked by a zero effective mass so
326
365
  // the iterations skip it without a second flag to keep in sync.
327
366
  const active = excess > 0;
328
- const ropeState = acquireJointState(rope, 5);
367
+ const ropeState = beginJointSolve(rope, 5);
329
368
  ropeState[0] = active && mass > 0 ? 1 / mass : 0;
330
369
  ropeState[1] = active ? excess * (BAUMGARTE / dt) : 0;
331
370
  ropeState[2] = 0;
@@ -391,7 +430,7 @@ export const physics2DWeldJointSolver = {
391
430
  const errorY = bodyB.y + joint.rBY - (bodyA.y + joint.rAY);
392
431
  const angleError = bodyB.angle - bodyA.angle - weld.referenceAngle;
393
432
  const angularMass = bodyA.inverseInertia + bodyB.inverseInertia;
394
- const weldState = acquireJointState(weld, 5);
433
+ const weldState = beginJointSolve(weld, 5);
395
434
  weldState[0] = errorX * (BAUMGARTE / dt);
396
435
  weldState[1] = errorY * (BAUMGARTE / dt);
397
436
  weldState[2] = angleError * (BAUMGARTE / dt);
@@ -473,7 +512,23 @@ function axisRelativeVelocity(bodyA, bodyB, joint, axisX, axisY) {
473
512
  // destination — the source was fresh garbage each frame, one array per joint per step. Handing the
474
513
  // destination back is what makes the prepare pass allocation-free, and it matches the SDK's
475
514
  // write-into-out convention rather than returning a new value.
476
- function acquireJointState(joint, length) {
515
+ // Entry point for one joint's step: sizes its per-step scratch and ESTABLISHES its impulse accumulators.
516
+ //
517
+ // The accumulators are established here rather than defended at each read because every read assumed the
518
+ // field was already a number, and a joint can reach the solver without one. The type declares them
519
+ // required, but a joint deserialized from a saved world satisfies that only at compile time; at runtime
520
+ // the fields are simply absent. The first read then computes `undefined + x`, and because an accumulator
521
+ // is fed back into the next iteration the NaN does not stay local — it goes out through the applied
522
+ // impulse into BOTH bodies' velocities, and from there into every contact they touch.
523
+ //
524
+ // This is the one place that covers the whole class. Every solver's `prepare` calls it, and `solve`
525
+ // returns early when the scratch is absent, so no solver can read an accumulator this has not passed
526
+ // over first. Kind-specific accumulators (the revolute motor) are established by their own `prepare`,
527
+ // which is the only code that knows they exist.
528
+ function beginJointSolve(joint, length) {
529
+ joint.impulse0 ??= 0;
530
+ joint.impulse1 ??= 0;
531
+ joint.impulse2 ??= 0;
477
532
  let state = jointStateScratch.get(joint);
478
533
  if (state === undefined) {
479
534
  state = [];
@@ -1 +1 @@
1
- {"version":3,"file":"joints.js","sourceRoot":"","sources":["../src/joints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"joints.js","sourceRoot":"","sources":["../src/joints.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../src/solver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,qBAAqB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAarH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI,CAON;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC5B,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC5B,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAyED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAGlE;AAKD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAQtE;AAYD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAmBtE"}
1
+ {"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../src/solver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,qBAAqB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAcrH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI,CAON;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC5B,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,EAC5B,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,CAMR;AAyED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAGlE;AAKD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAStE;AAYD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAoBtE"}
package/dist/solver.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { isRigidBody2DPairAwake } from './islands';
1
2
  import { findPhysics2DBody } from './world';
2
3
  // Applies equal and opposite impulses at the pair's contact point. The angular term is the lever arm
3
4
  // crossed with the impulse — the reason an off-centre contact spins a body instead of only shoving it.
@@ -79,6 +80,8 @@ export function solvePhysics2DContactsOnce(world) {
79
80
  const bodyB = findPhysics2DBody(world, contact.bodyB);
80
81
  if (bodyA === null || bodyB === null)
81
82
  continue;
83
+ if (!isRigidBody2DPairAwake(bodyA, bodyB))
84
+ continue;
82
85
  solvePhysics2DContact(contact, bodyA, bodyB);
83
86
  }
84
87
  }
@@ -100,6 +103,8 @@ export function warmStartPhysics2DContacts(world) {
100
103
  const bodyB = findPhysics2DBody(world, contact.bodyB);
101
104
  if (bodyA === null || bodyB === null)
102
105
  continue;
106
+ if (!isRigidBody2DPairAwake(bodyA, bodyB))
107
+ continue;
103
108
  const normalX = contact.normalX;
104
109
  const normalY = contact.normalY;
105
110
  const tangentX = -normalY;
@@ -1 +1 @@
1
- {"version":3,"file":"solver.js","sourceRoot":"","sources":["../src/solver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solver.js","sourceRoot":"","sources":["../src/solver.ts"],"names":[],"mappings":"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"}