summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/sim/rb_manager/mod.rs26
-rw-r--r--src/sim/sim_manager/mod.rs7
-rw-r--r--src/sim/sim_manager/utils.rs1
3 files changed, 26 insertions, 8 deletions
diff --git a/src/sim/rb_manager/mod.rs b/src/sim/rb_manager/mod.rs
index 1d76621..9d183db 100644
--- a/src/sim/rb_manager/mod.rs
+++ b/src/sim/rb_manager/mod.rs
@@ -3,7 +3,7 @@ pub mod debug_render;
use fxhash::FxHashMap;
use glam::Vec2;
use rapier2d::{
- dynamics::IntegrationParameters,
+ dynamics::{CCDSolver, IntegrationParameters, RigidBody, RigidBodyHandle},
geometry,
glamx::vec2,
pipeline::{DebugRenderPipeline, PhysicsWorld},
@@ -49,6 +49,28 @@ impl PhysicsManager {
),
}
}
+
+ // Temporary fix for https://github.com/dimforge/rapier/pull/1003
+ pub fn remove_collider(
+ &mut self,
+ handle: geometry::ColliderHandle,
+ ) -> Option<geometry::Collider> {
+ let removed = self.world.remove_collider(handle);
+ self.ccd_cache_invalidated();
+ removed
+ }
+
+ // Temporary fix for https://github.com/dimforge/rapier/pull/1003
+ pub fn remove_body(&mut self, handle: RigidBodyHandle) -> Option<RigidBody> {
+ let removed = self.world.remove_body(handle);
+ self.ccd_cache_invalidated();
+ removed
+ }
+
+ // Temporary fix for https://github.com/dimforge/rapier/pull/1003
+ fn ccd_cache_invalidated(&mut self) {
+ self.world.ccd_solver = CCDSolver::new();
+ }
}
// TODO remove
@@ -141,7 +163,7 @@ impl RbManager {
));
if let Some(handle) = self.chunk_colliders.remove(&(cx, cy)) {
- self.physics_manager.world.remove_collider(handle);
+ self.physics_manager.remove_collider(handle);
}
let handle = self.physics_manager.world.insert_collider(collider, None);
diff --git a/src/sim/sim_manager/mod.rs b/src/sim/sim_manager/mod.rs
index 432ac0b..ca68831 100644
--- a/src/sim/sim_manager/mod.rs
+++ b/src/sim/sim_manager/mod.rs
@@ -88,12 +88,9 @@ impl SimManager {
pub fn destroy_entity(&mut self, id: EntityId) {
if let Some(entity) = self.entities.get(&id) {
if let Some(rb_h) = entity.data.rb_h {
- self.rb_manager.physics_manager.world.remove_body(rb_h);
+ self.rb_manager.physics_manager.remove_body(rb_h);
} else if let Some(collider_h) = entity.data.collider_h {
- self.rb_manager
- .physics_manager
- .world
- .remove_collider(collider_h);
+ self.rb_manager.physics_manager.remove_collider(collider_h);
}
self.entities.remove(&id);
diff --git a/src/sim/sim_manager/utils.rs b/src/sim/sim_manager/utils.rs
index 0270cce..45960bf 100644
--- a/src/sim/sim_manager/utils.rs
+++ b/src/sim/sim_manager/utils.rs
@@ -171,7 +171,6 @@ pub fn read_back_entities_from_world(
// don't profile this separately as it's basically free
sim.rb_manager
.physics_manager
- .world
.remove_collider(entity.data.collider_h.unwrap());
let new_handle = sim