diff options
| author | Sébastien Crozet <developer@crozet.re> | 2020-10-27 11:25:09 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-27 11:25:09 +0100 |
| commit | c336ae64557a4981b9cfbd2f6fbe7b7a9d383493 (patch) | |
| tree | a23a2b561a2c64f602811dd0c8d8a15e2dabfa80 | |
| parent | 93153f5d93358e83c8a4ca2b7195bf9aae95ffb9 (diff) | |
| parent | 49779e6c757285e91cf5b5daf123f00959408521 (diff) | |
| download | rapier-c336ae64557a4981b9cfbd2f6fbe7b7a9d383493.tar.gz rapier-c336ae64557a4981b9cfbd2f6fbe7b7a9d383493.tar.bz2 rapier-c336ae64557a4981b9cfbd2f6fbe7b7a9d383493.zip | |
Merge pull request #42 from dimforge/user_data
Add a 128-bits user-data attached to colliders and rigid-bodies.
| -rw-r--r-- | src/dynamics/rigid_body.rs | 12 | ||||
| -rw-r--r-- | src/geometry/collider.rs | 14 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/dynamics/rigid_body.rs b/src/dynamics/rigid_body.rs index 9fa5a8e..417ce34 100644 --- a/src/dynamics/rigid_body.rs +++ b/src/dynamics/rigid_body.rs @@ -54,6 +54,8 @@ pub struct RigidBody { pub(crate) active_set_timestamp: u32, /// The status of the body, governing how it is affected by external forces. pub body_status: BodyStatus, + /// User-defined data associated to this rigid-body. + pub user_data: u128, } impl Clone for RigidBody { @@ -90,6 +92,7 @@ impl RigidBody { active_set_offset: 0, active_set_timestamp: 0, body_status: BodyStatus::Dynamic, + user_data: 0, } } @@ -342,6 +345,7 @@ pub struct RigidBodyBuilder { angvel: AngVector<f32>, body_status: BodyStatus, can_sleep: bool, + user_data: u128, } impl RigidBodyBuilder { @@ -353,6 +357,7 @@ impl RigidBodyBuilder { angvel: na::zero(), body_status, can_sleep: true, + user_data: 0, } } @@ -400,6 +405,12 @@ impl RigidBodyBuilder { self } + /// An arbitrary user-defined 128-bit integer associated to the rigid-bodies built by this builder. + pub fn user_data(mut self, data: u128) -> Self { + self.user_data = data; + self + } + /// Sets the initial linear velocity of the rigid-body to be created. #[cfg(feature = "dim2")] pub fn linvel(mut self, x: f32, y: f32) -> Self { @@ -434,6 +445,7 @@ impl RigidBodyBuilder { rb.linvel = self.linvel; rb.angvel = self.angvel; rb.body_status = self.body_status; + rb.user_data = self.user_data; if !self.can_sleep { rb.activation.threshold = -1.0; diff --git a/src/geometry/collider.rs b/src/geometry/collider.rs index 522f002..40b59ae 100644 --- a/src/geometry/collider.rs +++ b/src/geometry/collider.rs @@ -206,6 +206,8 @@ pub struct Collider { pub(crate) contact_graph_index: ColliderGraphIndex, pub(crate) proximity_graph_index: ColliderGraphIndex, pub(crate) proxy_index: usize, + /// User-defined data associated to this rigid-body. + pub user_data: u128, } impl Clone for Collider { @@ -296,6 +298,8 @@ pub struct ColliderBuilder { pub delta: Isometry<f32>, /// Is this collider a sensor? pub is_sensor: bool, + /// The user-data of the collider beind built. + pub user_data: u128, } impl ColliderBuilder { @@ -308,6 +312,7 @@ impl ColliderBuilder { restitution: 0.0, delta: Isometry::identity(), is_sensor: false, + user_data: 0, } } @@ -413,6 +418,12 @@ impl ColliderBuilder { 0.5 } + /// An arbitrary user-defined 128-bit integer associated to the colliders built by this builder. + pub fn user_data(mut self, data: u128) -> Self { + self.user_data = data; + self + } + /// Sets whether or not the collider built by this builder is a sensor. pub fn sensor(mut self, is_sensor: bool) -> Self { self.is_sensor = is_sensor; @@ -477,7 +488,7 @@ impl ColliderBuilder { self } - /// Buildes a new collider attached to the given rigid-body. + /// Builds a new collider attached to the given rigid-body. pub fn build(&self) -> Collider { let density = self.get_density(); @@ -494,6 +505,7 @@ impl ColliderBuilder { contact_graph_index: InteractionGraph::<Contact>::invalid_graph_index(), proximity_graph_index: InteractionGraph::<Proximity>::invalid_graph_index(), proxy_index: crate::INVALID_USIZE, + user_data: self.user_data, } } } |
