diff options
| author | Crozet Sébastien <developer@crozet.re> | 2020-11-03 14:43:21 +0100 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2020-11-03 14:43:21 +0100 |
| commit | 0cf59d78bda1669226f861e438d43a08b099d747 (patch) | |
| tree | 001d68cfa4aea673b73f69d2f95f549a675ac195 /src/geometry/contact_generator | |
| parent | 036a24614171eff0f99495b8b6f1c09e58cb4f9a (diff) | |
| download | rapier-0cf59d78bda1669226f861e438d43a08b099d747.tar.gz rapier-0cf59d78bda1669226f861e438d43a08b099d747.tar.bz2 rapier-0cf59d78bda1669226f861e438d43a08b099d747.zip | |
Implement Clone for everything that can be cloned.
Diffstat (limited to 'src/geometry/contact_generator')
4 files changed, 22 insertions, 0 deletions
diff --git a/src/geometry/contact_generator/contact_generator_workspace.rs b/src/geometry/contact_generator/contact_generator_workspace.rs index fb6d7b4..e89395f 100644 --- a/src/geometry/contact_generator/contact_generator_workspace.rs +++ b/src/geometry/contact_generator/contact_generator_workspace.rs @@ -9,6 +9,12 @@ use crate::geometry::contact_generator::{ // Note we have this newtype because it simplifies the serialization/deserialization code. pub struct ContactGeneratorWorkspace(pub Box<dyn MaybeSerializableData>); +impl Clone for ContactGeneratorWorkspace { + fn clone(&self) -> Self { + ContactGeneratorWorkspace(self.0.clone_dyn()) + } +} + impl<T: MaybeSerializableData> From<T> for ContactGeneratorWorkspace { fn from(data: T) -> Self { Self(Box::new(data) as Box<dyn MaybeSerializableData>) diff --git a/src/geometry/contact_generator/heightfield_shape_contact_generator.rs b/src/geometry/contact_generator/heightfield_shape_contact_generator.rs index 62c6365..70360c9 100644 --- a/src/geometry/contact_generator/heightfield_shape_contact_generator.rs +++ b/src/geometry/contact_generator/heightfield_shape_contact_generator.rs @@ -12,6 +12,7 @@ use crate::ncollide::bounding_volume::BoundingVolume; use erased_serde::Serialize; #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] +#[derive(Clone)] struct SubDetector { #[cfg_attr(feature = "serde-serialize", serde(skip))] generator: Option<PrimitiveContactGenerator>, @@ -21,6 +22,7 @@ struct SubDetector { } #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] +#[derive(Clone)] pub struct HeightFieldShapeContactGeneratorWorkspace { timestamp: bool, #[cfg_attr(feature = "serde-serialize", serde(skip))] @@ -182,4 +184,8 @@ impl MaybeSerializableData for HeightFieldShapeContactGeneratorWorkspace { self, )) } + + fn clone_dyn(&self) -> Box<dyn MaybeSerializableData> { + Box::new(self.clone()) + } } diff --git a/src/geometry/contact_generator/pfm_pfm_contact_generator.rs b/src/geometry/contact_generator/pfm_pfm_contact_generator.rs index 027c398..e18e77f 100644 --- a/src/geometry/contact_generator/pfm_pfm_contact_generator.rs +++ b/src/geometry/contact_generator/pfm_pfm_contact_generator.rs @@ -9,6 +9,7 @@ use ncollide::query; use ncollide::query::algorithms::{gjk::GJKResult, VoronoiSimplex}; #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] +#[derive(Clone)] pub struct PfmPfmContactManifoldGeneratorWorkspace { #[cfg_attr( feature = "serde-serialize", @@ -136,4 +137,8 @@ impl MaybeSerializableData for PfmPfmContactManifoldGeneratorWorkspace { self, )) } + + fn clone(&self) -> Box<MaybeSerializableData> { + Box::new(self.clone()) + } } diff --git a/src/geometry/contact_generator/trimesh_shape_contact_generator.rs b/src/geometry/contact_generator/trimesh_shape_contact_generator.rs index 26ccfaa..3f7d7cd 100644 --- a/src/geometry/contact_generator/trimesh_shape_contact_generator.rs +++ b/src/geometry/contact_generator/trimesh_shape_contact_generator.rs @@ -8,6 +8,7 @@ use crate::ncollide::bounding_volume::{BoundingVolume, AABB}; use erased_serde::Serialize; #[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] +#[derive(Clone)] pub struct TrimeshShapeContactGeneratorWorkspace { interferences: Vec<usize>, local_aabb2: AABB<f32>, @@ -213,4 +214,8 @@ impl MaybeSerializableData for TrimeshShapeContactGeneratorWorkspace { self, )) } + + fn clone_dyn(&self) -> Box<dyn MaybeSerializableData> { + Box::new(self.clone()) + } } |
