aboutsummaryrefslogtreecommitdiff
path: root/src_testbed
diff options
context:
space:
mode:
authorCrozet Sébastien <developer@crozet.re>2020-11-26 11:41:43 +0100
committerCrozet Sébastien <developer@crozet.re>2020-11-26 11:41:54 +0100
commit391bcf372ab19d4ae3eceb056eb605062bf71122 (patch)
treeb075af9c11ff14ea062c7a1f32c961ce5b0d67ef /src_testbed
parentf293dc602451ddf3c13ce6272f9d3556d47f4fca (diff)
downloadrapier-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.rs19
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,