diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b2647ee6..bf37c0693 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ - Fix crash when simulating a spring joint between two dynamic bodies. - Fix kinematic bodies not being affected by gravity after being switched back to dynamic. +### Added + +- Add `RigidBody::predict_position_using_velocity` to predict the next position of the rigid-body + based only on its current velocity. + ## v0.18.0 (24 Jan. 2024) The main highlight of this release is the implementation of a new non-linear constraints solver for better stability diff --git a/src/dynamics/rigid_body.rs b/src/dynamics/rigid_body.rs index b27b58e1d..2b07f379e 100644 --- a/src/dynamics/rigid_body.rs +++ b/src/dynamics/rigid_body.rs @@ -817,6 +817,17 @@ impl RigidBody { .integrate_forces_and_velocities(dt, &self.forces, &self.vels, &self.mprops) } + /// Predicts the next position of this rigid-body, by integrating only its velocity + /// by a time of `dt`. + /// + /// The forces that were applied to this rigid-body since the last physics step will + /// be ignored by this function. Use [`Self::predict_position_using_velocity_and_forces`] + /// instead to take forces into account. + pub fn predict_position_using_velocity(&self, dt: Real) -> Isometry { + self.vels + .integrate(dt, &self.pos.position, &self.mprops.local_mprops.local_com) + } + pub(crate) fn update_world_mass_properties(&mut self) { self.mprops.update_world_mass_properties(&self.pos.position); }