aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/dynamics/rigid_body.rs22
2 files changed, 24 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 72c99a1..e2a0acf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@
Disabling a multibody joint isn’t supported yet.
- Add `DynamicRayCastVehicleController`, a vehicle controller based on ray-casting and dynamic rigid-bodies (mostly
a port of the vehicle controller from Bullet physics).
+- Add `RigidBody::user_force` and `RigidBody::user_torque` to read the forces or torques added by the user to a
+ dynamic rigid-body.
### Modified
- Add the `QueryPipeline` as an optional argument to `PhysicsPipeline::step` and `CollisionPipeline::step`. If this
diff --git a/src/dynamics/rigid_body.rs b/src/dynamics/rigid_body.rs
index bb1e9bf..78132b2 100644
--- a/src/dynamics/rigid_body.rs
+++ b/src/dynamics/rigid_body.rs
@@ -938,6 +938,28 @@ impl RigidBody {
self.apply_impulse(impulse, wake_up);
self.apply_torque_impulse(torque_impulse, wake_up);
}
+
+ /// Retrieves the constant force(s) that the user has added to the body.
+ ///
+ /// Returns zero if the rigid-body isn’t dynamic.
+ pub fn user_force(&self) -> Vector<Real> {
+ if self.body_type == RigidBodyType::Dynamic {
+ self.forces.user_force
+ } else {
+ Vector::zeros()
+ }
+ }
+
+ /// Retrieves the constant torque(s) that the user has added to the body.
+ ///
+ /// Returns zero if the rigid-body isn’t dynamic.
+ pub fn user_torque(&self) -> AngVector<Real> {
+ if self.body_type == RigidBodyType::Dynamic {
+ self.forces.user_torque
+ } else {
+ AngVector::zero()
+ }
+ }
}
impl RigidBody {