From 46d976d97bc9334004a58a19bc9cab3ea78e9569 Mon Sep 17 00:00:00 2001 From: Sébastien Crozet Date: Sat, 19 Nov 2022 16:05:46 +0100 Subject: Allow disabling colliders, rigid-bodies and impulse joints --- src/geometry/collider_set.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/geometry/collider_set.rs') diff --git a/src/geometry/collider_set.rs b/src/geometry/collider_set.rs index b141445..1069f1b 100644 --- a/src/geometry/collider_set.rs +++ b/src/geometry/collider_set.rs @@ -41,6 +41,14 @@ impl ColliderSet { self.colliders.iter().map(|(h, c)| (ColliderHandle(h), c)) } + /// Iterate through all the enabled colliders on this set. + pub fn iter_enabled(&self) -> impl Iterator { + self.colliders + .iter() + .map(|(h, c)| (ColliderHandle(h), c)) + .filter(|(_, c)| c.is_enabled()) + } + /// Iterates mutably through all the colliders on this set. #[cfg(not(feature = "dev-remove-slow-accessors"))] pub fn iter_mut(&mut self) -> impl Iterator { @@ -52,6 +60,12 @@ impl ColliderSet { }) } + /// Iterates mutably through all the enabled colliders on this set. + #[cfg(not(feature = "dev-remove-slow-accessors"))] + pub fn iter_enabled_mut(&mut self) -> impl Iterator { + self.iter_mut().filter(|(_, c)| c.is_enabled()) + } + /// The number of colliders on this set. pub fn len(&self) -> usize { self.colliders.len() @@ -268,6 +282,17 @@ impl ColliderSet { pub(crate) fn get_mut_internal(&mut self, handle: ColliderHandle) -> Option<&mut Collider> { self.colliders.get_mut(handle.0) } + + // Just a very long name instead of `.get_mut` to make sure + // this is really the method we wanted to use instead of `get_mut_internal`. + pub(crate) fn get_mut_internal_with_modification_tracking( + &mut self, + handle: ColliderHandle, + ) -> Option<&mut Collider> { + let result = self.colliders.get_mut(handle.0)?; + Self::mark_as_modified(handle, result, &mut self.modified_colliders); + Some(result) + } } impl Index for ColliderSet { -- cgit