aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/joint/generic_joint.rs
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-12-11 18:38:18 +0100
committerGitHub <noreply@github.com>2022-12-11 18:38:18 +0100
commit8fa2a61249a60d6fc6440ef29f66a83f01585e54 (patch)
tree8fed8828dcc9337a5fdc65580344f8bf12983ab4 /src/dynamics/joint/generic_joint.rs
parentc600549aacbde1361eba862b34a23f63d806d6a9 (diff)
parenta1e255dbcdbfde270df32eeda59360493649c73f (diff)
downloadrapier-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/dynamics/joint/generic_joint.rs')
-rw-r--r--src/dynamics/joint/generic_joint.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/dynamics/joint/generic_joint.rs b/src/dynamics/joint/generic_joint.rs
index bb1598d..cbd9649 100644
--- a/src/dynamics/joint/generic_joint.rs
+++ b/src/dynamics/joint/generic_joint.rs
@@ -182,6 +182,19 @@ impl JointMotor {
}
}
+#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
+#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
+/// Enum indicating whether or not a joint is enabled.
+pub enum JointEnabled {
+ /// The joint is enabled.
+ Enabled,
+ /// The joint wasn’t disabled by the user explicitly but it is attached to
+ /// a disabled rigid-body.
+ DisabledByAttachedBody,
+ /// The joint is disabled by the user explicitly.
+ Disabled,
+}
+
#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
#[derive(Copy, Clone, Debug, PartialEq)]
/// A generic joint.
@@ -208,6 +221,8 @@ pub struct GenericJoint {
pub motors: [JointMotor; SPATIAL_DIM],
/// Are contacts between the attached rigid-bodies enabled?
pub contacts_enabled: bool,
+ /// Whether or not the joint is enabled.
+ pub enabled: JointEnabled,
}
impl Default for GenericJoint {
@@ -222,6 +237,7 @@ impl Default for GenericJoint {
limits: [JointLimits::default(); SPATIAL_DIM],
motors: [JointMotor::default(); SPATIAL_DIM],
contacts_enabled: true,
+ enabled: JointEnabled::Enabled,
}
}
}
@@ -260,6 +276,27 @@ impl GenericJoint {
}
}
+ /// Is this joint enabled?
+ pub fn is_enabled(&self) -> bool {
+ self.enabled == JointEnabled::Enabled
+ }
+
+ /// Set whether this joint is enabled or not.
+ pub fn set_enabled(&mut self, enabled: bool) {
+ match self.enabled {
+ JointEnabled::Enabled | JointEnabled::DisabledByAttachedBody => {
+ if !enabled {
+ self.enabled = JointEnabled::Disabled;
+ }
+ }
+ JointEnabled::Disabled => {
+ if enabled {
+ self.enabled = JointEnabled::Enabled;
+ }
+ }
+ }
+ }
+
/// Add the specified axes to the set of axes locked by this joint.
pub fn lock_axes(&mut self, axes: JointAxesMask) -> &mut Self {
self.locked_axes |= axes;