pub struct On<'w, 't, E: EventPattern> { /* private fields */ }Expand description
A system parameter used by an observer to process events. See Observer and Event for examples.
On contains the triggered Event data for a given run of an Observer. It also provides access to the
Trigger, which for things like EntityEvent with a PropagateEntityTrigger,
includes control over event propagation.
Implementations§
Source§impl<'w, 't, E: EventPattern> On<'w, 't, E>
impl<'w, 't, E: EventPattern> On<'w, 't, E>
Sourcepub fn new(
event: &'w mut E::Event,
observer: Entity,
trigger: &'w mut EventPatternTrigger<'t, E>,
trigger_context: &'w TriggerContext,
) -> Self
pub fn new( event: &'w mut E::Event, observer: Entity, trigger: &'w mut EventPatternTrigger<'t, E>, trigger_context: &'w TriggerContext, ) -> Self
Creates a new instance of On for the given triggered event.
Sourcepub fn event_mut(&mut self) -> &mut E::Event
pub fn event_mut(&mut self) -> &mut E::Event
Returns a mutable reference to the triggered event.
Sourcepub fn trigger(&self) -> &EventPatternTrigger<'t, E>
pub fn trigger(&self) -> &EventPatternTrigger<'t, E>
Returns the Trigger context for this event.
Sourcepub fn trigger_mut(&mut self) -> &mut EventPatternTrigger<'t, E>
pub fn trigger_mut(&mut self) -> &mut EventPatternTrigger<'t, E>
Returns the mutable Trigger context for this event.
Sourcepub fn observer(&self) -> Entity
pub fn observer(&self) -> Entity
Returns the Entity of the Observer of the triggered event.
This allows you to despawn the observer, ceasing observation.
§Examples
#[derive(EntityEvent)]
struct AssertEvent {
entity: Entity,
}
fn assert_observer(event: On<AssertEvent>) {
assert_eq!(event.observer(), event.entity);
}
let mut world = World::new();
let entity = world.spawn(Observer::new(assert_observer)).id();
world.trigger(AssertEvent { entity }); Sourcepub fn caller(&self) -> MaybeLocation
pub fn caller(&self) -> MaybeLocation
Returns the source code location that triggered this observer, if the track_location cargo feature is enabled.
Source§impl<'w, 't, const AUTO_PROPAGATE: bool, E, T> On<'w, 't, E>where
E: EventPattern<Event: EntityEvent<Trigger<'t> = PropagateEntityTrigger<AUTO_PROPAGATE, E::Event, T>>>,
T: Traversal<E::Event>,
impl<'w, 't, const AUTO_PROPAGATE: bool, E, T> On<'w, 't, E>where
E: EventPattern<Event: EntityEvent<Trigger<'t> = PropagateEntityTrigger<AUTO_PROPAGATE, E::Event, T>>>,
T: Traversal<E::Event>,
Sourcepub fn original_event_target(&self) -> Entity
pub fn original_event_target(&self) -> Entity
Returns the original Entity that this EntityEvent targeted via EntityEvent::event_target when it was first triggered,
prior to any propagation logic.
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 EntityEvent will propagate along is specified by the Traversal component defined in PropagateEntityTrigger.
EntityEvent does not propagate by default. To enable propagation, you must:
- Enable propagation in
EntityEventusing#[entity_event(propagate)]. SeeEntityEventfor details. - Either call
propagate(true)in the first observer or in theEntityEventderive add#[entity_event(auto_propagate)].
You can prevent an event from propagating further using propagate(false). This will prevent the event from triggering on the next
Entity in the Traversal, but note that all remaining observers for the current entity will still run.
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.
Trait Implementations§
Source§impl<'w, 't, E: EventPattern> Deref for On<'w, 't, E>
impl<'w, 't, E: EventPattern> Deref for On<'w, 't, E>
Source§impl<'w, 't, E: EventPattern> DerefMut for On<'w, 't, E>
impl<'w, 't, E: EventPattern> DerefMut for On<'w, 't, E>
Source§impl<E: EventPattern> SystemInput for On<'_, '_, E>
Used for ObserverSystems.
impl<E: EventPattern> SystemInput for On<'_, '_, E>
Used for ObserverSystems.
Source§type Param<'i> = On<'i, 'i, E>
type Param<'i> = On<'i, 'i, E>
FunctionSystems.Source§type Inner<'i> = On<'i, 'i, E>
type Inner<'i> = On<'i, 'i, E>
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, 't, E> !UnwindSafe for On<'w, 't, E>
impl<'w, 't, E> Freeze for On<'w, 't, E>
impl<'w, 't, E> RefUnwindSafe for On<'w, 't, E>where
<E as EventPattern>::Event: RefUnwindSafe,
<<E as EventPattern>::Event as Event>::Trigger<'t>: RefUnwindSafe,
impl<'w, 't, E> Send for On<'w, 't, E>
impl<'w, 't, E> Sync for On<'w, 't, E>
impl<'w, 't, E> Unpin for On<'w, 't, E>
impl<'w, 't, E> UnsafeUnpin for On<'w, 't, E>
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
impl<T> ConditionalSend for Twhere
T: Send,
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.