Struct heron::CollisionLayers
source · 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
sourceimpl 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
sourceimpl Clone for CollisionLayers
impl Clone for CollisionLayers
sourcefn clone(&self) -> CollisionLayers
fn clone(&self) -> CollisionLayers
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl Component for CollisionLayerswhere
CollisionLayers: 'static + Send + Sync,
impl Component for CollisionLayerswhere
CollisionLayers: 'static + Send + Sync,
type Storage = TableStorage
sourceimpl Debug for CollisionLayers
impl Debug for CollisionLayers
sourceimpl Default for CollisionLayers
impl Default for CollisionLayers
sourcefn default() -> CollisionLayers
fn default() -> CollisionLayers
sourceimpl FromReflect for CollisionLayerswhere
u32: FromReflect,
impl FromReflect for CollisionLayerswhere
u32: FromReflect,
sourcefn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<CollisionLayers>
fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<CollisionLayers>
Self
from a reflected value.sourceimpl GetTypeRegistration for CollisionLayers
impl GetTypeRegistration for CollisionLayers
fn get_type_registration() -> TypeRegistration
sourceimpl IntoBevy<CollisionLayers> for InteractionGroups
impl IntoBevy<CollisionLayers> for InteractionGroups
fn into_bevy(self) -> CollisionLayers
sourceimpl IntoRapier<InteractionGroups> for CollisionLayers
impl IntoRapier<InteractionGroups> for CollisionLayers
fn into_rapier(self) -> InteractionGroups
sourceimpl PartialEq<CollisionLayers> for CollisionLayers
impl PartialEq<CollisionLayers> for CollisionLayers
sourcefn eq(&self, other: &CollisionLayers) -> bool
fn eq(&self, other: &CollisionLayers) -> bool
sourceimpl Reflect for CollisionLayers
impl Reflect for CollisionLayers
sourcefn get_type_info(&self) -> &'static TypeInfo
fn get_type_info(&self) -> &'static TypeInfo
TypeInfo
] of the underlying type. Read moresourcefn into_any(
self: Box<CollisionLayers, Global>
) -> Box<dyn Any + 'static, Global>
fn into_any(
self: Box<CollisionLayers, Global>
) -> Box<dyn Any + 'static, Global>
Box<dyn Any>
.sourcefn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
.sourcefn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
sourcefn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
sourcefn clone_value(&self) -> Box<dyn Reflect + 'static, Global>
fn clone_value(&self) -> Box<dyn Reflect + 'static, Global>
Reflect
trait object. Read moresourcefn set(
&mut self,
value: Box<dyn Reflect + 'static, Global>
) -> Result<(), Box<dyn Reflect + 'static, Global>>
fn set(
&mut self,
value: Box<dyn Reflect + 'static, Global>
) -> Result<(), Box<dyn Reflect + 'static, Global>>
sourcefn apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
sourcefn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
sourcefn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
sourcefn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
sourceimpl Struct for CollisionLayers
impl Struct for CollisionLayers
sourcefn 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
. Read moresourcefn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.sourcefn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
sourcefn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
].sourceimpl Typed for CollisionLayers
impl Typed for CollisionLayers
impl Copy for CollisionLayers
impl Eq for CollisionLayers
impl StructuralEq for CollisionLayers
impl StructuralPartialEq for CollisionLayers
Auto Trait Implementations
impl RefUnwindSafe for CollisionLayers
impl Send for CollisionLayers
impl Sync for CollisionLayers
impl Unpin for CollisionLayers
impl UnwindSafe for CollisionLayers
Blanket Implementations
impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
T
[ShaderType
] for self
. When used in [AsBindGroup
]
derives, it is safe to assume that all images in self
exist. Read moresourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
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
. Read morefn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read morefn 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. Read morefn 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. Read moresourceimpl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given [World]impl<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
impl<T> GetPath for Twhere
T: Reflect,
impl<T> GetPath for Twhere
T: Reflect,
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 morefn 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 morefn get_path<T, 'r, 'p>(
&'r self,
path: &'p str
) -> Result<&'r T, ReflectPathError<'p>>where
T: Reflect,
fn get_path<T, 'r, 'p>(
&'r self,
path: &'p str
) -> Result<&'r T, ReflectPathError<'p>>where
T: Reflect,
path
.fn get_path_mut<T, 'r, 'p>(
&'r mut self,
path: &'p str
) -> Result<&'r mut T, ReflectPathError<'p>>where
T: Reflect,
fn get_path_mut<T, 'r, 'p>(
&'r mut self,
path: &'p str
) -> Result<&'r mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moresourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<T> Pointable for T
impl<T> Pointable for T
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read morefn 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).fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.