diff options
| author | Sébastien Crozet <developer@crozet.re> | 2022-03-13 15:29:22 +0100 |
|---|---|---|
| committer | Sébastien Crozet <sebastien@crozet.re> | 2022-03-20 21:49:16 +0100 |
| commit | 8e07d8799fe40fd5c759eb9468b9f642432985f0 (patch) | |
| tree | a707e782a00de0fb6a0df84df824958edbcf57b1 /src/pipeline | |
| parent | 1535db87c7e21065dfbc736ffe5927810d37fe75 (diff) | |
| download | rapier-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.rs | 22 |
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, |
