diff options
| author | Crozet Sébastien <developer@crozet.re> | 2020-11-03 14:29:47 +0100 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2020-11-03 14:29:47 +0100 |
| commit | 036a24614171eff0f99495b8b6f1c09e58cb4f9a (patch) | |
| tree | 65ab16c69b8f7d7d8ade0163a13979c79afdcbf2 /src/dynamics/rigid_body.rs | |
| parent | 0cc850dc505a4034103d229fdce22f9ec7bc410a (diff) | |
| download | rapier-036a24614171eff0f99495b8b6f1c09e58cb4f9a.tar.gz rapier-036a24614171eff0f99495b8b6f1c09e58cb4f9a.tar.bz2 rapier-036a24614171eff0f99495b8b6f1c09e58cb4f9a.zip | |
Make cloning rigid-bodies and colliders more idiomatic.
Fix #53
Diffstat (limited to 'src/dynamics/rigid_body.rs')
| -rw-r--r-- | src/dynamics/rigid_body.rs | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/src/dynamics/rigid_body.rs b/src/dynamics/rigid_body.rs index 6b897a6..b04ca41 100644 --- a/src/dynamics/rigid_body.rs +++ b/src/dynamics/rigid_body.rs @@ -27,7 +27,7 @@ pub enum BodyStatus { /// A rigid body. /// /// To create a new rigid-body, use the `RigidBodyBuilder` structure. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct RigidBody { /// The world-space position of the rigid-body. pub position: Isometry<f32>, @@ -58,20 +58,6 @@ pub struct RigidBody { pub user_data: u128, } -impl Clone for RigidBody { - fn clone(&self) -> Self { - Self { - colliders: Vec::new(), - joint_graph_index: RigidBodyGraphIndex::new(crate::INVALID_U32), - active_island_id: crate::INVALID_USIZE, - active_set_id: crate::INVALID_USIZE, - active_set_offset: crate::INVALID_USIZE, - active_set_timestamp: crate::INVALID_U32, - ..*self - } - } -} - impl RigidBody { fn new() -> Self { Self { @@ -96,6 +82,15 @@ impl RigidBody { } } + pub(crate) fn reset_internal_links(&mut self) { + self.colliders = Vec::new(); + self.joint_graph_index = RigidBodyGraphIndex::new(crate::INVALID_U32); + self.active_island_id = crate::INVALID_USIZE; + self.active_set_id = crate::INVALID_USIZE; + self.active_set_offset = crate::INVALID_USIZE; + self.active_set_timestamp = crate::INVALID_U32; + } + pub(crate) fn integrate_accelerations(&mut self, dt: f32, gravity: Vector<f32>) { if self.mass_properties.inv_mass != 0.0 { self.linvel += (gravity + self.linacc) * dt; |
