aboutsummaryrefslogtreecommitdiff
path: root/src/pipeline
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-12-11 17:47:16 +0100
committerSébastien Crozet <developer@crozet.re>2022-12-11 17:47:42 +0100
commit0207f8cf96a3b091ca851276f98f3b482e2a39f2 (patch)
treeee0e602dc19a39b02e3b70e093815ca7bbb9f917 /src/pipeline
parentcb9350fd802a6641597140c22e2a0ce4b2ebeb1f (diff)
downloadrapier-0207f8cf96a3b091ca851276f98f3b482e2a39f2.tar.gz
rapier-0207f8cf96a3b091ca851276f98f3b482e2a39f2.tar.bz2
rapier-0207f8cf96a3b091ca851276f98f3b482e2a39f2.zip
Properly take initial sleeping state set by the user when creating a rigid-body
Diffstat (limited to 'src/pipeline')
-rw-r--r--src/pipeline/physics_pipeline.rs17
-rw-r--r--src/pipeline/user_changes.rs9
2 files changed, 15 insertions, 11 deletions
diff --git a/src/pipeline/physics_pipeline.rs b/src/pipeline/physics_pipeline.rs
index 9ef4177..358efed 100644
--- a/src/pipeline/physics_pipeline.rs
+++ b/src/pipeline/physics_pipeline.rs
@@ -5,7 +5,7 @@ use crate::counters::Counters;
use crate::dynamics::IslandSolver;
use crate::dynamics::{
CCDSolver, ImpulseJointSet, IntegrationParameters, IslandManager, MultibodyJointSet,
- RigidBodyPosition, RigidBodyType,
+ RigidBodyChanges, RigidBodyHandle, RigidBodyPosition, RigidBodyType,
};
#[cfg(feature = "parallel")]
use crate::dynamics::{JointGraphEdge, ParallelIslandSolver as IslandSolver};
@@ -77,6 +77,18 @@ impl PhysicsPipeline {
}
}
+ fn clear_modified_bodies(
+ &mut self,
+ bodies: &mut RigidBodySet,
+ modified_bodies: &mut Vec<RigidBodyHandle>,
+ ) {
+ for handle in modified_bodies.drain(..) {
+ if let Some(rb) = bodies.get_mut_internal(handle) {
+ rb.changes = RigidBodyChanges::empty();
+ }
+ }
+ }
+
fn detect_collisions(
&mut self,
integration_parameters: &IntegrationParameters,
@@ -430,7 +442,7 @@ impl PhysicsPipeline {
&modified_colliders[..],
);
- let modified_bodies = bodies.take_modified();
+ let mut modified_bodies = bodies.take_modified();
super::user_changes::handle_user_changes_to_rigid_bodies(
Some(islands),
bodies,
@@ -481,6 +493,7 @@ impl PhysicsPipeline {
}
self.clear_modified_colliders(colliders, &mut modified_colliders);
+ self.clear_modified_bodies(bodies, &mut modified_bodies);
removed_colliders.clear();
let mut remaining_time = integration_parameters.dt;
diff --git a/src/pipeline/user_changes.rs b/src/pipeline/user_changes.rs
index 00096de..0f4058c 100644
--- a/src/pipeline/user_changes.rs
+++ b/src/pipeline/user_changes.rs
@@ -86,14 +86,6 @@ pub(crate) fn handle_user_changes_to_rigid_bodies(
ids.active_set_id,
));
}
-
- // Add to the active dynamic set.
- activation.wake_up(true);
- // Make sure the sleep change flag is set (even if for some
- // reasons the rigid-body was already awake) to make
- // sure the code handling sleeping change adds the body to
- // the active_dynamic_set.
- changes.set(RigidBodyChanges::SLEEP, true);
}
RigidBodyType::KinematicVelocityBased
| RigidBodyType::KinematicPositionBased => {
@@ -216,7 +208,6 @@ pub(crate) fn handle_user_changes_to_rigid_bodies(
}
}
- rb.changes = RigidBodyChanges::empty();
rb.ids = ids;
rb.activation = activation;
}