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_testbed | |
| parent | f293dc602451ddf3c13ce6272f9d3556d47f4fca (diff) | |
| download | rapier-391bcf372ab19d4ae3eceb056eb605062bf71122.tar.gz rapier-391bcf372ab19d4ae3eceb056eb605062bf71122.tar.bz2 rapier-391bcf372ab19d4ae3eceb056eb605062bf71122.zip | |
Fix collider insertion/removal tracking.
Diffstat (limited to 'src_testbed')
| -rw-r--r-- | src_testbed/engine.rs | 19 |
1 files changed, 17 insertions, 2 deletions
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, |
