Fix crash caused by a collider being remove before the first timestep.
This commit is contained in:
@@ -139,7 +139,9 @@ impl ColliderSet {
|
|||||||
self.modified_all_colliders = false;
|
self.modified_all_colliders = false;
|
||||||
} else {
|
} else {
|
||||||
for handle in self.modified_colliders.drain(..) {
|
for handle in self.modified_colliders.drain(..) {
|
||||||
self.colliders[handle.0].changes = ColliderChanges::empty();
|
if let Some(co) = self.colliders.get_mut(handle.0) {
|
||||||
|
co.changes = ColliderChanges::empty();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -588,4 +588,41 @@ mod test {
|
|||||||
assert_eq!(h2a, h2b);
|
assert_eq!(h2a, h2b);
|
||||||
assert_eq!(h3a, h3b);
|
assert_eq!(h3a, h3b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn collider_removal_before_step() {
|
||||||
|
let mut pipeline = PhysicsPipeline::new();
|
||||||
|
let gravity = Vector::y() * -9.81;
|
||||||
|
let integration_parameters = IntegrationParameters::default();
|
||||||
|
let mut broad_phase = BroadPhase::new();
|
||||||
|
let mut narrow_phase = NarrowPhase::new();
|
||||||
|
let mut bodies = RigidBodySet::new();
|
||||||
|
let mut colliders = ColliderSet::new();
|
||||||
|
let mut ccd = CCDSolver::new();
|
||||||
|
let mut joints = JointSet::new();
|
||||||
|
let physics_hooks = ();
|
||||||
|
let event_handler = ();
|
||||||
|
|
||||||
|
let body = RigidBodyBuilder::new_dynamic().build();
|
||||||
|
let b_handle = bodies.insert(body);
|
||||||
|
let collider = ColliderBuilder::ball(1.0).build();
|
||||||
|
let c_handle = colliders.insert(collider, b_handle, &mut bodies);
|
||||||
|
colliders.remove(c_handle, &mut bodies, true);
|
||||||
|
bodies.remove(b_handle, &mut colliders, &mut joints); // Happens with and without this line
|
||||||
|
|
||||||
|
for _ in 0..10 {
|
||||||
|
pipeline.step(
|
||||||
|
&gravity,
|
||||||
|
&integration_parameters,
|
||||||
|
&mut broad_phase,
|
||||||
|
&mut narrow_phase,
|
||||||
|
&mut bodies,
|
||||||
|
&mut colliders,
|
||||||
|
&mut joints,
|
||||||
|
&mut ccd,
|
||||||
|
&physics_hooks,
|
||||||
|
&event_handler,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user