Struct heron_core::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: PhysicsLayer>(group: L, mask: L) -> Self
pub fn new<L: PhysicsLayer>(group: L, mask: L) -> Self
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: PhysicsLayer>() -> Self
pub fn all<L: PhysicsLayer>() -> Self
Contains all groups and masks
The entity, will interacts with everything (except the entities that interact with nothing).
sourcepub fn all_groups<L: PhysicsLayer>() -> Self
pub fn all_groups<L: PhysicsLayer>() -> Self
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: PhysicsLayer>() -> Self
pub fn all_masks<L: PhysicsLayer>() -> Self
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() -> Self
pub const fn none() -> Self
Contains no masks and groups
The entity, will not interact with anything
pub const fn from_bits(groups: u32, masks: u32) -> Self
sourcepub fn interacts_with(self, other: Self) -> bool
pub fn interacts_with(self, other: Self) -> 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) -> Self
pub fn with_group(self, layer: impl PhysicsLayer) -> Self
Add the given layer in the “groups”
sourcepub fn with_groups(
self,
layers: impl IntoIterator<Item = impl PhysicsLayer>
) -> Self
pub fn with_groups(
self,
layers: impl IntoIterator<Item = impl PhysicsLayer>
) -> Self
Add the given layers in the “groups”
sourcepub fn without_group(self, layer: impl PhysicsLayer) -> Self
pub fn without_group(self, layer: impl PhysicsLayer) -> Self
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) -> Self
pub fn with_mask(self, layer: impl PhysicsLayer) -> Self
Add the given layer in the “masks”
sourcepub fn with_masks(
self,
layers: impl IntoIterator<Item = impl PhysicsLayer>
) -> Self
pub fn with_masks(
self,
layers: impl IntoIterator<Item = impl PhysicsLayer>
) -> Self
Add the given layers in the “masks”
sourcepub fn without_mask(self, layer: impl PhysicsLayer) -> Self
pub fn without_mask(self, layer: impl PhysicsLayer) -> Self
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
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Component for CollisionLayers where
Self: Send + Sync + 'static,
impl Component for CollisionLayers where
Self: Send + Sync + 'static,
type Storage = TableStorage
sourceimpl Debug for CollisionLayers
impl Debug for CollisionLayers
sourceimpl Default for CollisionLayers
impl Default for CollisionLayers
sourceimpl GetTypeRegistration for CollisionLayers
impl GetTypeRegistration for CollisionLayers
fn get_type_registration() -> TypeRegistration
sourceimpl PartialEq<CollisionLayers> for CollisionLayers
impl PartialEq<CollisionLayers> for CollisionLayers
sourcefn eq(&self, other: &CollisionLayers) -> bool
fn eq(&self, other: &CollisionLayers) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &CollisionLayers) -> bool
fn ne(&self, other: &CollisionLayers) -> bool
This method tests for !=
.
sourceimpl Reflect for CollisionLayers
impl Reflect for CollisionLayers
sourcefn any_mut(&mut self) -> &mut dyn Any
fn any_mut(&mut self) -> &mut dyn Any
Returns the value as a &mut dyn Any
.
sourcefn clone_value(&self) -> Box<dyn Reflect>
fn clone_value(&self) -> Box<dyn Reflect>
Clones the value as a Reflect
trait object. Read more
sourcefn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
Performs a type-checked assignment of a reflected value to this value. Read more
sourcefn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Returns an enumeration of “kinds” of type. Read more
sourcefn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Returns a mutable enumeration of “kinds” of type. Read more
sourcefn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
Returns a serializable version of the value. Read more
sourcefn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Returns a hash of the value (which includes the type). Read more
sourcefn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>
Returns a “partial equality” comparison result. Read more
sourceimpl Struct for CollisionLayers
impl Struct for CollisionLayers
sourcefn field(&self, name: &str) -> Option<&dyn Reflect>
fn field(&self, name: &str) -> Option<&dyn Reflect>
Returns a reference to the value of the field named name
as a &dyn Reflect
. Read more
sourcefn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
Returns a mutable reference to the value of the field named name
as a
&mut dyn Reflect
. Read more
sourcefn field_at(&self, index: usize) -> Option<&dyn Reflect>
fn field_at(&self, index: usize) -> Option<&dyn Reflect>
Returns a reference to the value of the field with index index
as a
&dyn Reflect
. Read more
sourcefn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
Returns a mutable reference to the value of the field with index index
as a &mut dyn Reflect
. Read more
sourcefn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
Returns the name of the field with index index
.
sourcefn iter_fields(&self) -> FieldIter<'_>
fn iter_fields(&self) -> FieldIter<'_>
Returns an iterator over the values of the struct’s fields.
sourcefn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
Clones the struct into a [DynamicStruct
].
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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
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>
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
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
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
fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
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
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
impl<T> FromWorld for T where
T: Default,
impl<T> FromWorld for T where
T: Default,
fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using data from the given [World]
impl<S> GetField for S where
S: Struct,
impl<S> GetField for S where
S: Struct,
fn get_field<T>(&self, name: &str) -> Option<&T> where
T: Reflect,
fn get_field<T>(&self, name: &str) -> Option<&T> where
T: Reflect,
Returns a reference to the value of the field named name
, downcast to
T
. Read more
fn get_field_mut<T>(&mut self, name: &str) -> Option<&mut T> where
T: Reflect,
fn get_field_mut<T>(&mut self, name: &str) -> Option<&mut T> where
T: Reflect,
Returns a mutable reference to the value of the field named name
,
downcast to T
. Read more
impl<T> GetPath for T where
T: Reflect,
impl<T> GetPath for T where
T: Reflect,
fn path(
&'r self,
path: &'p str
) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
fn path(
&'r self,
path: &'p str
) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
Returns a reference to the value specified by path
. Read more
fn path_mut(
&'r mut self,
path: &'p str
) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn path_mut(
&'r mut self,
path: &'p str
) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
Returns a mutable reference to the value specified by path
. Read more
fn get_path<T>(&'r self, path: &'p str) -> Result<&'r T, ReflectPathError<'p>> where
T: Reflect,
fn get_path<T>(&'r self, path: &'p str) -> Result<&'r T, ReflectPathError<'p>> where
T: Reflect,
Returns a statically typed reference to the value specified by path
.
fn get_path_mut<T>(
&'r mut self,
path: &'p str
) -> Result<&'r mut T, ReflectPathError<'p>> where
T: Reflect,
fn get_path_mut<T>(
&'r mut self,
path: &'p str
) -> Result<&'r mut T, ReflectPathError<'p>> where
T: Reflect,
Returns a statically typed mutable reference to the value specified by
path
. Read more
sourceimpl<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>
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
impl<T> TypeData for T where
T: 'static + Send + Sync + Clone,
impl<T> TypeData for T where
T: 'static + Send + Sync + Clone,
fn clone_type_data(&self) -> Box<dyn TypeData + 'static, Global>
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more