diff --git a/src/geometry/broad_phase_multi_sap/sap_proxy.rs b/src/geometry/broad_phase_multi_sap/sap_proxy.rs index 9ddd8b9..b1a1996 100644 --- a/src/geometry/broad_phase_multi_sap/sap_proxy.rs +++ b/src/geometry/broad_phase_multi_sap/sap_proxy.rs @@ -7,7 +7,7 @@ use std::ops::{Index, IndexMut}; pub type SAPProxyIndex = u32; #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] -#[derive(Clone)] +#[derive(Clone, Debug)] pub enum SAPProxyData { Collider(ColliderHandle), Region(Option>), @@ -48,7 +48,7 @@ impl SAPProxyData { } #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct SAPProxy { pub data: SAPProxyData, pub aabb: Aabb, diff --git a/src/geometry/broad_phase_multi_sap/sap_region.rs b/src/geometry/broad_phase_multi_sap/sap_region.rs index 1a3903b..946f036 100644 --- a/src/geometry/broad_phase_multi_sap/sap_region.rs +++ b/src/geometry/broad_phase_multi_sap/sap_region.rs @@ -1,4 +1,5 @@ use super::{SAPAxis, SAPProxies}; +use crate::geometry::broad_phase_multi_sap::DELETED_AABB_VALUE; use crate::geometry::SAPProxyIndex; use crate::math::DIM; use bit_vec::BitVec; @@ -8,7 +9,7 @@ use parry::utils::hashmap::HashMap; pub type SAPRegionPool = Vec>; #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct SAPRegion { pub axes: [SAPAxis; DIM], pub existing_proxies: BitVec, @@ -187,12 +188,25 @@ impl SAPRegion { pub fn update_after_subregion_removal(&mut self, proxies: &SAPProxies, layer_depth: i8) { if self.needs_update_after_subregion_removal { for axis in &mut self.axes { - self.subproper_proxy_count -= axis - .delete_deleted_proxies_and_endpoints_after_subregion_removal( - proxies, - &mut self.existing_proxies, - layer_depth, + let num_deleted_proxies = axis.delete_deleted_proxies_and_endpoints_after_subregion_removal( + proxies, + &mut self.existing_proxies, + layer_depth, + ); + if num_deleted_proxies > self.subproper_proxy_count { + let marked_as_deleted_count = proxies.elements.clone() + .into_iter() + .filter(|p| p.aabb.mins.x == DELETED_AABB_VALUE) + .count(); + dbg!(marked_as_deleted_count); + dbg!(num_deleted_proxies, self.subproper_proxy_count); + dbg!(proxies.elements.clone()); + dbg!( + self.needs_update_after_subregion_removal, self.update_count, + self.subregions.clone(), self.to_insert.clone() ); + } + self.subproper_proxy_count -= num_deleted_proxies; } self.needs_update_after_subregion_removal = false; }