Struct ncollide2d::world::CollisionGroups
source · pub struct CollisionGroups { /* private fields */ }
Expand description
Groups of collision used to filter which object interact with which other one.
There are at most 30 groups indexed from 0 to 29 (included). This identifies collidable entities by combining three attributes:
- A set of group this structure is member of.
- A collision group whitelist.
- A collision group blacklist.
For two entities to interact, they must be member of at least one group part of each-other’s whitelists, and must not be part of any blacklisted group. The blacklist always has priority on the whitelist.
Example
For example if the object A is such that:
- It is part of the groups 1, 3, and 6.
- It whitelists the groups 6 and 7.
- It blacklists the group 1. Let the object B be such that:
- It is part of the groups 1, 3, and 7.
- It whitelists the groups 3 and 7.
- It does not blacklist anything. For example if the object C is such that:
- It is part of the groups 6 and 9.
- It whitelists the groups 3 and 7.
- It does not blacklist anything.
Then we have:
- A and C can interact because A whitelists the group 6 (which C is part of), and, reciprocally, C whitelists the group 3 (which A is part of).
- A and B will not interact because B is part of the group 1 which is blacklisted by A.
- Finally, B and C will not interact either because, even if C whitelists the group 3 (which B is part of), B does not whitelists the groups 6 nor 9 (which B is part of).
Implementations§
source§impl CollisionGroups
impl CollisionGroups
sourcepub fn new() -> CollisionGroups
pub fn new() -> CollisionGroups
Creates a new CollisionGroups
that enables interactions with everything except
self-interaction.
sourcepub fn max_group_id() -> usize
pub fn max_group_id() -> usize
The maximum allowed group identifier.
sourcepub fn modify_membership(&mut self, group_id: usize, add: bool)
pub fn modify_membership(&mut self, group_id: usize, add: bool)
Adds or removes this entity from the given group.
sourcepub fn modify_whitelist(&mut self, group_id: usize, add: bool)
pub fn modify_whitelist(&mut self, group_id: usize, add: bool)
Adds or removes the given group from this entity whitelist.
sourcepub fn modify_blacklist(&mut self, group_id: usize, add: bool)
pub fn modify_blacklist(&mut self, group_id: usize, add: bool)
Adds or removes this entity from the given group.
sourcepub fn set_membership(&mut self, groups: &[usize])
pub fn set_membership(&mut self, groups: &[usize])
Make this object member of the given groups only.
sourcepub fn set_whitelist(&mut self, groups: &[usize])
pub fn set_whitelist(&mut self, groups: &[usize])
Whitelists the given groups only (others will be un-whitelisted).
sourcepub fn set_blacklist(&mut self, groups: &[usize])
pub fn set_blacklist(&mut self, groups: &[usize])
Blacklists the given groups only (others will be un-blacklisted).
sourcepub fn copy_membership(&mut self, other: &CollisionGroups)
pub fn copy_membership(&mut self, other: &CollisionGroups)
Copies the membership of another collision groups.
sourcepub fn copy_whitelist(&mut self, other: &CollisionGroups)
pub fn copy_whitelist(&mut self, other: &CollisionGroups)
Copies the whitelist of another collision groups.
sourcepub fn copy_blacklist(&mut self, other: &CollisionGroups)
pub fn copy_blacklist(&mut self, other: &CollisionGroups)
Copies the blacklist of another collision groups.
sourcepub fn enable_self_interaction(&mut self)
pub fn enable_self_interaction(&mut self)
Allows the object to interact with itself.
sourcepub fn disable_self_interaction(&mut self)
pub fn disable_self_interaction(&mut self)
Prevents the object from interacting with itself.
sourcepub fn is_member_of(&self, group_id: usize) -> bool
pub fn is_member_of(&self, group_id: usize) -> bool
Tests if this entity is part of the given group.
sourcepub fn is_group_whitelisted(&self, group_id: usize) -> bool
pub fn is_group_whitelisted(&self, group_id: usize) -> bool
Tests if the given group is whitelisted.
sourcepub fn is_group_blacklisted(&self, group_id: usize) -> bool
pub fn is_group_blacklisted(&self, group_id: usize) -> bool
Tests if the given group is blacklisted.
sourcepub fn can_interact_with(&self, group_id: usize) -> bool
pub fn can_interact_with(&self, group_id: usize) -> bool
Tests whether interactinos with a given group is possible.
Collision is possible if group_id
is whitelisted but not blacklisted.
sourcepub fn can_interact_with_groups(&self, other: &CollisionGroups) -> bool
pub fn can_interact_with_groups(&self, other: &CollisionGroups) -> bool
Tests whether two collision groups have at least one group in common.
sourcepub fn can_interact_with_self(&self) -> bool
pub fn can_interact_with_self(&self) -> bool
Tests whether self-interaction is enabled.
Trait Implementations§
source§impl Clone for CollisionGroups
impl Clone for CollisionGroups
source§fn clone(&self) -> CollisionGroups
fn clone(&self) -> CollisionGroups
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for CollisionGroups
impl Debug for CollisionGroups
impl Copy for CollisionGroups
Auto Trait Implementations§
impl RefUnwindSafe for CollisionGroups
impl Send for CollisionGroups
impl Sync for CollisionGroups
impl Unpin for CollisionGroups
impl UnwindSafe for CollisionGroups
Blanket Implementations§
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§unsafe fn to_subset_unchecked(&self) -> SS
unsafe 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.