bevy_xpbd icon indicating copy to clipboard operation
bevy_xpbd copied to clipboard

Remove `rest_length` field from `DistanceJoint`.

Open shanecelis opened this issue 1 year ago • 0 comments
trafficstars

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> 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)).

shanecelis avatar Sep 22 '24 01:09 shanecelis