diff options
| author | Sébastien Crozet <developer@crozet.re> | 2022-01-28 20:28:49 +0100 |
|---|---|---|
| committer | Sébastien Crozet <developer@crozet.re> | 2022-01-28 20:28:49 +0100 |
| commit | 3e25e3efba4cd6de8a40fbb26ed758d9e9842941 (patch) | |
| tree | 047e8e68edc397555edb5a58b867a29bda6dda30 /src | |
| parent | 71bb25acf821512f5c6d5cfc4e8db5b853f4cb0b (diff) | |
| download | rapier-3e25e3efba4cd6de8a40fbb26ed758d9e9842941.tar.gz rapier-3e25e3efba4cd6de8a40fbb26ed758d9e9842941.tar.bz2 rapier-3e25e3efba4cd6de8a40fbb26ed758d9e9842941.zip | |
Fix the application of damping to bodies part of an active island
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynamics/solver/velocity_solver.rs | 9 |
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); }); } } |
