Add collision groups to filter collision pairs.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use crate::dynamics::{MassProperties, RigidBodyHandle, RigidBodySet};
|
||||
use crate::geometry::{
|
||||
Ball, Capsule, ColliderGraphIndex, Contact, Cuboid, HeightField, InteractionGraph, Proximity,
|
||||
Segment, Shape, ShapeType, Triangle, Trimesh,
|
||||
Ball, Capsule, ColliderGraphIndex, Contact, Cuboid, HeightField, InteractionGraph,
|
||||
InteractionGroups, Proximity, Segment, Shape, ShapeType, Triangle, Trimesh,
|
||||
};
|
||||
#[cfg(feature = "dim3")]
|
||||
use crate::geometry::{Cone, Cylinder, RoundCylinder};
|
||||
@@ -203,6 +203,7 @@ pub struct Collider {
|
||||
pub friction: f32,
|
||||
/// The restitution coefficient of this collider.
|
||||
pub restitution: f32,
|
||||
pub(crate) collision_groups: InteractionGroups,
|
||||
pub(crate) contact_graph_index: ColliderGraphIndex,
|
||||
pub(crate) proximity_graph_index: ColliderGraphIndex,
|
||||
pub(crate) proxy_index: usize,
|
||||
@@ -255,6 +256,11 @@ impl Collider {
|
||||
&self.delta
|
||||
}
|
||||
|
||||
/// The collision groups used by this collider.
|
||||
pub fn collision_groups(&self) -> InteractionGroups {
|
||||
self.collision_groups
|
||||
}
|
||||
|
||||
/// The density of this collider.
|
||||
pub fn density(&self) -> f32 {
|
||||
self.density
|
||||
@@ -300,6 +306,8 @@ pub struct ColliderBuilder {
|
||||
pub is_sensor: bool,
|
||||
/// The user-data of the collider beind built.
|
||||
pub user_data: u128,
|
||||
/// The collision groups for the collider being built.
|
||||
pub collision_groups: InteractionGroups,
|
||||
}
|
||||
|
||||
impl ColliderBuilder {
|
||||
@@ -313,6 +321,7 @@ impl ColliderBuilder {
|
||||
delta: Isometry::identity(),
|
||||
is_sensor: false,
|
||||
user_data: 0,
|
||||
collision_groups: InteractionGroups::all(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -418,12 +427,21 @@ impl ColliderBuilder {
|
||||
0.5
|
||||
}
|
||||
|
||||
/// An arbitrary user-defined 128-bit integer associated to the colliders built by this builder.
|
||||
/// Sets 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 the collision groups used by this collider.
|
||||
///
|
||||
/// Two colliders will interact iff. their collision groups are compatible.
|
||||
/// See [InteractionGroups::test] for details.
|
||||
pub fn collision_groups(mut self, groups: InteractionGroups) -> Self {
|
||||
self.collision_groups = groups;
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user