diff options
| author | Sébastien Crozet <developer@crozet.re> | 2022-12-11 18:38:18 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-11 18:38:18 +0100 |
| commit | 8fa2a61249a60d6fc6440ef29f66a83f01585e54 (patch) | |
| tree | 8fed8828dcc9337a5fdc65580344f8bf12983ab4 /src/geometry/collider.rs | |
| parent | c600549aacbde1361eba862b34a23f63d806d6a9 (diff) | |
| parent | a1e255dbcdbfde270df32eeda59360493649c73f (diff) | |
| download | rapier-8fa2a61249a60d6fc6440ef29f66a83f01585e54.tar.gz rapier-8fa2a61249a60d6fc6440ef29f66a83f01585e54.tar.bz2 rapier-8fa2a61249a60d6fc6440ef29f66a83f01585e54.zip | |
Merge pull request #427 from dimforge/disable
Add enable/disable, incremental query pipeline, and vehicle character contoller
Diffstat (limited to 'src/geometry/collider.rs')
| -rw-r--r-- | src/geometry/collider.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/geometry/collider.rs b/src/geometry/collider.rs index 95ae273..6759b81 100644 --- a/src/geometry/collider.rs +++ b/src/geometry/collider.rs @@ -7,6 +7,7 @@ use crate::geometry::{ use crate::math::{AngVector, Isometry, Point, Real, Rotation, Vector, DIM}; use crate::parry::transformation::vhacd::VHACDParameters; use crate::pipeline::{ActiveEvents, ActiveHooks}; +use crate::prelude::ColliderEnabled; use na::Unit; use parry::bounding_volume::Aabb; use parry::shape::{Shape, TriMeshFlags}; @@ -154,6 +155,32 @@ impl Collider { } } + /// Is this collider enabled? + pub fn is_enabled(&self) -> bool { + match self.flags.enabled { + ColliderEnabled::Enabled => true, + _ => false, + } + } + + /// Sets whether or not this collider is enabled. + pub fn set_enabled(&mut self, enabled: bool) { + match self.flags.enabled { + ColliderEnabled::Enabled | ColliderEnabled::DisabledByParent => { + if !enabled { + self.changes.insert(ColliderChanges::ENABLED_OR_DISABLED); + self.flags.enabled = ColliderEnabled::Disabled; + } + } + ColliderEnabled::Disabled => { + if enabled { + self.changes.insert(ColliderChanges::ENABLED_OR_DISABLED); + self.flags.enabled = ColliderEnabled::Enabled; + } + } + } + } + /// Sets the translational part of this collider's position. pub fn set_translation(&mut self, translation: Vector<Real>) { self.changes.insert(ColliderChanges::POSITION); @@ -402,6 +429,8 @@ pub struct ColliderBuilder { pub collision_groups: InteractionGroups, /// The solver groups for the collider being built. pub solver_groups: InteractionGroups, + /// Will the collider being built be enabled? + pub enabled: bool, /// The total force magnitude beyond which a contact force event can be emitted. pub contact_force_event_threshold: Real, } @@ -424,6 +453,7 @@ impl ColliderBuilder { active_collision_types: ActiveCollisionTypes::default(), active_hooks: ActiveHooks::empty(), active_events: ActiveEvents::empty(), + enabled: true, contact_force_event_threshold: 0.0, } } @@ -834,6 +864,12 @@ impl ColliderBuilder { self } + /// Enable or disable the collider after its creation. + pub fn enabled(mut self, enabled: bool) -> Self { + self.enabled = enabled; + self + } + /// Builds a new collider attached to the given rigid-body. pub fn build(&self) -> Collider { let shape = self.shape.clone(); @@ -849,6 +885,11 @@ impl ColliderBuilder { active_collision_types: self.active_collision_types, active_hooks: self.active_hooks, active_events: self.active_events, + enabled: if self.enabled { + ColliderEnabled::Enabled + } else { + ColliderEnabled::Disabled + }, }; let changes = ColliderChanges::all(); let pos = ColliderPosition(self.position); |
