aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-01-28 11:59:39 -0800
committerGitHub <noreply@github.com>2022-01-28 11:59:39 -0800
commit8e824929d5e4a8dca98472652bdf137e479abaad (patch)
tree047e8e68edc397555edb5a58b867a29bda6dda30
parent71bb25acf821512f5c6d5cfc4e8db5b853f4cb0b (diff)
parent3e25e3efba4cd6de8a40fbb26ed758d9e9842941 (diff)
downloadrapier-8e824929d5e4a8dca98472652bdf137e479abaad.tar.gz
rapier-8e824929d5e4a8dca98472652bdf137e479abaad.tar.bz2
rapier-8e824929d5e4a8dca98472652bdf137e479abaad.zip
Merge pull request #284 from dimforge/damping-fix
Fix the application of damping to bodies part of an active island
-rw-r--r--src/dynamics/solver/velocity_solver.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/dynamics/solver/velocity_solver.rs b/src/dynamics/solver/velocity_solver.rs
index 47275ed..c5c6ede 100644
--- a/src/dynamics/solver/velocity_solver.rs
+++ b/src/dynamics/solver/velocity_solver.rs
@@ -261,17 +261,22 @@ impl VelocitySolver {
multibody.velocities += mj_lambdas;
}
} else {
- let (ids, mprops): (&RigidBodyIds, &RigidBodyMassProps) =
- bodies.index_bundle(handle.0);
+ let (ids, damping, mprops): (
+ &RigidBodyIds,
+ &RigidBodyDamping,
+ &RigidBodyMassProps,
+ ) = bodies.index_bundle(handle.0);
let dvel = self.mj_lambdas[ids.active_set_offset];
let dangvel = mprops
.effective_world_inv_inertia_sqrt
.transform_vector(dvel.angular);
+ let damping = *damping; // To avoid borrow issues.
bodies.map_mut_internal(handle.0, |vels: &mut RigidBodyVelocity| {
vels.linvel += dvel.linear;
vels.angvel += dangvel;
+ *vels = vels.apply_damping(params.dt, &damping);
});
}
}