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 there be an object B such that:
- It is part of the groups 1, 3, and 7.
- It whitelists the groups 3 and 7.
- It does not blacklist anything.
and an object C 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 empty() -> CollisionGroups
pub fn empty() -> CollisionGroups
Creates a new CollisionGroups
that disables interactions with everything.
Sourcepub fn with_membership(self, groups: &[usize]) -> CollisionGroups
pub fn with_membership(self, groups: &[usize]) -> CollisionGroups
Returns a copy of this object, updated with a new set of membership groups.
§Examples
const GROUP_A: usize = 0;
const GROUP_B: usize = 29;
let groups = CollisionGroups::new().with_membership(&[GROUP_A, GROUP_B]);
assert!(groups.is_member_of(GROUP_A));
assert!(groups.is_member_of(GROUP_B));
Sourcepub fn with_whitelist(self, groups: &[usize]) -> CollisionGroups
pub fn with_whitelist(self, groups: &[usize]) -> CollisionGroups
Returns a copy of this object, updated with a new set of whitelisted groups.
§Examples
const GROUP_A: usize = 0;
const GROUP_B: usize = 29;
let group_a = CollisionGroups::new().with_whitelist(&[GROUP_B]);
assert!(!group_a.is_group_whitelisted(GROUP_A));
assert!(group_a.is_group_whitelisted(GROUP_B));
Sourcepub fn with_blacklist(self, groups: &[usize]) -> CollisionGroups
pub fn with_blacklist(self, groups: &[usize]) -> CollisionGroups
Returns a copy of this object, updated with a new set of blacklisted groups.
§Examples
const GROUP_A: usize = 0;
const GROUP_B: usize = 29;
let group_a = CollisionGroups::new().with_blacklist(&[GROUP_B]);
assert!(!group_a.is_group_blacklisted(GROUP_A));
assert!(group_a.is_group_blacklisted(GROUP_B));
Sourcepub fn max_group_id() -> usize
pub fn max_group_id() -> usize
The maximum allowed group identifier.
Sourcepub fn add_membership_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn add_membership_by_mask(self, group_mask: u32) -> CollisionGroups
adds this entity to the given group by a mask of bits where each bit index represent a group
Sourcepub fn remove_membership_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn remove_membership_by_mask(self, group_mask: u32) -> CollisionGroups
removes this entity from the given group by a mask of bits where each bit index represent a group
Sourcepub fn with_membership_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn with_membership_by_mask(self, group_mask: u32) -> CollisionGroups
Replaces the membership with a mask of bits where each bit index represent a group
Sourcepub fn add_whitelist_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn add_whitelist_by_mask(self, group_mask: u32) -> CollisionGroups
adds this entity to this entity whitelist by a mask of bits where each bit index represent a group
Sourcepub fn remove_whitelist_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn remove_whitelist_by_mask(self, group_mask: u32) -> CollisionGroups
remove this entity from this entity whitelist by a mask of bits where each bit index represent a group
Sourcepub fn with_whitelist_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn with_whitelist_by_mask(self, group_mask: u32) -> CollisionGroups
Replaces the whitelist with a mask of bits where each bit index represent a group
Sourcepub fn add_blacklist_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn add_blacklist_by_mask(self, group_mask: u32) -> CollisionGroups
adds this entity to this entity blacklist by a mask of bits where each bit index represent a group
Sourcepub fn remove_blacklist_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn remove_blacklist_by_mask(self, group_mask: u32) -> CollisionGroups
remove this entity from this entity blacklist by a mask of bits where each bit index represent a group
Sourcepub fn with_blacklist_by_mask(self, group_mask: u32) -> CollisionGroups
pub fn with_blacklist_by_mask(self, group_mask: u32) -> CollisionGroups
Replaces the blacklist with a mask of bits where each bit index represent a group
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 interactions 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
Source§impl Default for CollisionGroups
impl Default for CollisionGroups
impl Copy for CollisionGroups
Auto Trait Implementations§
impl Freeze for CollisionGroups
impl RefUnwindSafe for CollisionGroups
impl Send for CollisionGroups
impl Sync for CollisionGroups
impl Unpin for CollisionGroups
impl UnwindSafe for CollisionGroups
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<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.