aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dynamics/rigid_body_set.rs2
-rw-r--r--src/geometry/collider_set.rs9
-rw-r--r--src_testbed/testbed.rs6
3 files changed, 14 insertions, 3 deletions
diff --git a/src/dynamics/rigid_body_set.rs b/src/dynamics/rigid_body_set.rs
index b857173..ec4d388 100644
--- a/src/dynamics/rigid_body_set.rs
+++ b/src/dynamics/rigid_body_set.rs
@@ -207,7 +207,7 @@ impl RigidBodySet {
* Remove colliders attached to this rigid-body.
*/
for collider in &rb.colliders {
- colliders.remove(*collider, self);
+ colliders.remove(*collider, self, false);
}
/*
diff --git a/src/geometry/collider_set.rs b/src/geometry/collider_set.rs
index fd94675..60b9225 100644
--- a/src/geometry/collider_set.rs
+++ b/src/geometry/collider_set.rs
@@ -78,10 +78,14 @@ impl ColliderSet {
}
/// Remove a collider from this set and update its parent accordingly.
+ ///
+ /// If `wake_up` is `true`, the rigid-body the removed collider is attached to
+ /// will be woken up.
pub fn remove(
&mut self,
handle: ColliderHandle,
bodies: &mut RigidBodySet,
+ wake_up: bool,
) -> Option<Collider> {
let collider = self.colliders.remove(handle)?;
@@ -90,7 +94,10 @@ impl ColliderSet {
*/
if let Some(parent) = bodies.get_mut_internal(collider.parent) {
parent.remove_collider_internal(handle, &collider);
- bodies.wake_up(collider.parent, true);
+
+ if wake_up {
+ bodies.wake_up(collider.parent, true);
+ }
}
/*
diff --git a/src_testbed/testbed.rs b/src_testbed/testbed.rs
index fddeabe..4b998c3 100644
--- a/src_testbed/testbed.rs
+++ b/src_testbed/testbed.rs
@@ -758,7 +758,7 @@ impl Testbed {
for to_delete in &colliders[..num_to_delete] {
self.physics
.colliders
- .remove(to_delete[0], &mut self.physics.bodies);
+ .remove(to_delete[0], &mut self.physics.bodies, true);
}
}
WindowEvent::Key(Key::D, Action::Release, _) => {
@@ -1576,11 +1576,13 @@ CCD: {:.2}ms
}
if self.state.flags.contains(TestbedStateFlags::DEBUG) {
+ let t = instant::now();
let bf = bincode::serialize(&self.physics.broad_phase).unwrap();
let nf = bincode::serialize(&self.physics.narrow_phase).unwrap();
let bs = bincode::serialize(&self.physics.bodies).unwrap();
let cs = bincode::serialize(&self.physics.colliders).unwrap();
let js = bincode::serialize(&self.physics.joints).unwrap();
+ let serialization_time = instant::now() - t;
let hash_bf = md5::compute(&bf);
let hash_nf = md5::compute(&nf);
let hash_bodies = md5::compute(&bs);
@@ -1588,6 +1590,7 @@ CCD: {:.2}ms
let hash_joints = md5::compute(&js);
profile = format!(
r#"{}
+Serialization time: {:.2}ms
Hashes at frame: {}
|_ Broad phase [{:.1}KB]: {:?}
|_ Narrow phase [{:.1}KB]: {:?}
@@ -1595,6 +1598,7 @@ Hashes at frame: {}
|_ Colliders [{:.1}KB]: {:?}
|_ Joints [{:.1}KB]: {:?}"#,
profile,
+ serialization_time,
self.state.timestep_id,
bf.len() as f32 / 1000.0,
hash_bf,