pub struct ReactCommands<'w, 's> { /* private fields */ }
Expand description
Struct that drives reactivity.
Obtained via Commands::react
.
Note that each time you register a reactor, it is assigned a unique system state (including unique Local
s). To avoid
leaking memory, be sure to revoke reactors when you are done with them.
All react command operations are deferred.
Implementations§
Source§impl<'w, 's> ReactCommands<'w, 's>
impl<'w, 's> ReactCommands<'w, 's>
Sourcepub fn commands(&mut self) -> Commands<'_, '_>
pub fn commands(&mut self) -> Commands<'_, '_>
Returns a reborrow of the internal Commands
with a shorter lifetime.
Sourcepub fn reborrow(&mut self) -> ReactCommands<'_, '_>
pub fn reborrow(&mut self) -> ReactCommands<'_, '_>
Returns a reborrow of self
with a shorter lifetime.
Sourcepub fn insert<C: ReactComponent>(&mut self, entity: Entity, component: C)
pub fn insert<C: ReactComponent>(&mut self, entity: Entity, component: C)
Inserts a ReactComponent
to the specified entity. It can be queried with React<C>
.
- Does nothing if the entity does not exist.
Sourcepub fn broadcast<E: Send + Sync + 'static>(&mut self, event: E)
pub fn broadcast<E: Send + Sync + 'static>(&mut self, event: E)
Sends a broadcasted event.
- Reactors can listen for the event with the
broadcast()
trigger. - Reactors can read the event with the
BroadcastEvent
system parameter.
Sourcepub fn entity_event<E: Send + Sync + 'static>(
&mut self,
entity: Entity,
event: E,
)
pub fn entity_event<E: Send + Sync + 'static>( &mut self, entity: Entity, event: E, )
Sends an entity-targeted event.
- Reactors can listen for the event with the
entity_event()
trigger. - Reactors can read the event with the
EntityEvent
system parameter.
Sourcepub fn trigger_resource_mutation<R: ReactResource + Send + Sync + 'static>(
&mut self,
)
pub fn trigger_resource_mutation<R: ReactResource + Send + Sync + 'static>( &mut self, )
Triggers resource mutation reactions.
Useful for initializing state after a reactor is registered.
Sourcepub fn revoke(&mut self, token: RevokeToken)
pub fn revoke(&mut self, token: RevokeToken)
Revokes a reactor.
Sourcepub fn on<M>(
&mut self,
triggers: impl ReactionTriggerBundle,
reactor: impl IntoSystem<(), (), M> + Send + Sync + 'static,
)
pub fn on<M>( &mut self, triggers: impl ReactionTriggerBundle, reactor: impl IntoSystem<(), (), M> + Send + Sync + 'static, )
Registers a reactor triggered by ECS changes.
You can tie a reactor to multiple reaction triggers. Duplicate triggers will be ignored.
Reactions are not merged together. If you register a reactor for triggers
(resource_mutation::<A>(), resource_mutation::<B>())
, then mutate A
and B
in succession, the reactor will
execute twice.
Uses ReactorMode::Cleanup
.
Example:
rcommands.on((resource_mutation::<MyRes>(), mutation::<MyComponent>()), my_reactor_system);
Sourcepub fn on_persistent<M>(
&mut self,
triggers: impl ReactionTriggerBundle,
reactor: impl IntoSystem<(), (), M> + Send + Sync + 'static,
) -> SystemCommand
pub fn on_persistent<M>( &mut self, triggers: impl ReactionTriggerBundle, reactor: impl IntoSystem<(), (), M> + Send + Sync + 'static, ) -> SystemCommand
Registers a reactor triggered by ECS changes using ReactorMode::Persistent
.
See Self::on
.
Sourcepub fn on_revokable<M>(
&mut self,
triggers: impl ReactionTriggerBundle,
reactor: impl IntoSystem<(), (), M> + Send + Sync + 'static,
) -> RevokeToken
pub fn on_revokable<M>( &mut self, triggers: impl ReactionTriggerBundle, reactor: impl IntoSystem<(), (), M> + Send + Sync + 'static, ) -> RevokeToken
Registers a reactor triggered by ECS changes using ReactorMode::Revokable
.
See Self::on
.
Sourcepub fn with(
&mut self,
triggers: impl ReactionTriggerBundle,
sys_command: SystemCommand,
mode: ReactorMode,
) -> Option<RevokeToken>
pub fn with( &mut self, triggers: impl ReactionTriggerBundle, sys_command: SystemCommand, mode: ReactorMode, ) -> Option<RevokeToken>
Registers a reactor triggered by ECS changes with a SystemCommand
and ReactorMode
.
You can tie a reactor to multiple reaction triggers. Duplicate triggers will be ignored.
Reactions are not merged together. If you register a reactor for triggers
(resource_mutation::<A>(), resource_mutation::<B>())
, then mutate A
and B
in succession, the reactor will
execute twice.
Note that you can call this method multiple times for the same SystemCommand
to add triggers.
It is highly recommended to use ReactorMode::Persistent
in that case, otherwise your
reactor may be despawned unexpectedly if a despawn()
trigger is used or if you try to revoke any
RevokeTokens
associated with the reactor.
Returns None
unless ReactorMode::Revokable
is used.
Example:
let command = commands.spawn_system_command(my_reactor_system);
let mode = ReactorMode::Persistent;
commands.react().with((resource_mutation::<MyRes>(), mutation::<MyComponent>()), command, mode);
Sourcepub fn once<M, S: IntoSystem<(), (), M> + Send + Sync + 'static>(
&mut self,
triggers: impl ReactionTriggerBundle,
reactor: S,
) -> RevokeToken
pub fn once<M, S: IntoSystem<(), (), M> + Send + Sync + 'static>( &mut self, triggers: impl ReactionTriggerBundle, reactor: S, ) -> RevokeToken
Registers a one-off reactor triggered by ECS changes.
Similar to Self::on_revokable
except the reaction will run exactly once then get cleaned up.
If an empty trigger bundle is used then the system will be dropped without running.
Example:
// The reactor will run on the first mutation of either MyRes or MyComponent.
rcommands.once((resource_mutation::<MyRes>(), mutation::<MyComponent>()), my_reactor_system);
Auto Trait Implementations§
impl<'w, 's> Freeze for ReactCommands<'w, 's>
impl<'w, 's> RefUnwindSafe for ReactCommands<'w, 's>
impl<'w, 's> Send for ReactCommands<'w, 's>
impl<'w, 's> Sync for ReactCommands<'w, 's>
impl<'w, 's> Unpin for ReactCommands<'w, 's>
impl<'w, 's> !UnwindSafe for ReactCommands<'w, 's>
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>
. 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