pub struct Trigger<'w, E, B = ()>where
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> Trigger<'w, E, B>where
B: Bundle,
impl<'w, E, B> Trigger<'w, E, B>where
B: Bundle,
sourcepub fn new(
event: &'w mut E,
propagate: &'w mut bool,
trigger: ObserverTrigger,
) -> Trigger<'w, E, B>
pub fn new( event: &'w mut E, propagate: &'w mut bool, trigger: ObserverTrigger, ) -> Trigger<'w, E, B>
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 entity(&self) -> Entity
pub fn entity(&self) -> Entity
Returns the Entity
that triggered the observer, could be Entity::PLACEHOLDER
.
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.
Trait Implementations§
source§impl<E, B> SystemInput for Trigger<'_, E, B>where
E: 'static,
B: Bundle,
impl<E, B> SystemInput for Trigger<'_, E, B>where
E: 'static,
B: Bundle,
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: <Trigger<'_, E, B> as SystemInput>::Inner<'_>,
) -> <Trigger<'_, E, B> as SystemInput>::Param<'_>
fn wrap( this: <Trigger<'_, E, B> as SystemInput>::Inner<'_>, ) -> <Trigger<'_, E, B> as SystemInput>::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, C, D> Curve<T> for D
impl<T, C, D> Curve<T> for D
source§fn sample_unchecked(&self, t: f32) -> T
fn sample_unchecked(&self, t: f32) -> T
t
, extracting the associated value.
This is the unchecked version of sampling, which should only be used if the sample time t
is already known to lie within the curve’s domain. Read moresource§fn sample(&self, t: f32) -> Option<T>
fn sample(&self, t: f32) -> Option<T>
t
, returning None
if the point is
outside of the curve’s domain.source§fn sample_clamped(&self, t: f32) -> T
fn sample_clamped(&self, t: f32) -> T
t
, clamping t
to lie inside the
domain of the curve.source§fn sample_iter(
&self,
iter: impl IntoIterator<Item = f32>,
) -> impl Iterator<Item = Option<T>>where
Self: Sized,
fn sample_iter(
&self,
iter: impl IntoIterator<Item = f32>,
) -> impl Iterator<Item = Option<T>>where
Self: Sized,
n >= 0
points on this curve at the parameter values t_n
,
returning None
if the point is outside of the curve’s domain. Read moresource§fn sample_iter_unchecked(
&self,
iter: impl IntoIterator<Item = f32>,
) -> impl Iterator<Item = T>where
Self: Sized,
fn sample_iter_unchecked(
&self,
iter: impl IntoIterator<Item = f32>,
) -> impl Iterator<Item = T>where
Self: Sized,
n >= 0
points on this curve at the parameter values t_n
,
extracting the associated values. This is the unchecked version of sampling, which should
only be used if the sample times t_n
are already known to lie within the curve’s domain. Read moresource§fn sample_iter_clamped(
&self,
iter: impl IntoIterator<Item = f32>,
) -> impl Iterator<Item = T>where
Self: Sized,
fn sample_iter_clamped(
&self,
iter: impl IntoIterator<Item = f32>,
) -> impl Iterator<Item = T>where
Self: Sized,
n >= 0
points on this curve at the parameter values t_n
,
clamping t_n
to lie inside the domain of the curve. Read moresource§fn map<S, F>(self, f: F) -> MapCurve<T, S, Self, F>
fn map<S, F>(self, f: F) -> MapCurve<T, S, Self, F>
f
; i.e., if the
sample at time t
for this curve is x
, the value at time t
on the new curve will be
f(x)
.source§fn reparametrize<F>(self, domain: Interval, f: F) -> ReparamCurve<T, Self, F>
fn reparametrize<F>(self, domain: Interval, f: F) -> ReparamCurve<T, Self, F>
Curve
whose parameter space is related to the parameter space of this curve
by f
. For each time t
, the sample from the new curve at time t
is the sample from
this curve at time f(t)
. The given domain
will be the domain of the new curve. The
function f
is expected to take domain
into self.domain()
. Read moresource§fn reparametrize_linear(
self,
domain: Interval,
) -> Result<LinearReparamCurve<T, Self>, LinearReparamError>where
Self: Sized,
fn reparametrize_linear(
self,
domain: Interval,
) -> Result<LinearReparamCurve<T, Self>, LinearReparamError>where
Self: Sized,
Curve
, producing a new curve whose domain is the given
domain
instead of the current one. This operation is only valid for curves with bounded
domains; if either this curve’s domain or the given domain
is unbounded, an error is
returned.source§fn reparametrize_by_curve<C>(self, other: C) -> CurveReparamCurve<T, Self, C>
fn reparametrize_by_curve<C>(self, other: C) -> CurveReparamCurve<T, Self, C>
source§fn graph(self) -> GraphCurve<T, Self>where
Self: Sized,
fn graph(self) -> GraphCurve<T, Self>where
Self: Sized,
source§fn chain<C>(self, other: C) -> Result<ChainCurve<T, Self, C>, ChainError>
fn chain<C>(self, other: C) -> Result<ChainCurve<T, Self, C>, ChainError>
source§fn reverse(self) -> Result<ReverseCurve<T, Self>, ReverseError>where
Self: Sized,
fn reverse(self) -> Result<ReverseCurve<T, Self>, ReverseError>where
Self: Sized,
source§fn repeat(self, count: usize) -> Result<RepeatCurve<T, Self>, RepeatError>where
Self: Sized,
fn repeat(self, count: usize) -> Result<RepeatCurve<T, Self>, RepeatError>where
Self: Sized,
source§fn forever(self) -> Result<ForeverCurve<T, Self>, RepeatError>where
Self: Sized,
fn forever(self) -> Result<ForeverCurve<T, Self>, RepeatError>where
Self: Sized,
source§fn ping_pong(self) -> Result<PingPongCurve<T, Self>, PingPongError>where
Self: Sized,
fn ping_pong(self) -> Result<PingPongCurve<T, Self>, PingPongError>where
Self: Sized,
source§fn chain_continue<C>(
self,
other: C,
) -> Result<ContinuationCurve<T, Self, C>, ChainError>
fn chain_continue<C>( self, other: C, ) -> Result<ContinuationCurve<T, Self, C>, ChainError>
source§fn resample<I>(
&self,
segments: usize,
interpolation: I,
) -> Result<SampleCurve<T, I>, ResamplingError>
fn resample<I>( &self, segments: usize, interpolation: I, ) -> Result<SampleCurve<T, I>, ResamplingError>
Curve
to produce a new one that is defined by interpolation over equally
spaced sample values, using the provided interpolation
to interpolate between adjacent samples.
The curve is interpolated on segments
segments between samples. For example, if segments
is 1,
only the start and end points of the curve are used as samples; if segments
is 2, a sample at
the midpoint is taken as well, and so on. If segments
is zero, or if this curve has an unbounded
domain, then a ResamplingError
is returned. Read moresource§fn resample_auto(
&self,
segments: usize,
) -> Result<SampleAutoCurve<T>, ResamplingError>where
Self: Sized,
T: StableInterpolate,
fn resample_auto(
&self,
segments: usize,
) -> Result<SampleAutoCurve<T>, ResamplingError>where
Self: Sized,
T: StableInterpolate,
Curve
to produce a new one that is defined by interpolation over equally
spaced sample values, using automatic interpolation to interpolate between adjacent samples.
The curve is interpolated on segments
segments between samples. For example, if segments
is 1,
only the start and end points of the curve are used as samples; if segments
is 2, a sample at
the midpoint is taken as well, and so on. If segments
is zero, or if this curve has an unbounded
domain, then a ResamplingError
is returned.source§fn samples(
&self,
samples: usize,
) -> Result<impl Iterator<Item = T>, ResamplingError>where
Self: Sized,
fn samples(
&self,
samples: usize,
) -> Result<impl Iterator<Item = T>, ResamplingError>where
Self: Sized,
samples
is less than 2
or if this curve has unbounded domain, then an error is returned instead.source§fn resample_uneven<I>(
&self,
sample_times: impl IntoIterator<Item = f32>,
interpolation: I,
) -> Result<UnevenSampleCurve<T, I>, ResamplingError>
fn resample_uneven<I>( &self, sample_times: impl IntoIterator<Item = f32>, interpolation: I, ) -> Result<UnevenSampleCurve<T, I>, ResamplingError>
source§fn resample_uneven_auto(
&self,
sample_times: impl IntoIterator<Item = f32>,
) -> Result<UnevenSampleAutoCurve<T>, ResamplingError>where
Self: Sized,
T: StableInterpolate,
fn resample_uneven_auto(
&self,
sample_times: impl IntoIterator<Item = f32>,
) -> Result<UnevenSampleAutoCurve<T>, ResamplingError>where
Self: Sized,
T: StableInterpolate,
Curve
to produce a new one that is defined by automatic interpolation over
samples taken at the given set of times. The given sample_times
are expected to contain at least
two valid times within the curve’s domain interval. Read moresource§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>
. Box<dyn Any>
can
then be further downcast
into Box<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>
. Rc<Any>
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.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more