From 036a24614171eff0f99495b8b6f1c09e58cb4f9a Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 3 Nov 2020 14:29:47 +0100 Subject: Make cloning rigid-bodies and colliders more idiomatic. Fix #53 --- src/geometry/collider.rs | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'src/geometry/collider.rs') diff --git a/src/geometry/collider.rs b/src/geometry/collider.rs index f53d75a..524f265 100644 --- a/src/geometry/collider.rs +++ b/src/geometry/collider.rs @@ -188,6 +188,7 @@ impl<'de> serde::Deserialize<'de> for ColliderShape { } #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] +#[derive(Clone)] /// A geometric entity that can be attached to a body so it can be affected by contacts and proximity queries. /// /// To build a new collider, use the `ColliderBuilder` structure. @@ -212,20 +213,14 @@ pub struct Collider { pub user_data: u128, } -impl Clone for Collider { - fn clone(&self) -> Self { - Self { - shape: self.shape.clone(), - parent: RigidBodySet::invalid_handle(), - contact_graph_index: ColliderGraphIndex::new(crate::INVALID_U32), - proximity_graph_index: ColliderGraphIndex::new(crate::INVALID_U32), - proxy_index: crate::INVALID_USIZE, - ..*self - } +impl Collider { + pub(crate) fn reset_internal_links(&mut self) { + self.parent = RigidBodySet::invalid_handle(); + self.contact_graph_index = ColliderGraphIndex::new(crate::INVALID_U32); + self.proximity_graph_index = ColliderGraphIndex::new(crate::INVALID_U32); + self.proxy_index = crate::INVALID_USIZE; } -} -impl Collider { /// The rigid body this collider is attached to. pub fn parent(&self) -> RigidBodyHandle { self.parent -- cgit From c6af248e66c86c900d7703bcefeb1e6d185ffedf Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 3 Nov 2020 14:45:50 +0100 Subject: Rename reset_internal_links -> reset_internal_references. --- src/geometry/collider.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/geometry/collider.rs') diff --git a/src/geometry/collider.rs b/src/geometry/collider.rs index 524f265..f7f4efa 100644 --- a/src/geometry/collider.rs +++ b/src/geometry/collider.rs @@ -214,7 +214,7 @@ pub struct Collider { } impl Collider { - pub(crate) fn reset_internal_links(&mut self) { + pub(crate) fn reset_internal_references(&mut self) { self.parent = RigidBodySet::invalid_handle(); self.contact_graph_index = ColliderGraphIndex::new(crate::INVALID_U32); self.proximity_graph_index = ColliderGraphIndex::new(crate::INVALID_U32); -- cgit From 71611d3e30ce2fddee20832db3c3e0c8b6ba0d07 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 3 Nov 2020 15:08:06 +0100 Subject: Reset the rigid-bodies internal links properly. --- src/geometry/collider.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/geometry/collider.rs') diff --git a/src/geometry/collider.rs b/src/geometry/collider.rs index f7f4efa..c2adc59 100644 --- a/src/geometry/collider.rs +++ b/src/geometry/collider.rs @@ -216,8 +216,8 @@ pub struct Collider { impl Collider { pub(crate) fn reset_internal_references(&mut self) { self.parent = RigidBodySet::invalid_handle(); - self.contact_graph_index = ColliderGraphIndex::new(crate::INVALID_U32); - self.proximity_graph_index = ColliderGraphIndex::new(crate::INVALID_U32); + self.contact_graph_index = InteractionGraph::::invalid_graph_index(); + self.proximity_graph_index = InteractionGraph::::invalid_graph_index(); self.proxy_index = crate::INVALID_USIZE; } -- cgit