From 2d4e14b869bd8d0b2eb6629b7b10719d657d2be8 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Wed, 25 Nov 2020 16:00:02 +0100 Subject: Properly track some user-initiatied rigid-body modifications. --- src/geometry/broad_phase_multi_sap.rs | 1 + src/geometry/collider.rs | 4 ++-- src/geometry/collider_set.rs | 19 +++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'src/geometry') diff --git a/src/geometry/broad_phase_multi_sap.rs b/src/geometry/broad_phase_multi_sap.rs index 4cea113..d3a0d5a 100644 --- a/src/geometry/broad_phase_multi_sap.rs +++ b/src/geometry/broad_phase_multi_sap.rs @@ -634,6 +634,7 @@ impl BroadPhase { .active_dynamic_set .iter() .chain(bodies.active_kinematic_set.iter()) + .chain(bodies.modified_inactive_set.iter()) { for handle in &bodies[*body_handle].colliders { let collider = &mut colliders[*handle]; diff --git a/src/geometry/collider.rs b/src/geometry/collider.rs index 3789cca..c04be35 100644 --- a/src/geometry/collider.rs +++ b/src/geometry/collider.rs @@ -1,7 +1,7 @@ use crate::dynamics::{MassProperties, RigidBodyHandle, RigidBodySet}; use crate::geometry::{ - Ball, Capsule, ColliderGraphIndex, Contact, Cuboid, HeightField, InteractionGraph, - InteractionGroups, Proximity, Segment, Shape, ShapeType, Triangle, Trimesh, + Ball, Capsule, Cuboid, HeightField, InteractionGroups, Segment, Shape, ShapeType, Triangle, + Trimesh, }; #[cfg(feature = "dim3")] use crate::geometry::{Cone, Cylinder, RoundCylinder}; diff --git a/src/geometry/collider_set.rs b/src/geometry/collider_set.rs index 5411ec1..5765a4d 100644 --- a/src/geometry/collider_set.rs +++ b/src/geometry/collider_set.rs @@ -1,7 +1,7 @@ use crate::data::arena::Arena; use crate::data::pubsub::PubSub; use crate::dynamics::{RigidBodyHandle, RigidBodySet}; -use crate::geometry::{Collider, ColliderGraphIndex}; +use crate::geometry::Collider; use std::ops::{Index, IndexMut}; /// The unique identifier of a collider added to a collider set. @@ -70,8 +70,7 @@ impl ColliderSet { coll.predicted_position = parent.predicted_position * coll.delta; let handle = self.colliders.insert(coll); let coll = self.colliders.get(handle).unwrap(); - parent.add_collider_internal(handle, &coll); - bodies.activate(parent_handle); + parent.add_collider(handle, &coll); handle } @@ -147,13 +146,13 @@ impl ColliderSet { self.colliders.get_mut(handle) } - pub(crate) fn get2_mut_internal( - &mut self, - h1: ColliderHandle, - h2: ColliderHandle, - ) -> (Option<&mut Collider>, Option<&mut Collider>) { - self.colliders.get2_mut(h1, h2) - } + // pub(crate) fn get2_mut_internal( + // &mut self, + // h1: ColliderHandle, + // h2: ColliderHandle, + // ) -> (Option<&mut Collider>, Option<&mut Collider>) { + // self.colliders.get2_mut(h1, h2) + // } // pub fn iter_mut(&mut self) -> impl Iterator { // // let sender = &self.activation_channel_sender; -- cgit From f293dc602451ddf3c13ce6272f9d3556d47f4fca Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Thu, 26 Nov 2020 11:37:58 +0100 Subject: Fix bogus collider removal in the broad-phase. --- src/geometry/broad_phase_multi_sap.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/geometry') diff --git a/src/geometry/broad_phase_multi_sap.rs b/src/geometry/broad_phase_multi_sap.rs index d3a0d5a..cd55f8b 100644 --- a/src/geometry/broad_phase_multi_sap.rs +++ b/src/geometry/broad_phase_multi_sap.rs @@ -586,9 +586,6 @@ impl BroadPhase { let proxy = &mut self.proxies[proxy_index]; - // Push the proxy to infinity, but not beyond the sentinels. - proxy.aabb.mins.coords.fill(SENTINEL_VALUE / 2.0); - proxy.aabb.maxs.coords.fill(SENTINEL_VALUE / 2.0); // Discretize the AABB to find the regions that need to be invalidated. let start = point_key(proxy.aabb.mins); let end = point_key(proxy.aabb.maxs); @@ -615,6 +612,9 @@ impl BroadPhase { } } + // Push the proxy to infinity, but not beyond the sentinels. + proxy.aabb.mins.coords.fill(SENTINEL_VALUE / 2.0); + proxy.aabb.maxs.coords.fill(SENTINEL_VALUE / 2.0); self.proxies.remove(proxy_index); } -- cgit From 391bcf372ab19d4ae3eceb056eb605062bf71122 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Thu, 26 Nov 2020 11:41:43 +0100 Subject: Fix collider insertion/removal tracking. --- src/geometry/collider_set.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/geometry') diff --git a/src/geometry/collider_set.rs b/src/geometry/collider_set.rs index 5765a4d..eb09322 100644 --- a/src/geometry/collider_set.rs +++ b/src/geometry/collider_set.rs @@ -63,8 +63,11 @@ impl ColliderSet { coll.reset_internal_references(); coll.parent = parent_handle; + + // NOTE: we use `get_mut` instead of `get_mut_internal` so that the + // modification flag is updated properly. let parent = bodies - .get_mut_internal(parent_handle) + .get_mut(parent_handle) .expect("Parent rigid body not found."); coll.position = parent.position * coll.delta; coll.predicted_position = parent.predicted_position * coll.delta; @@ -89,7 +92,9 @@ impl ColliderSet { /* * Delete the collider from its parent body. */ - if let Some(parent) = bodies.get_mut_internal(collider.parent) { + // NOTE: we use `get_mut` instead of `get_mut_internal` so that the + // modification flag is updated properly. + if let Some(parent) = bodies.get_mut(collider.parent) { parent.remove_collider_internal(handle, &collider); if wake_up { -- cgit From 340f614d32fbf32b48a63d1c381da67eec97b05d Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Thu, 26 Nov 2020 12:49:35 +0100 Subject: Restore the previous sleeping pattern. --- src/geometry/broad_phase_multi_sap.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/geometry') diff --git a/src/geometry/broad_phase_multi_sap.rs b/src/geometry/broad_phase_multi_sap.rs index cd55f8b..863990d 100644 --- a/src/geometry/broad_phase_multi_sap.rs +++ b/src/geometry/broad_phase_multi_sap.rs @@ -631,10 +631,10 @@ impl BroadPhase { self.complete_removals(); for body_handle in bodies - .active_dynamic_set + .modified_inactive_set .iter() + .chain(bodies.active_dynamic_set.iter()) .chain(bodies.active_kinematic_set.iter()) - .chain(bodies.modified_inactive_set.iter()) { for handle in &bodies[*body_handle].colliders { let collider = &mut colliders[*handle]; -- cgit