diff options
| author | Crozet Sébastien <developer@crozet.re> | 2020-11-26 11:41:43 +0100 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2020-11-26 11:41:54 +0100 |
| commit | 391bcf372ab19d4ae3eceb056eb605062bf71122 (patch) | |
| tree | b075af9c11ff14ea062c7a1f32c961ce5b0d67ef /src | |
| parent | f293dc602451ddf3c13ce6272f9d3556d47f4fca (diff) | |
| download | rapier-391bcf372ab19d4ae3eceb056eb605062bf71122.tar.gz rapier-391bcf372ab19d4ae3eceb056eb605062bf71122.tar.bz2 rapier-391bcf372ab19d4ae3eceb056eb605062bf71122.zip | |
Fix collider insertion/removal tracking.
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynamics/rigid_body.rs | 11 | ||||
| -rw-r--r-- | src/geometry/collider_set.rs | 9 |
2 files changed, 12 insertions, 8 deletions
diff --git a/src/dynamics/rigid_body.rs b/src/dynamics/rigid_body.rs index 52db425..0d340cc 100644 --- a/src/dynamics/rigid_body.rs +++ b/src/dynamics/rigid_body.rs @@ -167,12 +167,10 @@ impl RigidBody { /// Adds a collider to this rigid-body. pub(crate) fn add_collider(&mut self, handle: ColliderHandle, coll: &Collider) { - if !self.changes.contains(RigidBodyChanges::MODIFIED) { - self.changes.set( - RigidBodyChanges::MODIFIED | RigidBodyChanges::COLLIDERS, - true, - ); - } + self.changes.set( + RigidBodyChanges::MODIFIED | RigidBodyChanges::COLLIDERS, + true, + ); let mass_properties = coll .mass_properties() @@ -193,6 +191,7 @@ impl RigidBody { /// Removes a collider from this rigid-body. pub(crate) fn remove_collider_internal(&mut self, handle: ColliderHandle, coll: &Collider) { if let Some(i) = self.colliders.iter().position(|e| *e == handle) { + self.changes.set(RigidBodyChanges::COLLIDERS, true); self.colliders.swap_remove(i); let mass_properties = coll .mass_properties() diff --git a/src/geometry/collider_set.rs b/src/geometry/collider_set.rs index 5765a4d..eb09322 100644 --- a/src/geometry/collider_set.rs +++ b/src/geometry/collider_set.rs @@ -63,8 +63,11 @@ impl ColliderSet { coll.reset_internal_references(); coll.parent = parent_handle; + + // NOTE: we use `get_mut` instead of `get_mut_internal` so that the + // modification flag is updated properly. let parent = bodies - .get_mut_internal(parent_handle) + .get_mut(parent_handle) .expect("Parent rigid body not found."); coll.position = parent.position * coll.delta; coll.predicted_position = parent.predicted_position * coll.delta; @@ -89,7 +92,9 @@ impl ColliderSet { /* * Delete the collider from its parent body. */ - if let Some(parent) = bodies.get_mut_internal(collider.parent) { + // NOTE: we use `get_mut` instead of `get_mut_internal` so that the + // modification flag is updated properly. + if let Some(parent) = bodies.get_mut(collider.parent) { parent.remove_collider_internal(handle, &collider); if wake_up { |
