pub struct RigidBody {
pub user_data: u128,
/* private fields */
}
Expand description
A rigid body.
To create a new rigid-body, use the RigidBodyBuilder
structure.
Fields§
§user_data: u128
User-defined data associated to this rigid-body.
Implementations§
Source§impl RigidBody
impl RigidBody
Sourcepub fn copy_from(&mut self, other: &RigidBody)
pub fn copy_from(&mut self, other: &RigidBody)
Copy all the characteristics from other
to self
.
If you have a mutable reference to a rigid-body rigid_body: &mut RigidBody
, attempting to
assign it a whole new rigid-body instance, e.g., *rigid_body = RigidBodyBuilder::dynamic().build()
,
will crash due to some internal indices being overwritten. Instead, use
rigid_body.copy_from(&RigidBodyBuilder::dynamic().build())
.
This method will allow you to set most characteristics of this rigid-body from another rigid-body instance without causing any breakage.
This method cannot be used for editing the list of colliders attached to this rigid-body.
Therefore, the list of colliders attached to self
won’t be replaced by the one attached
to other
.
The pose of other
will only copied into self
if self
doesn’t have a parent (if it has
a parent, its position is directly controlled by the parent rigid-body).
Sourcepub fn additional_solver_iterations(&self) -> usize
pub fn additional_solver_iterations(&self) -> usize
Set the additional number of solver iterations run for this rigid-body and everything interacting with it.
See Self::set_additional_solver_iterations
for additional information.
Sourcepub fn set_additional_solver_iterations(&mut self, additional_iterations: usize)
pub fn set_additional_solver_iterations(&mut self, additional_iterations: usize)
Set the additional number of solver iterations run for this rigid-body and everything interacting with it.
Increasing this number will help improve simulation accuracy on this rigid-body and every rigid-body interacting directly or indirectly with it (through joints or contacts). This implies a performance hit.
The default value is 0, meaning exactly IntegrationParameters::num_solver_iterations
will
be used as number of solver iterations for this body.
Sourcepub fn activation(&self) -> &RigidBodyActivation
pub fn activation(&self) -> &RigidBodyActivation
The activation status of this rigid-body.
Sourcepub fn activation_mut(&mut self) -> &mut RigidBodyActivation
pub fn activation_mut(&mut self) -> &mut RigidBodyActivation
Mutable reference to the activation status of this rigid-body.
Sourcepub fn is_enabled(&self) -> bool
pub fn is_enabled(&self) -> bool
Is this rigid-body enabled?
Sourcepub fn set_enabled(&mut self, enabled: bool)
pub fn set_enabled(&mut self, enabled: bool)
Sets whether this rigid-body is enabled or not.
Sourcepub fn linear_damping(&self) -> f32
pub fn linear_damping(&self) -> f32
The linear damping coefficient of this rigid-body.
Sourcepub fn set_linear_damping(&mut self, damping: f32)
pub fn set_linear_damping(&mut self, damping: f32)
Sets the linear damping coefficient of this rigid-body.
Sourcepub fn angular_damping(&self) -> f32
pub fn angular_damping(&self) -> f32
The angular damping coefficient of this rigid-body.
Sourcepub fn set_angular_damping(&mut self, damping: f32)
pub fn set_angular_damping(&mut self, damping: f32)
Sets the angular damping coefficient of this rigid-body.
Sourcepub fn body_type(&self) -> RigidBodyType
pub fn body_type(&self) -> RigidBodyType
The type of this rigid-body.
Sourcepub fn set_body_type(&mut self, status: RigidBodyType, wake_up: bool)
pub fn set_body_type(&mut self, status: RigidBodyType, wake_up: bool)
Sets the type of this rigid-body.
Sourcepub fn center_of_mass(&self) -> &Point<f32>
pub fn center_of_mass(&self) -> &Point<f32>
The world-space center-of-mass of this rigid-body.
Sourcepub fn local_center_of_mass(&self) -> &Point<f32>
pub fn local_center_of_mass(&self) -> &Point<f32>
The local-space center-of-mass of this rigid-body.
Sourcepub fn mass_properties(&self) -> &RigidBodyMassProps
pub fn mass_properties(&self) -> &RigidBodyMassProps
The mass-properties of this rigid-body.
Sourcepub fn effective_dominance_group(&self) -> i16
pub fn effective_dominance_group(&self) -> i16
The dominance group of this rigid-body.
This method always returns i8::MAX + 1
for non-dynamic
rigid-bodies.
Sourcepub fn set_locked_axes(&mut self, locked_axes: LockedAxes, wake_up: bool)
pub fn set_locked_axes(&mut self, locked_axes: LockedAxes, wake_up: bool)
Sets the axes along which this rigid-body cannot translate or rotate.
Sourcepub fn locked_axes(&self) -> LockedAxes
pub fn locked_axes(&self) -> LockedAxes
The axes along which this rigid-body cannot translate or rotate.
Sourcepub fn lock_rotations(&mut self, locked: bool, wake_up: bool)
pub fn lock_rotations(&mut self, locked: bool, wake_up: bool)
Locks or unlocks all the rotations of this rigid-body.
Sourcepub fn set_enabled_rotations(
&mut self,
allow_rotations_x: bool,
allow_rotations_y: bool,
allow_rotations_z: bool,
wake_up: bool,
)
pub fn set_enabled_rotations( &mut self, allow_rotations_x: bool, allow_rotations_y: bool, allow_rotations_z: bool, wake_up: bool, )
Locks or unlocks rotations of this rigid-body along each cartesian axes.
Sourcepub fn restrict_rotations(
&mut self,
allow_rotations_x: bool,
allow_rotations_y: bool,
allow_rotations_z: bool,
wake_up: bool,
)
👎Deprecated: Use set_enabled_rotations
instead
pub fn restrict_rotations( &mut self, allow_rotations_x: bool, allow_rotations_y: bool, allow_rotations_z: bool, wake_up: bool, )
set_enabled_rotations
insteadLocks or unlocks rotations of this rigid-body along each cartesian axes.
Sourcepub fn lock_translations(&mut self, locked: bool, wake_up: bool)
pub fn lock_translations(&mut self, locked: bool, wake_up: bool)
Locks or unlocks all the rotations of this rigid-body.
Sourcepub fn set_enabled_translations(
&mut self,
allow_translation_x: bool,
allow_translation_y: bool,
wake_up: bool,
)
pub fn set_enabled_translations( &mut self, allow_translation_x: bool, allow_translation_y: bool, wake_up: bool, )
Locks or unlocks rotations of this rigid-body along each cartesian axes.
Sourcepub fn restrict_translations(
&mut self,
allow_translation_x: bool,
allow_translation_y: bool,
wake_up: bool,
)
👎Deprecated: Use set_enabled_translations
instead
pub fn restrict_translations( &mut self, allow_translation_x: bool, allow_translation_y: bool, wake_up: bool, )
set_enabled_translations
insteadLocks or unlocks rotations of this rigid-body along each cartesian axes.
Sourcepub fn is_translation_locked(&self) -> bool
pub fn is_translation_locked(&self) -> bool
Are the translations of this rigid-body locked?
Sourcepub fn is_rotation_locked(&self) -> bool
pub fn is_rotation_locked(&self) -> bool
Are the rotations of this rigid-body locked?
Sourcepub fn enable_ccd(&mut self, enabled: bool)
pub fn enable_ccd(&mut self, enabled: bool)
Enables of disable CCD (Continuous Collision-Detection) for this rigid-body.
CCD prevents tunneling, but may still allow limited interpenetration of colliders.
Sourcepub fn is_ccd_enabled(&self) -> bool
pub fn is_ccd_enabled(&self) -> bool
Is CCD (continuous collision-detection) enabled for this rigid-body?
Sourcepub fn set_soft_ccd_prediction(&mut self, prediction_distance: f32)
pub fn set_soft_ccd_prediction(&mut self, prediction_distance: f32)
Sets the maximum prediction distance Soft Continuous Collision-Detection.
When set to 0, soft-CCD is disabled. Soft-CCD helps prevent tunneling especially of slow-but-thin to moderately fast objects. The soft CCD prediction distance indicates how far in the object’s path the CCD algorithm is allowed to inspect. Large values can impact performance badly by increasing the work needed from the broad-phase.
It is a generally cheaper variant of regular CCD (that can be enabled with
RigidBody::enable_ccd
since it relies on predictive constraints instead of
shape-cast and substeps.
Sourcepub fn soft_ccd_prediction(&self) -> f32
pub fn soft_ccd_prediction(&self) -> f32
The soft-CCD prediction distance for this rigid-body.
See the documentation of RigidBody::set_soft_ccd_prediction
for additional details on
soft-CCD.
Sourcepub fn is_ccd_active(&self) -> bool
pub fn is_ccd_active(&self) -> bool
Is CCD active for this rigid-body?
The CCD is considered active if the rigid-body is moving at a velocity greater than an automatically-computed threshold.
This is not the same as self.is_ccd_enabled
which only
checks if CCD is enabled to run for this rigid-body or if
it is completely disabled (independently from its velocity).
Sourcepub fn recompute_mass_properties_from_colliders(
&mut self,
colliders: &ColliderSet,
)
pub fn recompute_mass_properties_from_colliders( &mut self, colliders: &ColliderSet, )
Recompute the mass-properties of this rigid-bodies based on its currently attached colliders.
Sourcepub fn set_additional_mass(&mut self, additional_mass: f32, wake_up: bool)
pub fn set_additional_mass(&mut self, additional_mass: f32, wake_up: bool)
Sets the rigid-body’s additional mass.
The total angular inertia of the rigid-body will be scaled automatically based on this
additional mass. If this scaling effect isn’t desired, use Self::set_additional_mass_properties
instead of this method.
This is only the “additional” mass because the total mass of the rigid-body is equal to the sum of this additional mass and the mass computed from the colliders (with non-zero densities) attached to this rigid-body.
That total mass (which includes the attached colliders’ contributions)
will be updated at the name physics step, or can be updated manually with
Self::recompute_mass_properties_from_colliders
.
This will override any previous mass-properties set by Self::set_additional_mass
,
Self::set_additional_mass_properties
, RigidBodyBuilder::additional_mass
, or
RigidBodyBuilder::additional_mass_properties
for this rigid-body.
If wake_up
is true
then the rigid-body will be woken up if it was
put to sleep because it did not move for a while.
Sourcepub fn set_additional_mass_properties(
&mut self,
props: MassProperties,
wake_up: bool,
)
pub fn set_additional_mass_properties( &mut self, props: MassProperties, wake_up: bool, )
Sets the rigid-body’s additional mass-properties.
This is only the “additional” mass-properties because the total mass-properties of the rigid-body is equal to the sum of this additional mass-properties and the mass computed from the colliders (with non-zero densities) attached to this rigid-body.
That total mass-properties (which include the attached colliders’ contributions)
will be updated at the name physics step, or can be updated manually with
Self::recompute_mass_properties_from_colliders
.
This will override any previous mass-properties set by Self::set_additional_mass
,
Self::set_additional_mass_properties
, RigidBodyBuilder::additional_mass
, or
RigidBodyBuilder::additional_mass_properties
for this rigid-body.
If wake_up
is true
then the rigid-body will be woken up if it was
put to sleep because it did not move for a while.
Sourcepub fn colliders(&self) -> &[ColliderHandle]
pub fn colliders(&self) -> &[ColliderHandle]
The handles of colliders attached to this rigid body.
Sourcepub fn is_dynamic(&self) -> bool
pub fn is_dynamic(&self) -> bool
Is this rigid body dynamic?
A dynamic body can move freely and is affected by forces.
Sourcepub fn is_kinematic(&self) -> bool
pub fn is_kinematic(&self) -> bool
Is this rigid body kinematic?
A kinematic body can move freely but is not affected by forces.
Sourcepub fn is_fixed(&self) -> bool
pub fn is_fixed(&self) -> bool
Is this rigid body fixed?
A fixed body cannot move and is not affected by forces.
Sourcepub fn mass(&self) -> f32
pub fn mass(&self) -> f32
The mass of this rigid body.
Returns zero if this rigid body has an infinite mass.
Sourcepub fn next_position(&self) -> &Isometry<f32>
pub fn next_position(&self) -> &Isometry<f32>
The predicted position of this rigid-body.
If this rigid-body is kinematic this value is set by the set_next_kinematic_position
method and is used for estimating the kinematic body velocity at the next timestep.
For non-kinematic bodies, this value is currently unspecified.
Sourcepub fn gravity_scale(&self) -> f32
pub fn gravity_scale(&self) -> f32
The scale factor applied to the gravity affecting this rigid-body.
Sourcepub fn set_gravity_scale(&mut self, scale: f32, wake_up: bool)
pub fn set_gravity_scale(&mut self, scale: f32, wake_up: bool)
Sets the gravity scale facter for this rigid-body.
Sourcepub fn dominance_group(&self) -> i8
pub fn dominance_group(&self) -> i8
The dominance group of this rigid-body.
Sourcepub fn set_dominance_group(&mut self, dominance: i8)
pub fn set_dominance_group(&mut self, dominance: i8)
The dominance group of this rigid-body.
Sourcepub fn sleep(&mut self)
pub fn sleep(&mut self)
Put this rigid body to sleep.
A sleeping body no longer moves and is no longer simulated by the physics engine unless
it is waken up. It can be woken manually with self.wake_up
or automatically due to
external forces like contacts.
Sourcepub fn wake_up(&mut self, strong: bool)
pub fn wake_up(&mut self, strong: bool)
Wakes up this rigid body if it is sleeping.
If strong
is true
then it is assured that the rigid-body will
remain awake during multiple subsequent timesteps.
Sourcepub fn is_sleeping(&self) -> bool
pub fn is_sleeping(&self) -> bool
Is this rigid body sleeping?
Sourcepub fn vels(&self) -> &RigidBodyVelocity
pub fn vels(&self) -> &RigidBodyVelocity
The linear and angular velocity of this rigid-body.
Sourcepub fn set_vels(&mut self, vels: RigidBodyVelocity, wake_up: bool)
pub fn set_vels(&mut self, vels: RigidBodyVelocity, wake_up: bool)
Set both the angular and linear velocity of this rigid-body.
If wake_up
is true
then the rigid-body will be woken up if it was
put to sleep because it did not move for a while.
Sourcepub fn set_linvel(&mut self, linvel: Vector<f32>, wake_up: bool)
pub fn set_linvel(&mut self, linvel: Vector<f32>, wake_up: bool)
The linear velocity of this rigid-body.
If wake_up
is true
then the rigid-body will be woken up if it was
put to sleep because it did not move for a while.
Sourcepub fn set_angvel(&mut self, angvel: f32, wake_up: bool)
pub fn set_angvel(&mut self, angvel: f32, wake_up: bool)
The angular velocity of this rigid-body.
If wake_up
is true
then the rigid-body will be woken up if it was
put to sleep because it did not move for a while.
Sourcepub fn translation(&self) -> &Vector<f32>
pub fn translation(&self) -> &Vector<f32>
The translational part of this rigid-body’s position.
Sourcepub fn set_translation(&mut self, translation: Vector<f32>, wake_up: bool)
pub fn set_translation(&mut self, translation: Vector<f32>, wake_up: bool)
Sets the translational part of this rigid-body’s position.
Sourcepub fn set_rotation(&mut self, rotation: Rotation<f32>, wake_up: bool)
pub fn set_rotation(&mut self, rotation: Rotation<f32>, wake_up: bool)
Sets the rotational part of this rigid-body’s position.
Sourcepub fn set_position(&mut self, pos: Isometry<f32>, wake_up: bool)
pub fn set_position(&mut self, pos: Isometry<f32>, wake_up: bool)
Sets the position and next_kinematic_position
of this rigid body.
This will teleport the rigid-body to the specified position/orientation, completely ignoring any physics rule. If this body is kinematic, this will also set the next kinematic position to the same value, effectively resetting to zero the next interpolated velocity of the kinematic body.
If wake_up
is true
then the rigid-body will be woken up if it was
put to sleep because it did not move for a while.
Sourcepub fn set_next_kinematic_rotation(&mut self, rotation: Rotation<f32>)
pub fn set_next_kinematic_rotation(&mut self, rotation: Rotation<f32>)
If this rigid body is kinematic, sets its future orientation after the next timestep integration.
Sourcepub fn set_next_kinematic_translation(&mut self, translation: Vector<f32>)
pub fn set_next_kinematic_translation(&mut self, translation: Vector<f32>)
If this rigid body is kinematic, sets its future translation after the next timestep integration.
Sourcepub fn set_next_kinematic_position(&mut self, pos: Isometry<f32>)
pub fn set_next_kinematic_position(&mut self, pos: Isometry<f32>)
If this rigid body is kinematic, sets its future position (translation and orientation) after the next timestep integration.
Sourcepub fn predict_position_using_velocity_and_forces(
&self,
dt: f32,
) -> Isometry<f32>
pub fn predict_position_using_velocity_and_forces( &self, dt: f32, ) -> Isometry<f32>
Predicts the next position of this rigid-body, by integrating its velocity and forces
by a time of dt
.
Sourcepub fn predict_position_using_velocity(&self, dt: f32) -> Isometry<f32>
pub fn predict_position_using_velocity(&self, dt: f32) -> Isometry<f32>
Predicts the next position of this rigid-body, by integrating only its velocity
by a time of dt
.
The forces that were applied to this rigid-body since the last physics step will
be ignored by this function. Use Self::predict_position_using_velocity_and_forces
instead to take forces into account.
Source§impl RigidBody
§Applying forces and torques
impl RigidBody
§Applying forces and torques
Sourcepub fn reset_forces(&mut self, wake_up: bool)
pub fn reset_forces(&mut self, wake_up: bool)
Resets to zero all the constant (linear) forces manually applied to this rigid-body.
Sourcepub fn reset_torques(&mut self, wake_up: bool)
pub fn reset_torques(&mut self, wake_up: bool)
Resets to zero all the constant torques manually applied to this rigid-body.
Sourcepub fn add_force(&mut self, force: Vector<f32>, wake_up: bool)
pub fn add_force(&mut self, force: Vector<f32>, wake_up: bool)
Adds to this rigid-body a constant force applied at its center-of-mass.ç
This does nothing on non-dynamic bodies.
Sourcepub fn add_torque(&mut self, torque: f32, wake_up: bool)
pub fn add_torque(&mut self, torque: f32, wake_up: bool)
Adds to this rigid-body a constant torque at its center-of-mass.
This does nothing on non-dynamic bodies.
Source§impl RigidBody
§Applying impulses and angular impulses
impl RigidBody
§Applying impulses and angular impulses
Sourcepub fn apply_impulse(&mut self, impulse: Vector<f32>, wake_up: bool)
pub fn apply_impulse(&mut self, impulse: Vector<f32>, wake_up: bool)
Applies an impulse at the center-of-mass of this rigid-body. The impulse is applied right away, changing the linear velocity. This does nothing on non-dynamic bodies.
Sourcepub fn apply_torque_impulse(&mut self, torque_impulse: f32, wake_up: bool)
pub fn apply_torque_impulse(&mut self, torque_impulse: f32, wake_up: bool)
Applies an angular impulse at the center-of-mass of this rigid-body. The impulse is applied right away, changing the angular velocity. This does nothing on non-dynamic bodies.
Sourcepub fn apply_impulse_at_point(
&mut self,
impulse: Vector<f32>,
point: Point<f32>,
wake_up: bool,
)
pub fn apply_impulse_at_point( &mut self, impulse: Vector<f32>, point: Point<f32>, wake_up: bool, )
Applies an impulse at the given world-space point of this rigid-body. The impulse is applied right away, changing the linear and/or angular velocities. This does nothing on non-dynamic bodies.
Sourcepub fn user_force(&self) -> Vector<f32>
pub fn user_force(&self) -> Vector<f32>
Retrieves the constant force(s) that the user has added to the body.
Returns zero if the rigid-body isn’t dynamic.
Sourcepub fn user_torque(&self) -> AngVector<f32>
pub fn user_torque(&self) -> AngVector<f32>
Retrieves the constant torque(s) that the user has added to the body.
Returns zero if the rigid-body isn’t dynamic.
Trait Implementations§
Source§impl From<RigidBodyBuilder> for RigidBody
impl From<RigidBodyBuilder> for RigidBody
Source§fn from(val: RigidBodyBuilder) -> RigidBody
fn from(val: RigidBodyBuilder) -> RigidBody
Auto Trait Implementations§
impl Freeze for RigidBody
impl RefUnwindSafe for RigidBody
impl Send for RigidBody
impl Sync for RigidBody
impl Unpin for RigidBody
impl UnwindSafe for RigidBody
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.