Fix the application of damping to bodies part of an active island
This commit is contained in:
@@ -261,17 +261,22 @@ impl VelocitySolver {
|
|||||||
multibody.velocities += mj_lambdas;
|
multibody.velocities += mj_lambdas;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let (ids, mprops): (&RigidBodyIds, &RigidBodyMassProps) =
|
let (ids, damping, mprops): (
|
||||||
bodies.index_bundle(handle.0);
|
&RigidBodyIds,
|
||||||
|
&RigidBodyDamping,
|
||||||
|
&RigidBodyMassProps,
|
||||||
|
) = bodies.index_bundle(handle.0);
|
||||||
|
|
||||||
let dvel = self.mj_lambdas[ids.active_set_offset];
|
let dvel = self.mj_lambdas[ids.active_set_offset];
|
||||||
let dangvel = mprops
|
let dangvel = mprops
|
||||||
.effective_world_inv_inertia_sqrt
|
.effective_world_inv_inertia_sqrt
|
||||||
.transform_vector(dvel.angular);
|
.transform_vector(dvel.angular);
|
||||||
|
let damping = *damping; // To avoid borrow issues.
|
||||||
|
|
||||||
bodies.map_mut_internal(handle.0, |vels: &mut RigidBodyVelocity| {
|
bodies.map_mut_internal(handle.0, |vels: &mut RigidBodyVelocity| {
|
||||||
vels.linvel += dvel.linear;
|
vels.linvel += dvel.linear;
|
||||||
vels.angvel += dangvel;
|
vels.angvel += dangvel;
|
||||||
|
*vels = vels.apply_damping(params.dt, &damping);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user