diff options
| author | Sébastien Crozet <developer@crozet.re> | 2020-08-31 17:58:14 +0200 |
|---|---|---|
| committer | Sébastien Crozet <developer@crozet.re> | 2020-08-31 19:05:14 +0200 |
| commit | df2156ffd02ea1b8c86e86f1d68c5e4e915e6d98 (patch) | |
| tree | 53c08d57b3fdbfcb94654a61fd68fcec5d66bffd /src/pipeline | |
| parent | cc05bad0410128b163e81e9f703ccb841f6a9a08 (diff) | |
| download | rapier-df2156ffd02ea1b8c86e86f1d68c5e4e915e6d98.tar.gz rapier-df2156ffd02ea1b8c86e86f1d68c5e4e915e6d98.tar.bz2 rapier-df2156ffd02ea1b8c86e86f1d68c5e4e915e6d98.zip | |
Allow the removal of a collider.
Diffstat (limited to 'src/pipeline')
| -rw-r--r-- | src/pipeline/physics_pipeline.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/pipeline/physics_pipeline.rs b/src/pipeline/physics_pipeline.rs index 6e18a03..8449477 100644 --- a/src/pipeline/physics_pipeline.rs +++ b/src/pipeline/physics_pipeline.rs @@ -7,7 +7,8 @@ use crate::dynamics::{IntegrationParameters, JointSet, RigidBody, RigidBodyHandl #[cfg(feature = "parallel")] use crate::dynamics::{JointGraphEdge, ParallelIslandSolver as IslandSolver}; use crate::geometry::{ - BroadPhase, BroadPhasePairEvent, ColliderPair, ColliderSet, ContactManifoldIndex, NarrowPhase, + BroadPhase, BroadPhasePairEvent, Collider, ColliderHandle, ColliderPair, ColliderSet, + ContactManifoldIndex, NarrowPhase, }; use crate::math::Vector; use crate::pipeline::EventHandler; @@ -245,6 +246,27 @@ impl PhysicsPipeline { self.counters.step_completed(); } + /// Remove a collider and all its associated data. + pub fn remove_collider( + &mut self, + handle: ColliderHandle, + broad_phase: &mut BroadPhase, + narrow_phase: &mut NarrowPhase, + bodies: &mut RigidBodySet, + colliders: &mut ColliderSet, + ) -> Option<Collider> { + broad_phase.remove_colliders(&[handle], colliders); + narrow_phase.remove_colliders(&[handle], colliders, bodies); + let collider = colliders.remove_internal(handle)?; + + if let Some(parent) = bodies.get_mut_internal(collider.parent) { + parent.remove_collider_internal(handle, &collider); + bodies.wake_up(collider.parent); + } + + Some(collider) + } + /// Remove a rigid-body and all its associated data. pub fn remove_rigid_body( &mut self, |
