aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/solver/categorization.rs
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-01-16 08:20:22 -0800
committerGitHub <noreply@github.com>2022-01-16 08:20:22 -0800
commit1880619d29029c99985ffae9ed12a1c8d2cc796b (patch)
tree806e7d950015875ebfcca5520784aea6e7c5ae10 /src/dynamics/solver/categorization.rs
parent4454a845e98b990abf3929ca46b59d0fca5a18ec (diff)
parent0703e5527fd95d86bb6621e61dbcb1a6e7f9329a (diff)
downloadrapier-1880619d29029c99985ffae9ed12a1c8d2cc796b.tar.gz
rapier-1880619d29029c99985ffae9ed12a1c8d2cc796b.tar.bz2
rapier-1880619d29029c99985ffae9ed12a1c8d2cc796b.zip
Merge pull request #277 from dimforge/solver-fixes
Fix some solver issues
Diffstat (limited to 'src/dynamics/solver/categorization.rs')
-rw-r--r--src/dynamics/solver/categorization.rs16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/dynamics/solver/categorization.rs b/src/dynamics/solver/categorization.rs
index c5b2601..0083388 100644
--- a/src/dynamics/solver/categorization.rs
+++ b/src/dynamics/solver/categorization.rs
@@ -9,8 +9,8 @@ pub(crate) fn categorize_contacts(
manifold_indices: &[ContactManifoldIndex],
out_ground: &mut Vec<ContactManifoldIndex>,
out_not_ground: &mut Vec<ContactManifoldIndex>,
- out_generic: &mut Vec<ContactManifoldIndex>,
- _unused: &mut Vec<ContactManifoldIndex>, // Unused but useful to simplify the parallel code.
+ out_generic_ground: &mut Vec<ContactManifoldIndex>,
+ out_generic_not_ground: &mut Vec<ContactManifoldIndex>,
) {
for manifold_i in manifold_indices {
let manifold = &manifolds[*manifold_i];
@@ -18,15 +18,19 @@ pub(crate) fn categorize_contacts(
if manifold
.data
.rigid_body1
- .map(|rb| multibody_joints.rigid_body_link(rb))
+ .and_then(|h| multibody_joints.rigid_body_link(h))
.is_some()
|| manifold
.data
- .rigid_body1
- .map(|rb| multibody_joints.rigid_body_link(rb))
+ .rigid_body2
+ .and_then(|h| multibody_joints.rigid_body_link(h))
.is_some()
{
- out_generic.push(*manifold_i);
+ if manifold.data.relative_dominance != 0 {
+ out_generic_ground.push(*manifold_i);
+ } else {
+ out_generic_not_ground.push(*manifold_i);
+ }
} else if manifold.data.relative_dominance != 0 {
out_ground.push(*manifold_i)
} else {