aboutsummaryrefslogtreecommitdiff
path: root/src/pipeline
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-03-13 15:29:22 +0100
committerSébastien Crozet <sebastien@crozet.re>2022-03-20 21:49:16 +0100
commit8e07d8799fe40fd5c759eb9468b9f642432985f0 (patch)
treea707e782a00de0fb6a0df84df824958edbcf57b1 /src/pipeline
parent1535db87c7e21065dfbc736ffe5927810d37fe75 (diff)
downloadrapier-8e07d8799fe40fd5c759eb9468b9f642432985f0.tar.gz
rapier-8e07d8799fe40fd5c759eb9468b9f642432985f0.tar.bz2
rapier-8e07d8799fe40fd5c759eb9468b9f642432985f0.zip
Rigid-body: don’t clear forces at end of timestep + don’t wake-up a rigid-body if the modified property is equal to the old value.
Diffstat (limited to 'src/pipeline')
-rw-r--r--src/pipeline/physics_pipeline.rs22
1 files changed, 2 insertions, 20 deletions
diff --git a/src/pipeline/physics_pipeline.rs b/src/pipeline/physics_pipeline.rs
index 9992ea0..894cbaf 100644
--- a/src/pipeline/physics_pipeline.rs
+++ b/src/pipeline/physics_pipeline.rs
@@ -224,7 +224,7 @@ impl PhysicsPipeline {
})
.unwrap();
bodies.map_mut_internal(handle.0, |forces: &mut RigidBodyForces| {
- forces.add_gravity_acceleration(&gravity, &effective_inv_mass)
+ forces.compute_effective_force_and_torque(&gravity, &effective_inv_mass)
});
}
@@ -355,7 +355,6 @@ impl PhysicsPipeline {
bodies: &mut Bodies,
colliders: &mut Colliders,
modified_colliders: &mut Vec<ColliderHandle>,
- clear_forces: bool,
) where
Bodies: ComponentSetMut<RigidBodyVelocity>
+ ComponentSetMut<RigidBodyForces>
@@ -369,16 +368,6 @@ impl PhysicsPipeline {
// Set the rigid-bodies and kinematic bodies to their final position.
for handle in islands.iter_active_bodies() {
let status: &RigidBodyType = bodies.index(handle.0);
- if status.is_kinematic() {
- bodies.set_internal(handle.0, RigidBodyVelocity::zero());
- }
-
- if clear_forces {
- bodies.map_mut_internal(handle.0, |f: &mut RigidBodyForces| {
- f.torque = na::zero();
- f.force = na::zero();
- });
- }
bodies.map_mut_internal(handle.0, |poss: &mut RigidBodyPosition| {
poss.position = poss.next_position
@@ -666,14 +655,7 @@ impl PhysicsPipeline {
}
}
- let clear_forces = remaining_substeps == 0;
- self.advance_to_final_positions(
- islands,
- bodies,
- colliders,
- modified_colliders,
- clear_forces,
- );
+ self.advance_to_final_positions(islands, bodies, colliders, modified_colliders);
self.detect_collisions(
&integration_parameters,