bevy_cobweb::react

Struct ReactCommands

Source
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 Locals). 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>

Source

pub fn commands(&mut self) -> Commands<'_, '_>

Returns a reborrow of the internal Commands with a shorter lifetime.

Source

pub fn reborrow(&mut self) -> ReactCommands<'_, '_>

Returns a reborrow of self with a shorter lifetime.

Source

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.
Source

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.
Source

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.
Source

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.

Source

pub fn revoke(&mut self, token: RevokeToken)

Revokes a reactor.

Source

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);
Source

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.

Source

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.

Source

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);
Source

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

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.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize = _

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ConditionalSend for T
where T: Send,