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()
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 layers
The entity,will interacts with everything (except the entities that interact with nothing)
pub 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
fn type_name(&self) -> &str
fn any(&self) -> &dyn Any
fn any_mut(&mut self) -> &mut dyn Any
fn clone_value(&self) -> Box<dyn Reflect>
fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>
fn apply(&mut self, value: &dyn Reflect)
fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
sourcefn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
Returns a serializable value, if serialization is supported. Otherwise None
will be
returned. Read more
sourcefn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Returns a hash of the value (which includes the type) if hashing is supported. Otherwise
None
will be returned. 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 equal” comparison result if comparison is supported. Otherwise None
will be returned. Read more
sourceimpl Struct for CollisionLayers
impl Struct for CollisionLayers
fn field(&self, name: &str) -> Option<&dyn Reflect>
fn field_mut(&mut self, name: &str) -> Option<&mut dyn Reflect>
fn field_at(&self, index: usize) -> Option<&dyn Reflect>
fn field_at_mut(&mut self, index: usize) -> Option<&mut dyn Reflect>
fn name_at(&self, index: usize) -> Option<&str>
fn field_len(&self) -> usize
fn iter_fields(&self) -> FieldIter<'_>
fn clone_dynamic(&self) -> 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 · sourcepub fn borrow_mut(&mut self) -> &mut T
pub 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,
pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
pub 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
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
pub fn as_any(&self) -> &(dyn Any + 'static)
pub 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
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
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,
sourcepub fn equivalent(&self, key: &K) -> bool
pub 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,
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> GetPath for T where
T: Reflect,
impl<T> GetPath for T where
T: Reflect,
pub fn path(
&'r self,
path: &'p str
) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
pub fn path_mut(
&'r mut self,
path: &'p str
) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn get_path<T>(&'r self, path: &'p str) -> Result<&'r 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,
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.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub 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,
pub 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>,
pub 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