aboutsummaryrefslogtreecommitdiff
path: root/src/pipeline/physics_pipeline.rs
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-11-26 17:45:14 +0100
committerSébastien Crozet <developer@crozet.re>2022-12-11 15:20:33 +0100
commit683baf6bf77cfb41227ea6ed4a42499d1e051cdf (patch)
treec4469fde3ab77f192fdd2090eb0a44d6d47f016a /src/pipeline/physics_pipeline.rs
parent46d976d97bc9334004a58a19bc9cab3ea78e9569 (diff)
downloadrapier-683baf6bf77cfb41227ea6ed4a42499d1e051cdf.tar.gz
rapier-683baf6bf77cfb41227ea6ed4a42499d1e051cdf.tar.bz2
rapier-683baf6bf77cfb41227ea6ed4a42499d1e051cdf.zip
Allow the PhysicsPipeline and CollisionPipeline to update the QueryPipeline incrementally
Diffstat (limited to 'src/pipeline/physics_pipeline.rs')
-rw-r--r--src/pipeline/physics_pipeline.rs24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/pipeline/physics_pipeline.rs b/src/pipeline/physics_pipeline.rs
index f05a3f0..7226063 100644
--- a/src/pipeline/physics_pipeline.rs
+++ b/src/pipeline/physics_pipeline.rs
@@ -14,7 +14,7 @@ use crate::geometry::{
ContactManifoldIndex, NarrowPhase, TemporaryInteractionIndex,
};
use crate::math::{Real, Vector};
-use crate::pipeline::{EventHandler, PhysicsHooks};
+use crate::pipeline::{EventHandler, PhysicsHooks, QueryPipeline};
use {crate::dynamics::RigidBodySet, crate::geometry::ColliderSet};
/// The physics pipeline, responsible for stepping the whole physics simulation.
@@ -404,6 +404,7 @@ impl PhysicsPipeline {
impulse_joints: &mut ImpulseJointSet,
multibody_joints: &mut MultibodyJointSet,
ccd_solver: &mut CCDSolver,
+ mut query_pipeline: Option<&mut QueryPipeline>,
hooks: &dyn PhysicsHooks,
events: &dyn EventHandler,
) {
@@ -468,13 +469,17 @@ impl PhysicsPipeline {
colliders,
impulse_joints,
multibody_joints,
- &modified_colliders[..],
- &mut removed_colliders,
+ &modified_colliders,
+ &removed_colliders,
hooks,
events,
true,
);
+ if let Some(queries) = query_pipeline.as_deref_mut() {
+ queries.update_incremental(colliders, &modified_colliders, &removed_colliders, false);
+ }
+
self.clear_modified_colliders(colliders, &mut modified_colliders);
removed_colliders.clear();
@@ -595,13 +600,22 @@ impl PhysicsPipeline {
colliders,
impulse_joints,
multibody_joints,
- &mut modified_colliders,
- &mut removed_colliders,
+ &modified_colliders,
+ &[],
hooks,
events,
false,
);
+ if let Some(queries) = query_pipeline.as_deref_mut() {
+ queries.update_incremental(
+ colliders,
+ &modified_colliders,
+ &[],
+ remaining_substeps == 0,
+ );
+ }
+
self.clear_modified_colliders(colliders, &mut modified_colliders);
}