Struct heron::prelude::CollisionLayers [−][src]
pub struct CollisionLayers { /* fields omitted */ }
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()
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
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
.
Contains all layers
The entity,will interacts with everything (except the entities that interact with nothing)
Contains no layer
The entity, will not interact with anything
Returns true if the entity would interact with an entity containing the other
[CollisionLayers]
Returns true if the given layer is contained in the “groups”
Add the given layer in the “groups”
pub 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”
Remove the given layer from the “groups”
Returns true if the given layer is contained in the “masks”
Add the given layer in the “masks”
pub 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”
Remove the given layer from the “masks”
Trait Implementations
Returns the “default value” for a type. Read more
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
pub fn set(
&mut self,
value: Box<dyn Reflect + 'static, Global>
) -> Result<(), Box<dyn Reflect + 'static, Global>>
Returns a serializable value, if serialization is supported. Otherwise None
will be
returned. Read more
Returns a hash of the value (which includes the type) if hashing is supported. Otherwise
None
will be returned. Read more
Returns a “partial equal” comparison result if comparison is supported. Otherwise None
will be returned. Read more
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
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
Convert 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 more
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
pub fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
impl<T> FromWorld for T where
T: Default,
impl<T> FromWorld for T where
T: Default,
pub fn from_world(_world: &mut World) -> T
pub fn from_world(_world: &mut World) -> T
Creates Self
using data from the given [World]
impl<T> Pointable for T
impl<T> Pointable for T
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
The inverse inclusion map: attempts to construct self
from the equivalent element of its
superset. Read more
pub fn is_in_subset(&self) -> bool
pub fn is_in_subset(&self) -> bool
Checks if self
is actually part of its subset T
(and can be converted to it).
pub fn to_subset_unchecked(&self) -> SS
pub fn to_subset_unchecked(&self) -> SS
Use with care! Same as self.to_subset
but without any property checks. Always succeeds.
pub fn from_subset(element: &SS) -> SP
pub fn from_subset(element: &SS) -> SP
The inclusion map: converts self
to the equivalent element of its superset.
pub fn clone_type_data(&self) -> Box<dyn TypeData + 'static, Global>
pub fn vzip(self) -> V
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more