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> and From<(Scalar, Scalar)> for DistanceLimit.
Changed: Method name with_limits to with_length_limits for DistanceJoint.
Changed: Removed rest_length field from DistanceJoint.
Changed: Removed with_rest_length() method from DistanceJoint.
Migration Guide
Replace with_rest_length(1.0) with with_length_limits(1.0).
Replace joint.rest_length = 1.0 with joint.length_limits = 1.0.into()`.
Replace with_limits(0.0, 1.0) with with_length_limits((0.0, 1.0)).
Objective
Remove
rest_length
fromDistanceJoint
which is ignored iflength_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 whenlength_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
andwith_rest_length()
fromDistanceJoint
.I changed the name and arguments of
with_limits()
towith_length_limits()
. I think this makes it clearer that it's associated with thelength_limits
field. And I altered the arguments to acceptInto<DistanceLimit>
, so that it can be set with aScalar
, a pair ofScalar
s, or aDistanceLimit
. My hope was thatwith_length_limits()
could serve in place of bothwith_limits()
andwith_rest_length()
.Auxillary Changes
Some doc tests weren't passing. I added the necessary ampersands (&) to make them pass.
Changelog
From<Scalar>
andFrom<(Scalar, Scalar)>
forDistanceLimit
.with_limits
towith_length_limits
forDistanceJoint
.rest_length
field fromDistanceJoint
.with_rest_length()
method fromDistanceJoint
.Migration Guide
with_rest_length(1.0)
withwith_length_limits(1.0)
.joint.rest_length = 1.0
with joint.length_limits = 1.0.into()`.with_limits(0.0, 1.0)
withwith_length_limits((0.0, 1.0))
.