bevy_xpbd
bevy_xpbd copied to clipboard
Remove `rest_length` field from `DistanceJoint`.
Objective
Remove rest_length from DistanceJoint which is ignored if length_limits is present.
Problem
I was using distance joints as muscles, changing their rest length to exert them. However, when I set the length_limits, nothing worked anymore. I looked into the code and saw my error: rest_length is ignored when length_limits is set, which seems like a foot gun to me. A TODO in the code said "Remove rest_length" and after surveying the code, I agreed.
Solution
I removed rest_length and with_rest_length() from DistanceJoint.
I changed the name and arguments of with_limits() to with_length_limits(). I think this makes it clearer that it's associated with the length_limits field. And I altered the arguments to accept Into<DistanceLimit>, so that it can be set with a Scalar, a pair of Scalars, or a DistanceLimit. My hope was that with_length_limits() could serve in place of both with_limits() and with_rest_length().
Auxillary Changes
Some doc tests weren't passing. I added the necessary ampersands (&) to make them pass.
Changelog
- Added:
From<Scalar>andFrom<(Scalar, Scalar)>forDistanceLimit. - Changed: Method name
with_limitstowith_length_limitsforDistanceJoint. - Changed: Removed
rest_lengthfield fromDistanceJoint. - Changed: Removed
with_rest_length()method fromDistanceJoint.
Migration Guide
- Replace
with_rest_length(1.0)withwith_length_limits(1.0). - Replace
joint.rest_length = 1.0with joint.length_limits = 1.0.into()`. - Replace
with_limits(0.0, 1.0)withwith_length_limits((0.0, 1.0)).