Reading is deliberately total: a field the document does not carry (an
older build's payload, a hand-edited file) restores to the §11 default rather
than throwing, because a motion component with a missing damping rate is a
component at zero damping and not a corrupt document. A field carrying
something that is not a number is treated the same way — the document
validator has already refused everything JSON cannot represent, so what is
left is a shape disagreement, and §79's extensibility goal is better served
by tolerating it than by refusing the whole scene.
maxSpeed and maxAngularSpeed are absent-means-unset on both sides: an
absent key restores a component with no limit, which is not the same as a
limit of zero (that would freeze the node).
The §79 serializer for MotionComponent (§11, PH-17).
Reading is deliberately total: a field the document does not carry (an older build's payload, a hand-edited file) restores to the §11 default rather than throwing, because a motion component with a missing damping rate is a component at zero damping and not a corrupt document. A field carrying something that is not a number is treated the same way — the document validator has already refused everything JSON cannot represent, so what is left is a shape disagreement, and §79's extensibility goal is better served by tolerating it than by refusing the whole scene.
maxSpeedandmaxAngularSpeedare absent-means-unset on both sides: an absent key restores a component with no limit, which is not the same as a limit of zero (that would freeze the node).