diff options
| author | Sébastien Crozet <sebcrozet@dimforge.com> | 2024-01-27 16:49:53 +0100 |
|---|---|---|
| committer | Sébastien Crozet <sebastien@crozet.re> | 2024-01-27 17:13:08 +0100 |
| commit | da92e5c2837b27433286cf0dd9d887fd44dda254 (patch) | |
| tree | 00428ce290288f5c64e53dee13d88ffdde4df0ca /src/dynamics/solver | |
| parent | aef873f20e7a1ee66b9d4c066884fa794048587b (diff) | |
| download | rapier-da92e5c2837b27433286cf0dd9d887fd44dda254.tar.gz rapier-da92e5c2837b27433286cf0dd9d887fd44dda254.tar.bz2 rapier-da92e5c2837b27433286cf0dd9d887fd44dda254.zip | |
Fix clippy and enable clippy on CI
Diffstat (limited to 'src/dynamics/solver')
16 files changed, 87 insertions, 110 deletions
diff --git a/src/dynamics/solver/contact_constraint/contact_constraints_set.rs b/src/dynamics/solver/contact_constraint/contact_constraints_set.rs index 4d02270..b5fdb6d 100644 --- a/src/dynamics/solver/contact_constraint/contact_constraints_set.rs +++ b/src/dynamics/solver/contact_constraint/contact_constraints_set.rs @@ -192,7 +192,7 @@ impl ContactConstraintsSet { .interaction_groups .simd_interactions .chunks_exact(SIMD_WIDTH) - .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[i[0]]).num_constraints) + .map(|i| ConstraintsCounts::from_contacts(manifolds_all[i[0]]).num_constraints) .sum(); unsafe { @@ -211,7 +211,7 @@ impl ContactConstraintsSet { .chunks_exact(SIMD_WIDTH) { let num_to_add = - ConstraintsCounts::from_contacts(&manifolds_all[manifolds_i[0]]).num_constraints; + ConstraintsCounts::from_contacts(manifolds_all[manifolds_i[0]]).num_constraints; let manifold_id = gather![|ii| manifolds_i[ii]]; let manifolds = gather![|ii| &*manifolds_all[manifolds_i[ii]]]; @@ -238,7 +238,7 @@ impl ContactConstraintsSet { .interaction_groups .nongrouped_interactions .iter() - .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[*i]).num_constraints) + .map(|i| ConstraintsCounts::from_contacts(manifolds_all[*i]).num_constraints) .sum(); unsafe { @@ -278,7 +278,7 @@ impl ContactConstraintsSet { let total_num_constraints = self .generic_two_body_interactions .iter() - .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[*i]).num_constraints) + .map(|i| ConstraintsCounts::from_contacts(manifolds_all[*i]).num_constraints) .sum(); self.generic_velocity_constraints_builder.resize( @@ -321,7 +321,7 @@ impl ContactConstraintsSet { let total_num_constraints = self .generic_one_body_interactions .iter() - .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[*i]).num_constraints) + .map(|i| ConstraintsCounts::from_contacts(manifolds_all[*i]).num_constraints) .sum(); self.generic_velocity_one_body_constraints_builder.resize( total_num_constraints, @@ -362,7 +362,7 @@ impl ContactConstraintsSet { .one_body_interaction_groups .simd_interactions .chunks_exact(SIMD_WIDTH) - .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[i[0]]).num_constraints) + .map(|i| ConstraintsCounts::from_contacts(manifolds_all[i[0]]).num_constraints) .sum(); unsafe { @@ -384,7 +384,7 @@ impl ContactConstraintsSet { .chunks_exact(SIMD_WIDTH) { let num_to_add = - ConstraintsCounts::from_contacts(&manifolds_all[manifolds_i[0]]).num_constraints; + ConstraintsCounts::from_contacts(manifolds_all[manifolds_i[0]]).num_constraints; let manifold_id = gather![|ii| manifolds_i[ii]]; let manifolds = gather![|ii| &*manifolds_all[manifolds_i[ii]]]; SimdOneBodyConstraintBuilder::generate( @@ -408,7 +408,7 @@ impl ContactConstraintsSet { .one_body_interaction_groups .nongrouped_interactions .iter() - .map(|i| ConstraintsCounts::from_contacts(&manifolds_all[*i]).num_constraints) + .map(|i| ConstraintsCounts::from_contacts(manifolds_all[*i]).num_constraints) .sum(); unsafe { diff --git a/src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs b/src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs index 7c39eab..7b1f8ea 100644 --- a/src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs +++ b/src/dynamics/solver/contact_constraint/generic_one_body_constraint.rs @@ -59,7 +59,7 @@ impl GenericOneBodyConstraintBuilder { let rb1 = handle1 .map(|h| SolverBody::from(&bodies[h])) - .unwrap_or_else(SolverBody::default); + .unwrap_or_default(); let rb2 = &bodies[handle2.unwrap()]; let (vels2, mprops2) = (&rb2.vels, &rb2.mprops); @@ -265,7 +265,7 @@ impl GenericOneBodyConstraint { solve_restitution: bool, solve_friction: bool, ) { - let solver_vel2 = self.inner.solver_vel2 as usize; + let solver_vel2 = self.inner.solver_vel2; let elements = &mut self.inner.elements[..self.inner.num_contacts as usize]; OneBodyConstraintElement::generic_solve_group( diff --git a/src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs b/src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs index a4924fe..073f585 100644 --- a/src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs +++ b/src/dynamics/solver/contact_constraint/generic_two_body_constraint.rs @@ -382,15 +382,15 @@ impl GenericTwoBodyConstraint { solve_friction: bool, ) { let mut solver_vel1 = if self.generic_constraint_mask & 0b01 == 0 { - GenericRhs::SolverVel(solver_vels[self.inner.solver_vel1 as usize]) + GenericRhs::SolverVel(solver_vels[self.inner.solver_vel1]) } else { - GenericRhs::GenericId(self.inner.solver_vel1 as usize) + GenericRhs::GenericId(self.inner.solver_vel1) }; let mut solver_vel2 = if self.generic_constraint_mask & 0b10 == 0 { - GenericRhs::SolverVel(solver_vels[self.inner.solver_vel2 as usize]) + GenericRhs::SolverVel(solver_vels[self.inner.solver_vel2]) } else { - GenericRhs::GenericId(self.inner.solver_vel2 as usize) + GenericRhs::GenericId(self.inner.solver_vel2) }; let elements = &mut self.inner.elements[..self.inner.num_contacts as usize]; @@ -415,11 +415,11 @@ impl GenericTwoBodyConstraint { ); if let GenericRhs::SolverVel(solver_vel1) = solver_vel1 { - solver_vels[self.inner.solver_vel1 as usize] = solver_vel1; + solver_vels[self.inner.solver_vel1] = solver_vel1; } if let GenericRhs::SolverVel(solver_vel2) = solver_vel2 { - solver_vels[self.inner.solver_vel2 as usize] = solver_vel2; + solver_vels[self.inner.solver_vel2] = solver_vel2; } } diff --git a/src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs b/src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs index f3bd3a0..40740a0 100644 --- a/src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs +++ b/src/dynamics/solver/contact_constraint/generic_two_body_constraint_element.rs @@ -114,7 +114,7 @@ impl TwoBodyConstraintTangentPart<Real> { j_id1, ndofs1, jacobians, - &tangents1[0], + tangents1[0], &self.gcross1[0], solver_vels, ) + solver_vel2.dvel( @@ -135,7 +135,7 @@ impl TwoBodyConstraintTangentPart<Real> { ndofs1, dlambda, jacobians, - &tangents1[0], + tangents1[0], &self.gcross1[0], solver_vels, im1, @@ -158,7 +158,7 @@ impl TwoBodyConstraintTangentPart<Real> { j_id1, ndofs1, jacobians, - &tangents1[0], + tangents1[0], &self.gcross1[0], solver_vels, ) + solver_vel2.dvel( @@ -173,7 +173,7 @@ impl TwoBodyConstraintTangentPart<Real> { j_id1 + j_step, ndofs1, jacobians, - &tangents1[1], + tangents1[1], &self.gcross1[1], solver_vels, ) + solver_vel2.dvel( @@ -199,7 +199,7 @@ impl TwoBodyConstraintTangentPart<Real> { ndofs1, dlambda[0], jacobians, - &tangents1[0], + tangents1[0], &self.gcross1[0], solver_vels, im1, @@ -209,7 +209,7 @@ impl TwoBodyConstraintTangentPart<Real> { ndofs1, dlambda[1], jacobians, - &tangents1[1], + tangents1[1], &self.gcross1[1], solver_vels, im1, @@ -258,7 +258,7 @@ impl TwoBodyConstraintNormalPart<Real> { let j_id1 = j_id1(j_id, ndofs1, ndofs2); let j_id2 = j_id2(j_id, ndofs1, ndofs2); - let dvel = solver_vel1.dvel(j_id1, ndofs1, jacobians, &dir1, &self.gcross1, solver_vels) + let dvel = solver_vel1.dvel(j_id1, ndofs1, jacobians, dir1, &self.gcross1, solver_vels) + solver_vel2.dvel(j_id2, ndofs2, jacobians, &-dir1, &self.gcross2, solver_vels) + self.rhs; @@ -271,7 +271,7 @@ impl TwoBodyConstraintNormalPart<Real> { ndofs1, dlambda, jacobians, - &dir1, + dir1, &self.gcross1, solver_vels, im1, @@ -323,7 +323,7 @@ impl TwoBodyConstraintElement<Real> { cfm_factor, nrm_j_id, jacobians, - &dir1, + dir1, im1, im2, ndofs1, @@ -339,7 +339,7 @@ impl TwoBodyConstraintElement<Real> { // Solve friction. if solve_friction { #[cfg(feature = "dim3")] - let tangents1 = [tangent1, &dir1.cross(&tangent1)]; + let tangents1 = [tangent1, &dir1.cross(tangent1)]; #[cfg(feature = "dim2")] let tangents1 = [&dir1.orthonormal_vector()]; let mut tng_j_id = tangent_j_id(j_id, ndofs1, ndofs2); diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint.rs b/src/dynamics/solver/contact_constraint/one_body_constraint.rs index 57931cd..be108a4 100644 --- a/src/dynamics/solver/contact_constraint/one_body_constraint.rs +++ b/src/dynamics/solver/contact_constraint/one_body_constraint.rs @@ -76,7 +76,7 @@ impl OneBodyConstraintBuilder { let rb1 = handle1 .map(|h| SolverBody::from(&bodies[h])) - .unwrap_or_else(SolverBody::default); + .unwrap_or_default(); let rb2 = &bodies[handle2.unwrap()]; let vels2 = &rb2.vels; @@ -334,7 +334,7 @@ impl OneBodyConstraint { solve_normal: bool, solve_friction: bool, ) { - let mut solver_vel2 = solver_vels[self.solver_vel2 as usize]; + let mut solver_vel2 = solver_vels[self.solver_vel2]; OneBodyConstraintElement::solve_group( self.cfm_factor, @@ -349,7 +349,7 @@ impl OneBodyConstraint { solve_friction, ); - solver_vels[self.solver_vel2 as usize] = solver_vel2; + solver_vels[self.solver_vel2] = solver_vel2; } // FIXME: duplicated code. This is exactly the same as in the two-body velocity constraint. diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint_element.rs b/src/dynamics/solver/contact_constraint/one_body_constraint_element.rs index c5c0944..d9ff7f4 100644 --- a/src/dynamics/solver/contact_constraint/one_body_constraint_element.rs +++ b/src/dynamics/solver/contact_constraint/one_body_constraint_element.rs @@ -204,7 +204,7 @@ impl<N: SimdRealCopy> OneBodyConstraintElement<N> { AngVector<N>: SimdDot<AngVector<N>, Result = N>, { #[cfg(feature = "dim3")] - let tangents1 = [tangent1, &dir1.cross(&tangent1)]; + let tangents1 = [tangent1, &dir1.cross(tangent1)]; #[cfg(feature = "dim2")] let tangents1 = [&dir1.orthonormal_vector()]; @@ -213,7 +213,7 @@ impl<N: SimdRealCopy> OneBodyConstraintElement<N> { for element in elements.iter_mut() { element .normal_part - .solve(cfm_factor, &dir1, im2, solver_vel2); + .solve(cfm_factor, dir1, im2, solver_vel2); let limit = limit * element.normal_part.impulse; let part = &mut element.tangent_part; part.apply_limit(tangents1, im2, limit, solver_vel2); diff --git a/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs b/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs index 33e0d77..cd2ea56 100644 --- a/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs +++ b/src/dynamics/solver/contact_constraint/one_body_constraint_simd.rs @@ -308,12 +308,8 @@ impl OneBodyConstraintSimd { solve_friction: bool, ) { let mut solver_vel2 = SolverVel { - linear: Vector::from(gather![ - |ii| solver_vels[self.solver_vel2[ii] as usize].linear - ]), - angular: AngVector::from(gather![ - |ii| solver_vels[self.solver_vel2[ii] as usize].angular - ]), + linear: Vector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].linear]), + angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].angular]), }; OneBodyConstraintElement::solve_group( @@ -330,8 +326,8 @@ impl OneBodyConstraintSimd { ); for ii in 0..SIMD_WIDTH { - solver_vels[self.solver_vel2[ii] as usize].linear = solver_vel2.linear.extract(ii); - solver_vels[self.solver_vel2[ii] as usize].angular = solver_vel2.angular.extract(ii); + solver_vels[self.solver_vel2[ii]].linear = solver_vel2.linear.extract(ii); + solver_vels[self.solver_vel2[ii]].angular = solver_vel2.angular.extract(ii); } } diff --git a/src/dynamics/solver/contact_constraint/two_body_constraint.rs b/src/dynamics/solver/contact_constraint/two_body_constraint.rs index 9b552ca..0a0ebd6 100644 --- a/src/dynamics/solver/contact_constraint/two_body_constraint.rs +++ b/src/dynamics/solver/contact_constraint/two_body_constraint.rs @@ -380,8 +380,8 @@ impl TwoBodyConstraint { solve_normal: bool, solve_friction: bool, ) { - let mut solver_vel1 = solver_vels[self.solver_vel1 as usize]; - let mut solver_vel2 = solver_vels[self.solver_vel2 as usize]; + let mut solver_vel1 = solver_vels[self.solver_vel1]; + let mut solver_vel2 = solver_vels[self.solver_vel2]; TwoBodyConstraintElement::solve_group( self.cfm_factor, @@ -398,8 +398,8 @@ impl TwoBodyConstraint { solve_friction, ); - solver_vels[self.solver_vel1 as usize] = solver_vel1; - solver_vels[self.solver_vel2 as usize] = solver_vel2; + solver_vels[self.solver_vel1] = solver_vel1; + solver_vels[self.solver_vel2] = solver_vel2; } pub fn writeback_impulses(&self, manifolds_all: &mut [&mut ContactManifold]) { diff --git a/src/dynamics/solver/contact_constraint/two_body_constraint_element.rs b/src/dynamics/solver/contact_constraint/two_body_constraint_element.rs index a8c0037..8c720b9 100644 --- a/src/dynamics/solver/contact_constraint/two_body_constraint_element.rs +++ b/src/dynamics/solver/contact_constraint/two_body_constraint_element.rs @@ -243,7 +243,7 @@ impl<N: SimdRealCopy> TwoBodyConstraintElement<N> { AngVector<N>: SimdDot<AngVector<N>, Result = N>, { #[cfg(feature = "dim3")] - let tangents1 = [tangent1, &dir1.cross(&tangent1)]; + let tangents1 = [tangent1, &dir1.cross(tangent1)]; #[cfg(feature = "dim2")] let tangents1 = [&dir1.orthonormal_vector()]; @@ -252,7 +252,7 @@ impl<N: SimdRealCopy> TwoBodyConstraintElement<N> { for element in elements.iter_mut() { element .normal_part - .solve(cfm_factor, &dir1, im1, im2, solver_vel1, solver_vel2); + .solve(cfm_factor, dir1, im1, im2, solver_vel1, solver_vel2); let limit = limit * element.normal_part.impulse; let part = &mut element.tangent_part; part.apply_limit(tangents1, im1, im2, limit, solver_vel1, solver_vel2); diff --git a/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs b/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs index b9f3e52..ee176d6 100644 --- a/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs +++ b/src/dynamics/solver/contact_constraint/two_body_constraint_simd.rs @@ -292,21 +292,13 @@ impl TwoBodyConstraintSimd { solve_friction: bool, ) { let mut solver_vel1 = SolverVel { - linear: Vector::from(gather![ - |ii| solver_vels[self.solver_vel1[ii] as usize].linear - ]), - angular: AngVector::from(gather![ - |ii| solver_vels[self.solver_vel1[ii] as usize].angular - ]), + linear: Vector::from(gather![|ii| solver_vels[self.solver_vel1[ii]].linear]), + angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel1[ii]].angular]), }; let mut solver_vel2 = SolverVel { - linear: Vector::from(gather![ - |ii| solver_vels[self.solver_vel2[ii] as usize].linear - ]), - angular: AngVector::from(gather![ - |ii| solver_vels[self.solver_vel2[ii] as usize].angular - ]), + linear: Vector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].linear]), + angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].angular]), }; TwoBodyConstraintElement::solve_group( @@ -325,12 +317,12 @@ impl TwoBodyConstraintSimd { ); for ii in 0..SIMD_WIDTH { - solver_vels[self.solver_vel1[ii] as usize].linear = solver_vel1.linear.extract(ii); - solver_vels[self.solver_vel1[ii] as usize].angular = solver_vel1.angular.extract(ii); + solver_vels[self.solver_vel1[ii]].linear = solver_vel1.linear.extract(ii); + solver_vels[self.solver_vel1[ii]].angular = solver_vel1.angular.extract(ii); } for ii in 0..SIMD_WIDTH { - solver_vels[self.solver_vel2[ii] as usize].linear = solver_vel2.linear.extract(ii); - solver_vels[self.solver_vel2[ii] as usize].angular = solver_vel2.angular.extract(ii); + solver_vels[self.solver_vel2[ii]].linear = solver_vel2.linear.extract(ii); + solver_vels[self.solver_vel2[ii]].angular = solver_vel2.angular.extract(ii); } } diff --git a/src/dynamics/solver/interaction_groups.rs b/src/dynamics/solver/interaction_groups.rs index d654a59..1e834e6 100644 --- a/src/dynamics/solver/interaction_groups.rs +++ b/src/dynamics/solver/interaction_groups.rs @@ -25,7 +25,7 @@ impl<'a> PairInteraction for &'a mut ContactManifold { } #[cfg(feature = "parallel")] -impl<'a> PairInteraction for JointGraphEdge { +impl PairInteraction for JointGraphEdge { fn body_pair(&self) -> (Option<RigidBodyHandle>, Option<RigidBodyHandle>) { (Some(self.weight.body1), Some(self.weight.body2)) } @@ -470,11 +470,11 @@ impl InteractionGroups { (bucket.0)[SIMD_LAST_INDEX] = *interaction_i; self.simd_interactions.extend_from_slice(&bucket.0); bucket.1 = 0; - occupied_mask = occupied_mask & (!target_mask_bit); + occupied_mask &= !target_mask_bit; } else { (bucket.0)[bucket.1] = *interaction_i; bucket.1 += 1; - occupied_mask = occupied_mask | target_mask_bit; + occupied_mask |= target_mask_bit; } // NOTE: fixed bodies don't transmit forces. Therefore they don't diff --git a/src/dynamics/solver/joint_constraint/joint_constraints_set.rs b/src/dynamics/solver/joint_constraint/joint_constraints_set.rs index 21b6459..64c1e83 100644 --- a/src/dynamics/solver/joint_constraint/joint_constraints_set.rs +++ b/src/dynamics/solver/joint_constraint/joint_constraints_set.rs @@ -399,7 +399,7 @@ impl JointConstraintsSet { ) { for builder in &mut self.generic_velocity_constraints_builder { builder.update( - ¶ms, + params, multibodies, solver_bodies, &mut self.generic_jacobians, @@ -409,7 +409,7 @@ impl JointConstraintsSet { for builder in &mut self.generic_velocity_one_body_constraints_builder { builder.update( - ¶ms, + params, multibodies, solver_bodies, &mut self.generic_jacobians, @@ -418,17 +418,17 @@ impl JointConstraintsSet { } for builder in &mut self.velocity_constraints_builder { - builder.update(¶ms, solver_bodies, &mut self.velocity_constraints); + builder.update(params, solver_bodies, &mut self.velocity_constraints); } #[cfg(feature = "simd-is-enabled")] for builder in &mut self.simd_velocity_constraints_builder { - builder.update(¶ms, solver_bodies, &mut self.simd_velocity_constraints); + builder.update(params, solver_bodies, &mut self.simd_velocity_constraints); } for builder in &mut self.velocity_one_body_constraints_builder { builder.update( - ¶ms, + params, solver_bodies, &mut self.velocity_one_body_constraints, ); @@ -437,7 +437,7 @@ impl JointConstraintsSet { #[cfg(feature = "simd-is-enabled")] for builder in &mut self.simd_velocity_one_body_constraints_builder { builder.update( - ¶ms, + params, solver_bodies, &mut self.simd_velocity_one_body_constraints, ); diff --git a/src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs b/src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs index 5523962..34256a2 100644 --- a/src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs +++ b/src/dynamics/solver/joint_constraint/joint_generic_constraint_builder.rs @@ -219,6 +219,7 @@ impl JointGenericTwoBodyConstraintBuilder { } #[derive(Copy, Clone)] +#[allow(clippy::large_enum_variant)] pub enum JointGenericOneBodyConstraintBuilder { Internal(JointGenericVelocityOneBodyInternalConstraintBuilder), External(JointGenericVelocityOneBodyExternalConstraintBuilder), diff --git a/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs b/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs index 274e94e..e184e3d 100644 --- a/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs +++ b/src/dynamics/solver/joint_constraint/joint_velocity_constraint.rs @@ -332,13 +332,13 @@ impl JointTwoBodyConstraint<Real, 1> { } pub fn solve(&mut self, solver_vels: &mut [SolverVel<Real>]) { - let mut solver_vel1 = solver_vels[self.solver_vel1[0] as usize]; - let mut solver_vel2 = solver_vels[self.solver_vel2[0] as usize]; + let mut solver_vel1 = solver_vels[self.solver_vel1[0]]; + let mut solver_vel2 = solver_vels[self.solver_vel2[0]]; self.solve_generic(&mut solver_vel1, &mut solver_vel2); - solver_vels[self.solver_vel1[0] as usize] = solver_vel1; - solver_vels[self.solver_vel2[0] as usize] = solver_vel2; + solver_vels[self.solver_vel1[0]] = solver_vel1; + solver_vels[self.solver_vel2[0]] = solver_vel2; } pub fn writeback_impulses(&self, joints_all: &mut [JointGraphEdge]) { @@ -399,29 +399,21 @@ impl JointTwoBodyConstraint<SimdReal, SIMD_WIDTH> { pub fn solve(&mut self, solver_vels: &mut [SolverVel<Real>]) { let mut solver_vel1 = SolverVel { - linear: Vector::from(gather![ - |ii| solver_vels[self.solver_vel1[ii] as usize].linear - ]), - angular: AngVector::from(gather![ - |ii| solver_vels[self.solver_vel1[ii] as usize].angular - ]), + linear: Vector::from(gather![|ii| solver_vels[self.solver_vel1[ii]].linear]), + angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel1[ii]].angular]), }; let mut solver_vel2 = SolverVel { - linear: Vector::from(gather![ - |ii| solver_vels[self.solver_vel2[ii] as usize].linear - ]), - angular: AngVector::from(gather![ - |ii| solver_vels[self.solver_vel2[ii] as usize].angular - ]), + linear: Vector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].linear]), + angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].angular]), }; self.solve_generic(&mut solver_vel1, &mut solver_vel2); for ii in 0..SIMD_WIDTH { - solver_vels[self.solver_vel1[ii] as usize].linear = solver_vel1.linear.extract(ii); - solver_vels[self.solver_vel1[ii] as usize].angular = solver_vel1.angular.extract(ii); - solver_vels[self.solver_vel2[ii] as usize].linear = solver_vel2.linear.extract(ii); - solver_vels[self.solver_vel2[ii] as usize].angular = solver_vel2.angular.extract(ii); + solver_vels[self.solver_vel1[ii]].linear = solver_vel1.linear.extract(ii); + solver_vels[self.solver_vel1[ii]].angular = solver_vel1.angular.extract(ii); + solver_vels[self.solver_vel2[ii]].linear = solver_vel2.linear.extract(ii); + solver_vels[self.solver_vel2[ii]].angular = solver_vel2.angular.extract(ii); } } @@ -682,9 +674,9 @@ impl JointOneBodyConstraint<Real, 1> { } pub fn solve(&mut self, solver_vels: &mut [SolverVel<Real>]) { - let mut solver_vel2 = solver_vels[self.solver_vel2[0] as usize]; + let mut solver_vel2 = solver_vels[self.solver_vel2[0]]; self.solve_generic(&mut solver_vel2); - solver_vels[self.solver_vel2[0] as usize] = solver_vel2; + solver_vels[self.solver_vel2[0]] = solver_vel2; } pub fn writeback_impulses(&self, joints_all: &mut [JointGraphEdge]) { @@ -751,19 +743,15 @@ impl JointOneBodyConstraint<SimdReal, SIMD_WIDTH> { pub fn solve(&mut self, solver_vels: &mut [SolverVel<Real>]) { let mut solver_vel2 = SolverVel { - linear: Vector::from(gather![ - |ii| solver_vels[self.solver_vel2[ii] as usize].linear - ]), - angular: AngVector::from(gather![ - |ii| solver_vels[self.solver_vel2[ii] as usize].angular - ]), + linear: Vector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].linear]), + angular: AngVector::from(gather![|ii| solver_vels[self.solver_vel2[ii]].angular]), }; self.solve_generic(&mut solver_vel2); for ii in 0..SIMD_WIDTH { - solver_vels[self.solver_vel2[ii] as usize].linear = solver_vel2.linear.extract(ii); - solver_vels[self.solver_vel2[ii] as usize].angular = solver_vel2.angular.extract(ii); + solver_vels[self.solver_vel2[ii]].linear = solver_vel2.linear.extract(ii); + solver_vels[self.solver_vel2[ii]].angular = solver_vel2.angular.extract(ii); } } diff --git a/src/dynamics/solver/mod.rs b/src/dynamics/solver/mod.rs index 5b11545..37585a2 100644 --- a/src/dynamics/solver/mod.rs +++ b/src/dynamics/solver/mod.rs @@ -7,17 +7,17 @@ pub(crate) use self::island_solver::IslandSolver; // #[cfg(feature = "parallel")] // pub(self) use self::parallel_velocity_solver::ParallelVelocitySolver; // #[cfg(not(feature = "parallel"))] -pub(self) use self::solver_constraints_set::SolverConstraintsSet; +use self::solver_constraints_set::SolverConstraintsSet; // #[cfg(not(feature = "parallel"))] -pub(self) use self::velocity_solver::VelocitySolver; +use self::velocity_solver::VelocitySolver; -pub(self) use contact_constraint::*; -pub(self) use interaction_groups::*; +use contact_constraint::*; +use interaction_groups::*; pub(crate) use joint_constraint::MotorParameters; pub use joint_constraint::*; -pub(self) use solver_body::SolverBody; -pub(self) use solver_constraints_set::{AnyConstraintMut, ConstraintTypes}; -pub(self) use solver_vel::SolverVel; +use solver_body::SolverBody; +use solver_constraints_set::{AnyConstraintMut, ConstraintTypes}; +use solver_vel::SolverVel; mod categorization; mod contact_constraint; diff --git a/src/dynamics/solver/velocity_solver.rs b/src/dynamics/solver/velocity_solver.rs index 1d4a0ae..928b427 100644 --- a/src/dynamics/solver/velocity_solver.rs +++ b/src/dynamics/solver/velocity_solver.rs @@ -175,8 +175,8 @@ impl VelocitySolver { /* * Update & solve constraints. */ - joint_constraints.update(¶ms, multibodies, &self.solver_bodies); - contact_constraints.update(¶ms, substep_id, multibodies, &self.solver_bodies); + joint_constraints.update(params, multibodies, &self.solver_bodies); + contact_constraints.update(params, substep_id, multibodies, &self.solver_bodies); for _ in 0..params.num_internal_pgs_iterations { joint_constraints.solve(&mut self.solver_vels, &mut self.generic_solver_vels); @@ -196,7 +196,7 @@ impl VelocitySolver { /* * Integrate positions. */ - self.integrate_positions(¶ms, is_last_substep, bodies, multibodies); + self.integrate_positions(params, is_last_substep, bodies, multibodies); /* * Resolution without bias. |
