aboutsummaryrefslogtreecommitdiff
path: root/src/pipeline/collision_pipeline.rs
diff options
context:
space:
mode:
authorCrozet Sébastien <developer@crozet.re>2021-03-29 14:54:54 +0200
committerCrozet Sébastien <developer@crozet.re>2021-03-29 14:54:54 +0200
commit8173e7ada2e3f5c99de53b532adc085a26c1cefd (patch)
treefbee80982c2245c3e97036b683b00678e6d14a33 /src/pipeline/collision_pipeline.rs
parentdec3e4197f3f8b47baedb28ddec976a846e7d099 (diff)
downloadrapier-8173e7ada2e3f5c99de53b532adc085a26c1cefd.tar.gz
rapier-8173e7ada2e3f5c99de53b532adc085a26c1cefd.tar.bz2
rapier-8173e7ada2e3f5c99de53b532adc085a26c1cefd.zip
Allow collider modification after its insersion to the ColliderSet.
Diffstat (limited to 'src/pipeline/collision_pipeline.rs')
-rw-r--r--src/pipeline/collision_pipeline.rs22
1 files changed, 6 insertions, 16 deletions
diff --git a/src/pipeline/collision_pipeline.rs b/src/pipeline/collision_pipeline.rs
index 5df3f6a..da572f3 100644
--- a/src/pipeline/collision_pipeline.rs
+++ b/src/pipeline/collision_pipeline.rs
@@ -44,19 +44,15 @@ impl CollisionPipeline {
hooks: &dyn PhysicsHooks,
events: &dyn EventHandler,
) {
- bodies.maintain(colliders);
+ colliders.handle_user_changes(bodies);
+ bodies.handle_user_changes(colliders);
self.broadphase_collider_pairs.clear();
self.broad_phase_events.clear();
- broad_phase.update(
- prediction_distance,
- bodies,
- colliders,
- &mut self.broad_phase_events,
- );
+ broad_phase.update(prediction_distance, colliders, &mut self.broad_phase_events);
+ narrow_phase.handle_user_changes(colliders, bodies, events);
narrow_phase.register_pairs(colliders, bodies, &self.broad_phase_events, events);
-
narrow_phase.compute_contacts(prediction_distance, bodies, colliders, hooks, events);
narrow_phase.compute_intersections(bodies, colliders, hooks, events);
@@ -64,22 +60,16 @@ impl CollisionPipeline {
colliders,
narrow_phase,
self.empty_joints.joint_graph(),
- 0,
+ 128,
);
- // // Update kinematic bodies velocities.
- // bodies.foreach_active_kinematic_body_mut_internal(|_, body| {
- // body.compute_velocity_from_next_position(integration_parameters.inv_dt());
- // });
-
// Update colliders positions and kinematic bodies positions.
bodies.foreach_active_body_mut_internal(|_, rb| {
rb.position = rb.next_position;
rb.update_colliders_positions(colliders);
for handle in &rb.colliders {
- let collider = &mut colliders[*handle];
- collider.prev_position = collider.position;
+ let collider = colliders.get_mut_internal(*handle).unwrap();
collider.position = rb.position * collider.delta;
}
});