From 391bcf372ab19d4ae3eceb056eb605062bf71122 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Thu, 26 Nov 2020 11:41:43 +0100 Subject: Fix collider insertion/removal tracking. --- src_testbed/engine.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src_testbed') diff --git a/src_testbed/engine.rs b/src_testbed/engine.rs index ff5e1ef..040c883 100644 --- a/src_testbed/engine.rs +++ b/src_testbed/engine.rs @@ -237,7 +237,7 @@ impl GraphicsManager { for collider_handle in bodies[handle].colliders() { let color = self.c2color.get(collider_handle).copied().unwrap_or(color); let collider = &colliders[*collider_handle]; - self.add_collider(window, *collider_handle, collider, color, &mut new_nodes); + self.do_add_collider(window, *collider_handle, collider, color, &mut new_nodes); } new_nodes.iter_mut().for_each(|n| n.update(colliders)); @@ -256,7 +256,22 @@ impl GraphicsManager { nodes.append(&mut new_nodes); } - fn add_collider( + pub fn add_collider( + &mut self, + window: &mut Window, + handle: ColliderHandle, + colliders: &ColliderSet, + ) { + let collider = &colliders[handle]; + let color = *self.b2color.get(&collider.parent()).unwrap(); + let color = self.c2color.get(&handle).copied().unwrap_or(color); + let mut nodes = + std::mem::replace(self.b2sn.get_mut(&collider.parent()).unwrap(), Vec::new()); + self.do_add_collider(window, handle, collider, color, &mut nodes); + self.b2sn.insert(collider.parent(), nodes); + } + + fn do_add_collider( &mut self, window: &mut Window, handle: ColliderHandle, -- cgit