@flighthq/physics2d 0.3.0-next.1032.e2b99fc → 0.3.0-next.1220.6982c21
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/contract.d.ts +2 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +2 -0
- package/dist/contract.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/jointRegistry.d.ts +6 -0
- package/dist/jointRegistry.d.ts.map +1 -0
- package/dist/jointRegistry.js +61 -0
- package/dist/jointRegistry.js.map +1 -0
- package/dist/joints.d.ts +39 -0
- package/dist/joints.d.ts.map +1 -0
- package/dist/joints.js +488 -0
- package/dist/joints.js.map +1 -0
- package/dist/solver.d.ts +1 -0
- package/dist/solver.d.ts.map +1 -1
- package/dist/solver.js +15 -10
- package/dist/solver.js.map +1 -1
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +111 -8
- package/dist/step.js.map +1 -1
- package/dist/world.d.ts.map +1 -1
- package/dist/world.js +10 -0
- package/dist/world.js.map +1 -1
- package/package.json +5 -5
- package/src/jointRegistry.test.ts +145 -0
- package/src/joints.test.ts +648 -0
- package/src/solver.test.ts +19 -0
- package/src/step.test.ts +298 -0
package/dist/step.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { collideContactManifold, createCollisionContactManifold } from '@flighthq/collision/contract';
|
|
2
2
|
import { updatePhysics2DColliderWorldShape, writePhysics2DColliderBounds } from './colliderTransform';
|
|
3
|
-
import { relativeNormalVelocity,
|
|
3
|
+
import { relativeNormalVelocity, solvePhysics2DContactsOnce, warmStartPhysics2DContacts } from './solver';
|
|
4
4
|
import { findPhysics2DBody, isPhysics2DPairOrdered } from './world';
|
|
5
5
|
// Refreshes every collider's world shape and republishes its bounds to the broadphase index.
|
|
6
6
|
function updatePhysics2DBroadphase(world) {
|
|
@@ -21,8 +21,39 @@ function updatePhysics2DBroadphase(world) {
|
|
|
21
21
|
if (boundsScratch.maxY > maxY)
|
|
22
22
|
maxY = boundsScratch.maxY;
|
|
23
23
|
}
|
|
24
|
-
if (minX > maxX)
|
|
24
|
+
if (minX > maxX) {
|
|
25
|
+
// No collider produced bounds, so there is nothing to index. Withdraw rather than skip: the id
|
|
26
|
+
// may have been indexed on a previous step, and a stale AABB keeps generating pairs for a body
|
|
27
|
+
// this step has already decided not to collide.
|
|
28
|
+
world.index.removeSpatialObject(body.index);
|
|
25
29
|
continue;
|
|
30
|
+
}
|
|
31
|
+
// Bounds this package declines to hand to the broadphase — a physics judgement, kept as
|
|
32
|
+
// defence in depth rather than as a substitute for the index's own bound.
|
|
33
|
+
//
|
|
34
|
+
// `@flighthq/spatial` now bounds its own insert cost (non-finite bounds are declined with a
|
|
35
|
+
// sentinel, oversized ones go to a flat overflow list), so this is no longer what stands between a
|
|
36
|
+
// diverging body and a hung caller. What it still expresses is a rigid-body world's own opinion:
|
|
37
|
+
// a body that is non-finite, or ten million units across, has diverged by any measure this
|
|
38
|
+
// simulation cares about, and continuing to collide it wastes narrow-phase work on a result
|
|
39
|
+
// already meaningless. Skipping it stops that one body colliding and lets the rest of the world
|
|
40
|
+
// keep simulating.
|
|
41
|
+
//
|
|
42
|
+
// Keeping it also keeps the two packages honest about ownership: the cost bound is the index's,
|
|
43
|
+
// and this is a divergence filter that happens to share its shape.
|
|
44
|
+
if (!Number.isFinite(minX) ||
|
|
45
|
+
!Number.isFinite(minY) ||
|
|
46
|
+
!Number.isFinite(maxX) ||
|
|
47
|
+
!Number.isFinite(maxY) ||
|
|
48
|
+
maxX - minX > MAX_SIMULATED_EXTENT ||
|
|
49
|
+
maxY - minY > MAX_SIMULATED_EXTENT) {
|
|
50
|
+
// Withdraw the body from the index instead of merely skipping the update. Skipping left
|
|
51
|
+
// whatever AABB it had last step in place, so a body this filter had declared diverged went on
|
|
52
|
+
// producing broadphase pairs and holding live contacts from its last valid pose — the opposite
|
|
53
|
+
// of the "stops colliding" this comment claims. Removal is a no-op for an id never indexed.
|
|
54
|
+
world.index.removeSpatialObject(body.index);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
26
57
|
bodyBounds.minX = minX;
|
|
27
58
|
bodyBounds.minY = minY;
|
|
28
59
|
bodyBounds.maxX = maxX;
|
|
@@ -46,6 +77,8 @@ function updatePhysics2DBroadphase(world) {
|
|
|
46
77
|
// A determinism harness that shuffles only insertion order would pass with the first one broken.
|
|
47
78
|
function buildPhysics2DContacts(world) {
|
|
48
79
|
world.index.querySpatialPairs(pairScratch);
|
|
80
|
+
world.events.began.length = 0;
|
|
81
|
+
world.events.ended.length = 0;
|
|
49
82
|
for (const contact of world.contacts)
|
|
50
83
|
contact.touching = false;
|
|
51
84
|
for (const pair of pairScratch) {
|
|
@@ -53,9 +86,21 @@ function buildPhysics2DContacts(world) {
|
|
|
53
86
|
const second = findPhysics2DBody(world, pair.b);
|
|
54
87
|
if (first === null || second === null)
|
|
55
88
|
continue;
|
|
56
|
-
// Two bodies that cannot both move have no constraint to
|
|
57
|
-
// solver's body list free of pairs whose every impulse would be multiplied by zero.
|
|
58
|
-
|
|
89
|
+
// Two bodies that cannot both move have no constraint to SOLVE, and skipping them keeps the
|
|
90
|
+
// solver's body list free of pairs whose every impulse would be multiplied by zero. But a sensor
|
|
91
|
+
// is reported, never resolved — the solver already skips sensor contacts — so applying this test
|
|
92
|
+
// before any collider is inspected silently deleted every sensor overlap between two immovable
|
|
93
|
+
// bodies. A static trigger volume over static scenery is an ordinary thing to build, and it
|
|
94
|
+
// reported nothing at all. Immovable pairs are still skipped, unless one of them senses.
|
|
95
|
+
if (first.inverseMass === 0 &&
|
|
96
|
+
second.inverseMass === 0 &&
|
|
97
|
+
!hasSensorCollider(first) &&
|
|
98
|
+
!hasSensorCollider(second)) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// A jointed pair almost always overlaps at the anchor, and resolving that contact fights the
|
|
102
|
+
// constraint holding them together, so a joint suppresses it unless the caller asks otherwise.
|
|
103
|
+
if (isPhysics2DPairJointSuppressed(world, first.index, second.index))
|
|
59
104
|
continue;
|
|
60
105
|
const ordered = isPhysics2DPairOrdered(first, second);
|
|
61
106
|
const bodyA = ordered ? first : second;
|
|
@@ -70,9 +115,15 @@ function buildPhysics2DContacts(world) {
|
|
|
70
115
|
}
|
|
71
116
|
}
|
|
72
117
|
}
|
|
118
|
+
// Contact events are read off the cache's own transitions rather than tracked beside it: the cache
|
|
119
|
+
// already knows which pairs are touching, so a pair gaining an entry IS the begin and losing one IS the
|
|
120
|
+
// end. An ended contact is reported for the step it leaves, then dropped.
|
|
73
121
|
for (let i = world.contacts.length - 1; i >= 0; i--) {
|
|
74
|
-
|
|
122
|
+
const contact = world.contacts[i];
|
|
123
|
+
if (!contact.touching) {
|
|
124
|
+
world.events.ended.push(contact);
|
|
75
125
|
world.contacts.splice(i, 1);
|
|
126
|
+
}
|
|
76
127
|
}
|
|
77
128
|
world.contacts.sort(comparePhysics2DContacts);
|
|
78
129
|
}
|
|
@@ -82,6 +133,7 @@ function buildPhysics2DContacts(world) {
|
|
|
82
133
|
// contact feature the moment the manifold's point count or order changes.
|
|
83
134
|
function mergePhysics2DContact(world, bodyA, bodyB, colliderA, colliderB, manifold, sensor, friction, restitution) {
|
|
84
135
|
let contact = null;
|
|
136
|
+
let created = false;
|
|
85
137
|
for (const existing of world.contacts) {
|
|
86
138
|
if (existing.bodyA === bodyA &&
|
|
87
139
|
existing.bodyB === bodyB &&
|
|
@@ -92,6 +144,7 @@ function mergePhysics2DContact(world, bodyA, bodyB, colliderA, colliderB, manifo
|
|
|
92
144
|
}
|
|
93
145
|
}
|
|
94
146
|
if (contact === null) {
|
|
147
|
+
created = true;
|
|
95
148
|
contact = {
|
|
96
149
|
bodyA,
|
|
97
150
|
bodyB,
|
|
@@ -108,6 +161,8 @@ function mergePhysics2DContact(world, bodyA, bodyB, colliderA, colliderB, manifo
|
|
|
108
161
|
};
|
|
109
162
|
world.contacts.push(contact);
|
|
110
163
|
}
|
|
164
|
+
if (created)
|
|
165
|
+
world.events.began.push(contact);
|
|
111
166
|
contact.normalX = manifold.normalX;
|
|
112
167
|
contact.normalY = manifold.normalY;
|
|
113
168
|
contact.friction = friction;
|
|
@@ -217,9 +272,34 @@ export function stepPhysics2D(world, dt) {
|
|
|
217
272
|
body.angularVelocity /= 1 + body.angularDamping * dt;
|
|
218
273
|
}
|
|
219
274
|
preparePhysics2DConstraints(world, dt);
|
|
220
|
-
|
|
275
|
+
for (const joint of world.joints) {
|
|
276
|
+
world.jointSolvers.get(joint.kind)?.prepare(world, joint, dt);
|
|
277
|
+
}
|
|
278
|
+
// Joints warm-start alongside contacts, which is what the impulse block on Physics2DJoint has always
|
|
279
|
+
// been documented to be for. Each kind reapplies its own converged impulse, because the block is
|
|
280
|
+
// deliberately untyped and only the kind knows what its numbers mean. With warm starting off the
|
|
281
|
+
// accumulators are cleared instead, so a world told not to use the cache does not quietly keep
|
|
282
|
+
// seeding from it — the previous code left them growing whether the flag was set or not.
|
|
283
|
+
if (config.warmStarting) {
|
|
221
284
|
warmStartPhysics2DContacts(world);
|
|
222
|
-
|
|
285
|
+
for (const joint of world.joints) {
|
|
286
|
+
world.jointSolvers.get(joint.kind)?.warmStart?.(world, joint);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
for (const joint of world.joints) {
|
|
291
|
+
world.jointSolvers.get(joint.kind)?.clearAccumulatedImpulses?.(joint);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Joints and contacts share one solve list and one iteration count. Solving them in separate passes
|
|
295
|
+
// would let each undo the other's correction — a hinge under load creeps if the contacts beneath it get
|
|
296
|
+
// a whole pass to themselves between joint iterations.
|
|
297
|
+
for (let iteration = 0; iteration < config.velocityIterations; iteration++) {
|
|
298
|
+
for (const joint of world.joints) {
|
|
299
|
+
world.jointSolvers.get(joint.kind)?.solve(world, joint);
|
|
300
|
+
}
|
|
301
|
+
solvePhysics2DContactsOnce(world);
|
|
302
|
+
}
|
|
223
303
|
for (const body of bodies) {
|
|
224
304
|
if (body.type === 'static')
|
|
225
305
|
continue;
|
|
@@ -250,6 +330,15 @@ function createPhysics2DContactPoint() {
|
|
|
250
330
|
bias: 0,
|
|
251
331
|
};
|
|
252
332
|
}
|
|
333
|
+
// Whether any of the body's colliders senses rather than collides. Cheap enough to ask per pair: a
|
|
334
|
+
// body carries a handful of colliders, and the alternative is inspecting every collider pairing.
|
|
335
|
+
function hasSensorCollider(body) {
|
|
336
|
+
for (const collider of body.colliders) {
|
|
337
|
+
if (collider.sensor)
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
return false;
|
|
341
|
+
}
|
|
253
342
|
// Total order over contacts, by the four identities that define one. Every field is a persistent index,
|
|
254
343
|
// so the order is stable across steps and independent of the broadphase's history.
|
|
255
344
|
function comparePhysics2DContacts(left, right) {
|
|
@@ -261,8 +350,22 @@ function comparePhysics2DContacts(left, right) {
|
|
|
261
350
|
return left.colliderA - right.colliderA;
|
|
262
351
|
return left.colliderB - right.colliderB;
|
|
263
352
|
}
|
|
353
|
+
// The widest body this world still treats as simulating. Named for what it bounds — the simulation's
|
|
354
|
+
// tolerance for divergence — not for the index, which bounds its own insert cost independently.
|
|
355
|
+
const MAX_SIMULATED_EXTENT = 1e7;
|
|
264
356
|
const boundsScratch = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
265
357
|
const bodyBounds = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
266
358
|
const pairScratch = [];
|
|
267
359
|
const manifoldScratch = createCollisionContactManifold();
|
|
360
|
+
// Whether a joint between these two bodies suppresses their contact.
|
|
361
|
+
function isPhysics2DPairJointSuppressed(world, first, second) {
|
|
362
|
+
for (const joint of world.joints) {
|
|
363
|
+
if (joint.collideConnected)
|
|
364
|
+
continue;
|
|
365
|
+
if ((joint.bodyA === first && joint.bodyB === second) || (joint.bodyA === second && joint.bodyB === first)) {
|
|
366
|
+
return true;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
268
371
|
//# sourceMappingURL=step.js.map
|
package/dist/step.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
|
package/dist/world.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,WAAW,CAKtF;AAID,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,UAAQ,GACb,iBAAiB,CAEnB;AAMD,wBAAgB,2BAA2B,IAAI,qBAAqB,CASnE;AAKD,wBAAgB,oBAAoB,CAAC,QAAQ,SAAI,EAAE,QAAQ,SAAQ,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AASlC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,WAAW,CAKtF;AAID,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,UAAQ,GACb,iBAAiB,CAEnB;AAMD,wBAAgB,2BAA2B,IAAI,qBAAqB,CASnE;AAKD,wBAAgB,oBAAoB,CAAC,QAAQ,SAAI,EAAE,QAAQ,SAAQ,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAahH;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,WAAW,CAwBzG;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAKpG;AAcD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAElG;AAKD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAgB/F"}
|
package/dist/world.js
CHANGED
|
@@ -37,6 +37,9 @@ export function createPhysics2DWorld(gravityX = 0, gravityY = -9.81, index) {
|
|
|
37
37
|
return {
|
|
38
38
|
bodies: [],
|
|
39
39
|
contacts: [],
|
|
40
|
+
joints: [],
|
|
41
|
+
jointSolvers: new Map(),
|
|
42
|
+
events: { began: [], ended: [] },
|
|
40
43
|
index: index ?? createUniformGridSpatialBackend(1),
|
|
41
44
|
config: createPhysics2DSolverConfig(),
|
|
42
45
|
gravityX,
|
|
@@ -111,6 +114,13 @@ export function removePhysics2DBody(world, body) {
|
|
|
111
114
|
if (contact.bodyA === body.index || contact.bodyB === body.index)
|
|
112
115
|
world.contacts.splice(i, 1);
|
|
113
116
|
}
|
|
117
|
+
// Joints naming the removed body go with it: a constraint with one end missing has nothing to solve
|
|
118
|
+
// against, and leaving it would let a later body inheriting the index be silently constrained by it.
|
|
119
|
+
for (let i = world.joints.length - 1; i >= 0; i--) {
|
|
120
|
+
const joint = world.joints[i];
|
|
121
|
+
if (joint.bodyA === body.index || joint.bodyB === body.index)
|
|
122
|
+
world.joints.splice(i, 1);
|
|
123
|
+
}
|
|
114
124
|
return true;
|
|
115
125
|
}
|
|
116
126
|
//# sourceMappingURL=world.js.map
|
package/dist/world.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAW7E,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,uGAAuG;AACvG,qGAAqG;AACrG,uGAAuG;AACvG,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAAC,KAAqB,EAAE,IAAiB;IACvE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;IACnC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uGAAuG;AACvG,iGAAiG;AACjG,MAAM,UAAU,uBAAuB,CACrC,KAAqB,EACrB,QAA2B,EAC3B,MAAM,GAAG,KAAK;IAEd,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACtF,CAAC;AAED,sGAAsG;AACtG,wGAAwG;AACxG,qGAAqG;AACrG,wDAAwD;AACxD,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,kBAAkB,EAAE,EAAE;QACtB,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,KAAK;QACtB,kBAAkB,EAAE,GAAG;QACvB,oBAAoB,EAAE,CAAC;QACvB,YAAY,EAAE,IAAI;KACnB,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,qGAAqG;AACrG,8BAA8B;AAC9B,MAAM,UAAU,oBAAoB,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,IAAI,EAAE,KAA2B;IAC9F,OAAO;QACL,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,IAAI,GAAG,EAAE;QACvB,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAChC,KAAK,EAAE,KAAK,IAAI,+BAA+B,CAAC,CAAC,CAAC;QAClD,MAAM,EAAE,2BAA2B,EAAE;QACrC,QAAQ;QACR,QAAQ;QACR,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,gGAAgG;AAChG,2BAA2B;AAC3B,MAAM,UAAU,iBAAiB,CAAC,IAAyB,EAAE,CAAS,EAAE,CAAS,EAAE,KAAK,GAAG,CAAC;IAC1F,OAAO;QACL,KAAK,EAAE,CAAC,CAAC;QACT,IAAI;QACJ,CAAC;QACD,CAAC;QACD,KAAK;QACL,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,CAAC;QAClB,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;QACV,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,aAAa,EAAE,CAAC;QAChB,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,yGAAyG;AACzG,iDAAiD;AACjD,MAAM,UAAU,iBAAiB,CAAC,KAA+B,EAAE,KAAa;IAC9E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uGAAuG;AACvG,uFAAuF;AACvF,EAAE;AACF,qGAAqG;AACrG,uGAAuG;AACvG,yGAAyG;AACzG,sGAAsG;AACtG,yGAAyG;AACzG,qEAAqE;AACrE,EAAE;AACF,sGAAsG;AACtG,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CAAC,CAAwB,EAAE,CAAwB;IACvF,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED,oGAAoG;AACpG,uGAAuG;AACvG,mCAAmC;AACnC,MAAM,UAAU,mBAAmB,CAAC,KAAqB,EAAE,IAA2B;IACpF,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAmB,CAAC,CAAC;IACrD,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzB,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3B,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,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,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;IACD,oGAAoG;IACpG,qGAAqG;IACrG,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/physics2d",
|
|
3
|
-
"version": "0.3.0-next.
|
|
3
|
+
"version": "0.3.0-next.1220.6982c21",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@flighthq/collision": "0.3.0-next.
|
|
40
|
-
"@flighthq/math": "0.3.0-next.
|
|
41
|
-
"@flighthq/spatial": "0.3.0-next.
|
|
42
|
-
"@flighthq/types": "0.3.0-next.
|
|
39
|
+
"@flighthq/collision": "0.3.0-next.1220.6982c21",
|
|
40
|
+
"@flighthq/math": "0.3.0-next.1220.6982c21",
|
|
41
|
+
"@flighthq/spatial": "0.3.0-next.1220.6982c21",
|
|
42
|
+
"@flighthq/types": "0.3.0-next.1220.6982c21"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"typescript": "^5.3.0"
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { Physics2DJoint } from '@flighthq/types/contract';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
addPhysics2DJoint,
|
|
6
|
+
getPhysics2DJointSolver,
|
|
7
|
+
registerPhysics2DJointSolver,
|
|
8
|
+
removePhysics2DJoint,
|
|
9
|
+
} from './jointRegistry';
|
|
10
|
+
import { stepPhysics2D } from './step';
|
|
11
|
+
import {
|
|
12
|
+
addPhysics2DBody,
|
|
13
|
+
createPhysics2DCollider,
|
|
14
|
+
createPhysics2DWorld,
|
|
15
|
+
createRigidBody2D,
|
|
16
|
+
removePhysics2DBody,
|
|
17
|
+
} from './world';
|
|
18
|
+
|
|
19
|
+
const STONE = { density: 1, friction: 0.3, restitution: 0 };
|
|
20
|
+
|
|
21
|
+
function body(world: ReturnType<typeof createPhysics2DWorld>, x: number, y: number) {
|
|
22
|
+
const made = createRigidBody2D('dynamic', x, y);
|
|
23
|
+
made.colliders.push(createPhysics2DCollider({ kind: 'aabb', minX: -0.5, minY: -0.5, maxX: 0.5, maxY: 0.5 }, STONE));
|
|
24
|
+
return addPhysics2DBody(world, made);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function joint(kind: string, bodyA: number, bodyB: number, anchorAX = 0, anchorBX = 0): Physics2DJoint {
|
|
28
|
+
return {
|
|
29
|
+
kind,
|
|
30
|
+
bodyA,
|
|
31
|
+
bodyB,
|
|
32
|
+
localAnchorAX: anchorAX,
|
|
33
|
+
localAnchorAY: 0,
|
|
34
|
+
localAnchorBX: anchorBX,
|
|
35
|
+
localAnchorBY: 0,
|
|
36
|
+
collideConnected: false,
|
|
37
|
+
impulse0: 0,
|
|
38
|
+
impulse1: 0,
|
|
39
|
+
impulse2: 0,
|
|
40
|
+
rAX: 0,
|
|
41
|
+
rAY: 0,
|
|
42
|
+
rBX: 0,
|
|
43
|
+
rBY: 0,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
describe('addPhysics2DJoint', () => {
|
|
48
|
+
it('orders the joint by body index, carrying its anchors with the swap', () => {
|
|
49
|
+
// Obligation 1 applies to joints too: they enter the SAME sequential solve list as contacts, and a
|
|
50
|
+
// joint has no broadphase to canonicalise it, so this is the one place it can be enforced. The
|
|
51
|
+
// anchors have to travel with the bodies — a joint whose ends were exchanged without its anchors
|
|
52
|
+
// would attach to the wrong points and hold the pair in a pose nobody asked for.
|
|
53
|
+
const world = createPhysics2DWorld();
|
|
54
|
+
const first = body(world, 0, 0);
|
|
55
|
+
const second = body(world, 2, 0);
|
|
56
|
+
const added = addPhysics2DJoint(world, joint('Test', second.index, first.index, 7, 9));
|
|
57
|
+
|
|
58
|
+
expect(added.bodyA).toBe(first.index);
|
|
59
|
+
expect(added.bodyB).toBe(second.index);
|
|
60
|
+
expect(added.localAnchorAX).toBe(9);
|
|
61
|
+
expect(added.localAnchorBX).toBe(7);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('leaves an already-ordered joint untouched', () => {
|
|
65
|
+
const world = createPhysics2DWorld();
|
|
66
|
+
const first = body(world, 0, 0);
|
|
67
|
+
const second = body(world, 2, 0);
|
|
68
|
+
const added = addPhysics2DJoint(world, joint('Test', first.index, second.index, 7, 9));
|
|
69
|
+
expect(added.bodyA).toBe(first.index);
|
|
70
|
+
expect(added.localAnchorAX).toBe(7);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe('getPhysics2DJointSolver', () => {
|
|
75
|
+
it('returns null for an unregistered kind rather than throwing', () => {
|
|
76
|
+
// A scene deserialized with a joint kind this build does not know about should import and simply not
|
|
77
|
+
// constrain, not refuse to load.
|
|
78
|
+
const world = createPhysics2DWorld();
|
|
79
|
+
expect(getPhysics2DJointSolver(world, 'acme.Conveyor')).toBeNull();
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('steps a world holding a joint whose kind has no solver', () => {
|
|
83
|
+
const world = createPhysics2DWorld();
|
|
84
|
+
const first = body(world, 0, 0);
|
|
85
|
+
const second = body(world, 2, 0);
|
|
86
|
+
addPhysics2DJoint(world, joint('acme.Unknown', first.index, second.index));
|
|
87
|
+
expect(() => stepPhysics2D(world, 1 / 60)).not.toThrow();
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
describe('registerPhysics2DJointSolver', () => {
|
|
92
|
+
it('makes a custom kind solvable without this package knowing it', () => {
|
|
93
|
+
const world = createPhysics2DWorld(0, 0);
|
|
94
|
+
let prepared = 0;
|
|
95
|
+
let solved = 0;
|
|
96
|
+
registerPhysics2DJointSolver(world, 'acme.Conveyor', {
|
|
97
|
+
prepare: () => void prepared++,
|
|
98
|
+
solve: () => void solved++,
|
|
99
|
+
});
|
|
100
|
+
const first = body(world, 0, 0);
|
|
101
|
+
const second = body(world, 2, 0);
|
|
102
|
+
addPhysics2DJoint(world, joint('acme.Conveyor', first.index, second.index));
|
|
103
|
+
stepPhysics2D(world, 1 / 60);
|
|
104
|
+
|
|
105
|
+
expect(prepared).toBe(1);
|
|
106
|
+
expect(solved).toBe(world.config.velocityIterations);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('is scoped to its world, so two worlds can register different kinds', () => {
|
|
110
|
+
const first = createPhysics2DWorld();
|
|
111
|
+
const second = createPhysics2DWorld();
|
|
112
|
+
registerPhysics2DJointSolver(first, 'acme.One', { prepare: () => {}, solve: () => {} });
|
|
113
|
+
expect(getPhysics2DJointSolver(first, 'acme.One')).not.toBeNull();
|
|
114
|
+
expect(getPhysics2DJointSolver(second, 'acme.One')).toBeNull();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('lets a later registration replace an earlier one', () => {
|
|
118
|
+
const world = createPhysics2DWorld();
|
|
119
|
+
const replacement = { prepare: () => {}, solve: () => {} };
|
|
120
|
+
registerPhysics2DJointSolver(world, 'acme.One', { prepare: () => {}, solve: () => {} });
|
|
121
|
+
registerPhysics2DJointSolver(world, 'acme.One', replacement);
|
|
122
|
+
expect(getPhysics2DJointSolver(world, 'acme.One')).toBe(replacement);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('removePhysics2DJoint', () => {
|
|
127
|
+
it('removes the joint and reports false for one the world does not hold', () => {
|
|
128
|
+
const world = createPhysics2DWorld();
|
|
129
|
+
const first = body(world, 0, 0);
|
|
130
|
+
const second = body(world, 2, 0);
|
|
131
|
+
const added = addPhysics2DJoint(world, joint('Test', first.index, second.index));
|
|
132
|
+
expect(removePhysics2DJoint(world, added)).toBe(true);
|
|
133
|
+
expect(world.joints).toHaveLength(0);
|
|
134
|
+
expect(removePhysics2DJoint(world, added)).toBe(false);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('drops joints naming a removed body, so a later body cannot inherit the constraint', () => {
|
|
138
|
+
const world = createPhysics2DWorld();
|
|
139
|
+
const first = body(world, 0, 0);
|
|
140
|
+
const second = body(world, 2, 0);
|
|
141
|
+
addPhysics2DJoint(world, joint('Test', first.index, second.index));
|
|
142
|
+
removePhysics2DBody(world, second);
|
|
143
|
+
expect(world.joints).toHaveLength(0);
|
|
144
|
+
});
|
|
145
|
+
});
|