pub struct CollisionLayers { /* private fields */ }
Expand description
Components that defines the collision layers of the collision shape.
This component contains two collections of layers: “groups” and “masks”.
Two entities A and B will interact iff:
- There is a layer in the groups of A that is also in the masks of B
- There is a layer in the groups of B that is also in the masks of A
An entity without this component is considered has having all layers in its “groups” and “masks”, and will interact with everything.
This component must be on the same entity of a CollisionShape
To build an instance, start with either CollisionLayers::new()
, CollisionLayers::all_groups()
,
CollisionLayers::all_masks()
, CollisionLayers::all()
or
CollisionLayers::none()
, and then add or remove layers by calling
with_group
/without_group
and with_mask
/without_mask
.
Theses methods take a type that implement PhysicsLayer
. The best option is to create an enum
with a #[derive(PhysicsLayer)]
clause.
§Example
fn spawn(mut commands: Commands) {
commands.spawn_bundle(todo!("Spawn a bundle of your choice"))
.insert(RigidBody::Dynamic) // <-- Create a rigid body
.insert(CollisionShape::Sphere { radius: 10.0 }) // <-- Attach a collision shape
.insert(
// Define the collision layer of this *collision shape*
CollisionLayers::none()
.with_group(GameLayer::Player) // <-- Mark it as the player
.with_masks(&[GameLayer::World, GameLayer::Enemies]) // <-- Defines that the player collides with world and enemies (but not with other players)
);
}
Implementations§
Source§impl CollisionLayers
impl CollisionLayers
Sourcepub fn new<L>(group: L, mask: L) -> CollisionLayerswhere
L: PhysicsLayer,
pub fn new<L>(group: L, mask: L) -> CollisionLayerswhere
L: PhysicsLayer,
Create a new collision layers configuration with a single group and mask.
You may add more groups and mask with with_group
and with_mask
.
Sourcepub fn all<L>() -> CollisionLayerswhere
L: PhysicsLayer,
pub fn all<L>() -> CollisionLayerswhere
L: PhysicsLayer,
Contains all groups and masks
The entity, will interacts with everything (except the entities that interact with nothing).
Sourcepub fn all_groups<L>() -> CollisionLayerswhere
L: PhysicsLayer,
pub fn all_groups<L>() -> CollisionLayerswhere
L: PhysicsLayer,
Contains all groups and no masks
The entity, will not interact with anything, unless you add masks via CollisionLayers::with_mask
. You
can also exclude specific groups using CollisionLayers::without_group
.
Sourcepub fn all_masks<L>() -> CollisionLayerswhere
L: PhysicsLayer,
pub fn all_masks<L>() -> CollisionLayerswhere
L: PhysicsLayer,
Contains no groups and all masks
The entity, will not interact with anything, unless you add group via CollisionLayers::with_group
. You
can also exclude specific masks using CollisionLayers::without_mask
.
Sourcepub const fn none() -> CollisionLayers
pub const fn none() -> CollisionLayers
Contains no masks and groups
The entity, will not interact with anything
pub const fn from_bits(groups: u32, masks: u32) -> CollisionLayers
Sourcepub fn interacts_with(self, other: CollisionLayers) -> bool
pub fn interacts_with(self, other: CollisionLayers) -> bool
Returns true if the entity would interact with an entity containing the other
[CollisionLayers]
Sourcepub fn contains_group(self, layer: impl PhysicsLayer) -> bool
pub fn contains_group(self, layer: impl PhysicsLayer) -> bool
Returns true if the given layer is contained in the “groups”
Sourcepub fn with_group(self, layer: impl PhysicsLayer) -> CollisionLayers
pub fn with_group(self, layer: impl PhysicsLayer) -> CollisionLayers
Add the given layer in the “groups”
Sourcepub fn with_groups(
self,
layers: impl IntoIterator<Item = impl PhysicsLayer>,
) -> CollisionLayers
pub fn with_groups( self, layers: impl IntoIterator<Item = impl PhysicsLayer>, ) -> CollisionLayers
Add the given layers in the “groups”
Sourcepub fn without_group(self, layer: impl PhysicsLayer) -> CollisionLayers
pub fn without_group(self, layer: impl PhysicsLayer) -> CollisionLayers
Remove the given layer from the “groups”
Sourcepub fn contains_mask(self, layer: impl PhysicsLayer) -> bool
pub fn contains_mask(self, layer: impl PhysicsLayer) -> bool
Returns true if the given layer is contained in the “masks”
Sourcepub fn with_mask(self, layer: impl PhysicsLayer) -> CollisionLayers
pub fn with_mask(self, layer: impl PhysicsLayer) -> CollisionLayers
Add the given layer in the “masks”
Sourcepub fn with_masks(
self,
layers: impl IntoIterator<Item = impl PhysicsLayer>,
) -> CollisionLayers
pub fn with_masks( self, layers: impl IntoIterator<Item = impl PhysicsLayer>, ) -> CollisionLayers
Add the given layers in the “masks”
Sourcepub fn without_mask(self, layer: impl PhysicsLayer) -> CollisionLayers
pub fn without_mask(self, layer: impl PhysicsLayer) -> CollisionLayers
Remove the given layer from the “masks”
pub fn groups_bits(self) -> u32
pub fn masks_bits(self) -> u32
Trait Implementations§
Source§impl Clone for CollisionLayers
impl Clone for CollisionLayers
Source§fn clone(&self) -> CollisionLayers
fn clone(&self) -> CollisionLayers
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Component for CollisionLayers
impl Component for CollisionLayers
type Storage = TableStorage
Source§impl Debug for CollisionLayers
impl Debug for CollisionLayers
Source§impl Default for CollisionLayers
impl Default for CollisionLayers
Source§fn default() -> CollisionLayers
fn default() -> CollisionLayers
Source§impl FromReflect for CollisionLayerswhere
u32: FromReflect,
impl FromReflect for CollisionLayerswhere
u32: FromReflect,
Source§fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<CollisionLayers>
fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<CollisionLayers>
Self
from a reflected value.Source§impl IntoBevy<CollisionLayers> for InteractionGroups
impl IntoBevy<CollisionLayers> for InteractionGroups
fn into_bevy(self) -> CollisionLayers
Source§impl IntoRapier<InteractionGroups> for CollisionLayers
impl IntoRapier<InteractionGroups> for CollisionLayers
fn into_rapier(self) -> InteractionGroups
Source§impl PartialEq for CollisionLayers
impl PartialEq for CollisionLayers
Source§impl Reflect for CollisionLayers
impl Reflect for CollisionLayers
Source§fn get_type_info(&self) -> &'static TypeInfo
fn get_type_info(&self) -> &'static TypeInfo
Source§fn into_any(self: Box<CollisionLayers>) -> Box<dyn Any>
fn into_any(self: Box<CollisionLayers>) -> Box<dyn Any>
Box<dyn Any>
.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
.Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Source§fn clone_value(&self) -> Box<dyn Reflect>
fn clone_value(&self) -> Box<dyn Reflect>
Reflect
trait object. Read moreSource§fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
Source§fn apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
Source§impl Struct for CollisionLayers
impl Struct for CollisionLayers
Source§fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
name
as a &dyn Reflect
.Source§fn field_mut(&mut self, name: &str) -> Option<&mut (dyn Reflect + 'static)>
fn field_mut(&mut self, name: &str) -> Option<&mut (dyn Reflect + 'static)>
name
as a
&mut dyn Reflect
.Source§fn field_at(&self, index: usize) -> Option<&(dyn Reflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn Reflect + 'static)>
index
as a
&dyn Reflect
.Source§fn field_at_mut(&mut self, index: usize) -> Option<&mut (dyn Reflect + 'static)>
fn field_at_mut(&mut self, index: usize) -> Option<&mut (dyn Reflect + 'static)>
index
as a &mut dyn Reflect
.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.Source§fn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
Source§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
.Source§impl Typed for CollisionLayers
impl Typed for CollisionLayers
impl Copy for CollisionLayers
impl Eq for CollisionLayers
impl StructuralPartialEq for CollisionLayers
Auto Trait Implementations§
impl Freeze for CollisionLayers
impl RefUnwindSafe for CollisionLayers
impl Send for CollisionLayers
impl Sync for CollisionLayers
impl Unpin for CollisionLayers
impl UnwindSafe for CollisionLayers
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset>,
) -> U
fn as_bind_group_shader_type( &self, _images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset>, ) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given WorldSource§impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
Source§impl<T> GetPath for Twhere
T: Reflect,
impl<T> GetPath for Twhere
T: Reflect,
Source§fn path<'r, 'p>(
&'r self,
path: &'p str,
) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
fn path<'r, 'p>( &'r self, path: &'p str, ) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn path_mut<'r, 'p>(
&'r mut self,
path: &'p str,
) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn path_mut<'r, 'p>( &'r mut self, path: &'p str, ) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn get_path<'r, 'p, T>(
&'r self,
path: &'p str,
) -> Result<&'r T, ReflectPathError<'p>>where
T: Reflect,
fn get_path<'r, 'p, T>(
&'r self,
path: &'p str,
) -> Result<&'r T, ReflectPathError<'p>>where
T: Reflect,
path
.Source§fn get_path_mut<'r, 'p, T>(
&'r mut self,
path: &'p str,
) -> Result<&'r mut T, ReflectPathError<'p>>where
T: Reflect,
fn get_path_mut<'r, 'p, T>(
&'r mut self,
path: &'p str,
) -> Result<&'r mut T, ReflectPathError<'p>>where
T: Reflect,
path
.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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.