diff options
| author | Sébastien Crozet <developer@crozet.re> | 2022-01-02 14:47:40 +0100 |
|---|---|---|
| committer | Sébastien Crozet <developer@crozet.re> | 2022-01-02 16:58:36 +0100 |
| commit | f74b8401ad9ef50b8cdbf1f43a2b21f6c42b0ebc (patch) | |
| tree | 53ac492fea5942a7d466f58a0095f39505674ea4 /src/dynamics/solver/position_solver.rs | |
| parent | b45d4b5ac2b31856c15e802b31e288a58940cbf2 (diff) | |
| download | rapier-f74b8401ad9ef50b8cdbf1f43a2b21f6c42b0ebc.tar.gz rapier-f74b8401ad9ef50b8cdbf1f43a2b21f6c42b0ebc.tar.bz2 rapier-f74b8401ad9ef50b8cdbf1f43a2b21f6c42b0ebc.zip | |
Implement multibody joints and the new solver
Diffstat (limited to 'src/dynamics/solver/position_solver.rs')
| -rw-r--r-- | src/dynamics/solver/position_solver.rs | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/src/dynamics/solver/position_solver.rs b/src/dynamics/solver/position_solver.rs deleted file mode 100644 index 48b71aa..0000000 --- a/src/dynamics/solver/position_solver.rs +++ /dev/null @@ -1,57 +0,0 @@ -use super::AnyJointPositionConstraint; -use crate::data::{ComponentSet, ComponentSetMut}; -use crate::dynamics::{solver::AnyPositionConstraint, IntegrationParameters}; -use crate::dynamics::{IslandManager, RigidBodyIds, RigidBodyPosition}; -use crate::math::{Isometry, Real}; - -pub(crate) struct PositionSolver { - positions: Vec<Isometry<Real>>, -} - -impl PositionSolver { - pub fn new() -> Self { - Self { - positions: Vec::new(), - } - } - - pub fn solve<Bodies>( - &mut self, - island_id: usize, - params: &IntegrationParameters, - islands: &IslandManager, - bodies: &mut Bodies, - contact_constraints: &[AnyPositionConstraint], - joint_constraints: &[AnyJointPositionConstraint], - ) where - Bodies: ComponentSet<RigidBodyIds> + ComponentSetMut<RigidBodyPosition>, - { - if contact_constraints.is_empty() && joint_constraints.is_empty() { - // Nothing to do. - return; - } - - self.positions.clear(); - self.positions - .extend(islands.active_island(island_id).iter().map(|h| { - let poss: &RigidBodyPosition = bodies.index(h.0); - poss.next_position - })); - - for _ in 0..params.max_position_iterations { - for constraint in joint_constraints { - constraint.solve(params, &mut self.positions) - } - - for constraint in contact_constraints { - constraint.solve(params, &mut self.positions) - } - } - - for handle in islands.active_island(island_id) { - let ids: &RigidBodyIds = bodies.index(handle.0); - let next_pos = &self.positions[ids.active_set_offset]; - bodies.map_mut_internal(handle.0, |poss| poss.next_position = *next_pos); - } - } -} |
