pub struct Trigger<'w, E, B: Bundle = ()> { /* private fields */ }
Expand description
Type containing triggered Event
information for a given run of an Observer
. This contains the
Event
data itself. If it was triggered for a specific Entity
, it includes that as well. It also
contains event propagation information. See Trigger::propagate
for more information.
Implementations§
Source§impl<'w, E, B: Bundle> Trigger<'w, E, B>
impl<'w, E, B: Bundle> Trigger<'w, E, B>
Sourcepub fn new(
event: &'w mut E,
propagate: &'w mut bool,
trigger: ObserverTrigger,
) -> Self
pub fn new( event: &'w mut E, propagate: &'w mut bool, trigger: ObserverTrigger, ) -> Self
Creates a new trigger for the given event and observer information.
Sourcepub fn event_type(&self) -> ComponentId
pub fn event_type(&self) -> ComponentId
Returns the event type of this trigger.
Sourcepub fn target(&self) -> Entity
pub fn target(&self) -> Entity
Returns the Entity
that was targeted by the event
that triggered this observer. It may
be Entity::PLACEHOLDER
.
Observable events can target specific entities. When those events fire, they will trigger
any observers on the targeted entities. In this case, the target()
and observer()
are
the same, because the observer that was triggered is attached to the entity that was
targeted by the event.
However, it is also possible for those events to bubble up the entity hierarchy and trigger observers on different entities, or trigger a global observer. In these cases, the observing entity is different from the entity being targeted by the event.
This is an important distinction: the entity reacting to an event is not always the same as the entity triggered by the event.
Sourcepub fn components(&self) -> &[ComponentId]
pub fn components(&self) -> &[ComponentId]
Returns the components that triggered the observer, out of the
components defined in B
. Does not necessarily include all of them as
B
acts like an OR
filter rather than an AND
filter.
Sourcepub fn observer(&self) -> Entity
pub fn observer(&self) -> Entity
Returns the Entity
that observed the triggered event.
This allows you to despawn the observer, ceasing observation.
§Examples
/// Handle `MyEvent` and if it is done, stop observation.
fn my_observer(trigger: Trigger<MyEvent>, mut commands: Commands) {
if trigger.event().done {
commands.entity(trigger.observer()).despawn();
return;
}
// ...
}
Sourcepub fn propagate(&mut self, should_propagate: bool)
pub fn propagate(&mut self, should_propagate: bool)
Enables or disables event propagation, allowing the same event to trigger observers on a chain of different entities.
The path an event will propagate along is specified by its associated Traversal
component. By default, events
use ()
which ends the path immediately and prevents propagation.
To enable propagation, you must:
- Set
Event::Traversal
to the component you want to propagate along. - Either call
propagate(true)
in the first observer or setEvent::AUTO_PROPAGATE
totrue
.
You can prevent an event from propagating further using propagate(false)
.
Sourcepub fn get_propagate(&self) -> bool
pub fn get_propagate(&self) -> bool
Returns the value of the flag that controls event propagation. See propagate
for more information.
Sourcepub fn caller(&self) -> MaybeLocation
pub fn caller(&self) -> MaybeLocation
Returns the source code location that triggered this observer.
Trait Implementations§
Source§impl<E: 'static, B: Bundle> SystemInput for Trigger<'_, E, B>
Used for ObserverSystem
s.
impl<E: 'static, B: Bundle> SystemInput for Trigger<'_, E, B>
Used for ObserverSystem
s.
Source§type Param<'i> = Trigger<'i, E, B>
type Param<'i> = Trigger<'i, E, B>
FunctionSystem
s.Source§type Inner<'i> = Trigger<'i, E, B>
type Inner<'i> = Trigger<'i, E, B>
System::run
.Source§fn wrap(this: Self::Inner<'_>) -> Self::Param<'_>
fn wrap(this: Self::Inner<'_>) -> Self::Param<'_>
SystemInput::Inner
into a SystemInput::Param
.Auto Trait Implementations§
impl<'w, E, B> Freeze for Trigger<'w, E, B>
impl<'w, E, B> RefUnwindSafe for Trigger<'w, E, B>where
E: RefUnwindSafe,
B: RefUnwindSafe,
impl<'w, E, B> Send for Trigger<'w, E, B>where
E: Send,
impl<'w, E, B> Sync for Trigger<'w, E, B>where
E: Sync,
impl<'w, E, B> Unpin for Trigger<'w, E, B>where
B: Unpin,
impl<'w, E, B = ()> !UnwindSafe for Trigger<'w, E, B>
Blanket Implementations§
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> 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>
, which can then be
downcast
into Box<dyn 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>
, which 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.