Whether adapter implements SolverJointAccess — the structural
detection a world uses before it touches a joint (WP-6.1).
Structural and not nominal, and not a capability flag, for three reasons:
PhysicsCapabilities (§37) is frozen at the six fields §37 lists, and
adding a seventh would break every existing adapter's capability record at
compile time — including the two Rapier adapters, which must keep building
while their joint support lands in WP-6.2/6.3.
PhysicsWorldAdapter stays PhysicsSolverAdapter & SolverBodyAccess, so
an adapter with no joints is still a legal world adapter and every Phase 5
world keeps working untouched.
A structural check cannot disagree with reality the way a declaration can:
an adapter that says it has joints but has no getJointId fails here, at
addJoint, with a message naming the members it is missing.
capabilities.jointTypes remains the declaration of which §28 types an
adapter builds; this predicate answers the prior question of whether the
engine can talk to its joints at all.
Whether
adapterimplements SolverJointAccess — the structural detection a world uses before it touches a joint (WP-6.1).Structural and not nominal, and not a capability flag, for three reasons:
PhysicsCapabilities(§37) is frozen at the six fields §37 lists, and adding a seventh would break every existing adapter's capability record at compile time — including the two Rapier adapters, which must keep building while their joint support lands in WP-6.2/6.3.PhysicsWorldAdapterstaysPhysicsSolverAdapter & SolverBodyAccess, so an adapter with no joints is still a legal world adapter and every Phase 5 world keeps working untouched.getJointIdfails here, ataddJoint, with a message naming the members it is missing.capabilities.jointTypesremains the declaration of which §28 types an adapter builds; this predicate answers the prior question of whether the engine can talk to its joints at all.