Merge pull request #440 from fabriceci/expose-time-until-sleep

Allow customising the time until sleep for a rigid body
This commit is contained in:
Sébastien Crozet
2023-02-04 16:19:37 +01:00
committed by GitHub
2 changed files with 7 additions and 4 deletions

View File

@@ -176,8 +176,7 @@ impl IslandManager {
update_energy(&mut rb.activation, sq_linvel, sq_angvel, dt); update_energy(&mut rb.activation, sq_linvel, sq_angvel, dt);
if rb.activation.time_since_can_sleep >= RigidBodyActivation::default_time_until_sleep() if rb.activation.time_since_can_sleep >= rb.activation.time_until_sleep {
{
// Mark them as sleeping for now. This will // Mark them as sleeping for now. This will
// be set to false during the graph traversal // be set to false during the graph traversal
// if it should not be put to sleep. // if it should not be put to sleep.

View File

@@ -978,6 +978,8 @@ pub struct RigidBodyActivation {
pub linear_threshold: Real, pub linear_threshold: Real,
/// The angular linear velocity bellow which the body can fall asleep. /// The angular linear velocity bellow which the body can fall asleep.
pub angular_threshold: Real, pub angular_threshold: Real,
/// The amount of time the rigid-body must remain below the thresholds to be put to sleep.
pub time_until_sleep: Real,
/// Since how much time can this body sleep? /// Since how much time can this body sleep?
pub time_since_can_sleep: Real, pub time_since_can_sleep: Real,
/// Is this body sleeping? /// Is this body sleeping?
@@ -1012,6 +1014,7 @@ impl RigidBodyActivation {
RigidBodyActivation { RigidBodyActivation {
linear_threshold: Self::default_linear_threshold(), linear_threshold: Self::default_linear_threshold(),
angular_threshold: Self::default_angular_threshold(), angular_threshold: Self::default_angular_threshold(),
time_until_sleep: Self::default_time_until_sleep(),
time_since_can_sleep: 0.0, time_since_can_sleep: 0.0,
sleeping: false, sleeping: false,
} }
@@ -1022,8 +1025,9 @@ impl RigidBodyActivation {
RigidBodyActivation { RigidBodyActivation {
linear_threshold: Self::default_linear_threshold(), linear_threshold: Self::default_linear_threshold(),
angular_threshold: Self::default_angular_threshold(), angular_threshold: Self::default_angular_threshold(),
sleeping: true, time_until_sleep: Self::default_time_until_sleep(),
time_since_can_sleep: Self::default_time_until_sleep(), time_since_can_sleep: Self::default_time_until_sleep(),
sleeping: true,
} }
} }
@@ -1055,6 +1059,6 @@ impl RigidBodyActivation {
#[inline] #[inline]
pub fn sleep(&mut self) { pub fn sleep(&mut self) {
self.sleeping = true; self.sleeping = true;
self.time_since_can_sleep = Self::default_time_until_sleep(); self.time_since_can_sleep = self.time_until_sleep;
} }
} }