Struct SequentialActionsPlugin

Source
pub struct SequentialActionsPlugin;
Expand description

The Plugin for this library that you can add to your App.

This plugin adds the check_actions system to the Last schedule for action queue advancement, and also two hooks for cleaning up actions from despawned agents.

Finally, it also contains various static methods for modifying the action queue.

Implementations§

Source§

impl SequentialActionsPlugin

Source

pub fn check_actions<F: QueryFilter>( action_q: Query<'_, '_, (Entity, &CurrentAction), F>, world: &World, commands: Commands<'_, '_>, )

The System used by SequentialActionsPlugin. It is responsible for checking all agents for finished actions and advancing the action queue.

The query filter F is used for filtering agents. Use the unit type () for no filtering.

§Example
App::new()
    .add_systems(Last, SequentialActionsPlugin::check_actions::<()>)
    .run();
Source

pub fn add_action( agent: Entity, config: AddConfig, action: impl IntoBoxedAction, world: &mut World, )

Adds a single action to agent with specified config.

Source

pub fn add_actions<I>( agent: Entity, config: AddConfig, actions: I, world: &mut World, )

Adds a collection of actions to agent with specified config. An empty collection does nothing.

Source

pub fn execute_actions(agent: Entity, world: &mut World)

Starts the next action in the queue for agent, but only if there is no current action.

Source

pub fn stop_current_action(agent: Entity, reason: StopReason, world: &mut World)

Stops the current action for agent with specified reason.

Examples found in repository?
examples/custom.rs (line 162)
145    fn check_actions_exclusive(
146        world: &mut World,
147        mut finished: Local<Vec<Entity>>,
148        mut agent_q: Local<QueryState<(Entity, &CurrentAction), F>>,
149    ) {
150        // Collect all agents with finished action
151        finished.extend(agent_q.iter(world).filter_map(|(agent, current_action)| {
152            current_action
153                .as_ref()
154                .and_then(|action| action.is_finished(agent, world).then_some(agent))
155        }));
156
157        // Do something with the finished list if you want.
158        // Perhaps sort by some identifier for deterministic behavior.
159
160        // Advance the action queue
161        for agent in finished.drain(..) {
162            SequentialActionsPlugin::stop_current_action(agent, StopReason::Finished, world);
163            SequentialActionsPlugin::start_next_action(agent, world);
164        }
165    }
Source

pub fn start_next_action(agent: Entity, world: &mut World)

Starts the next action in the queue for agent.

This will loop until any next action is not immediately finished or the queue is empty. Since this may trigger an infinite loop, a counter is used in debug build that panics when reaching a sufficient target.

The loop will also break if agent already has a current action. This is likely a user error, and so a warning will be emitted.

Examples found in repository?
examples/custom.rs (line 163)
145    fn check_actions_exclusive(
146        world: &mut World,
147        mut finished: Local<Vec<Entity>>,
148        mut agent_q: Local<QueryState<(Entity, &CurrentAction), F>>,
149    ) {
150        // Collect all agents with finished action
151        finished.extend(agent_q.iter(world).filter_map(|(agent, current_action)| {
152            current_action
153                .as_ref()
154                .and_then(|action| action.is_finished(agent, world).then_some(agent))
155        }));
156
157        // Do something with the finished list if you want.
158        // Perhaps sort by some identifier for deterministic behavior.
159
160        // Advance the action queue
161        for agent in finished.drain(..) {
162            SequentialActionsPlugin::stop_current_action(agent, StopReason::Finished, world);
163            SequentialActionsPlugin::start_next_action(agent, world);
164        }
165    }
Source

pub fn skip_actions(agent: Entity, n: usize, world: &mut World)

Skips the next n actions in the queue for agent.

Source

pub fn clear_actions(agent: Entity, world: &mut World)

Clears the action queue for agent.

Current action is stopped as canceled.

Trait Implementations§

Source§

impl Plugin for SequentialActionsPlugin

Source§

fn build(&self, app: &mut App)

Configures the App to which this plugin is added.
Source§

fn ready(&self, _app: &App) -> bool

Has the plugin finished its setup? This can be useful for plugins that need something asynchronous to happen before they can finish their setup, like the initialization of a renderer. Once the plugin is ready, finish should be called.
Source§

fn finish(&self, _app: &mut App)

Finish adding this plugin to the App, once all plugins registered are ready. This can be useful for plugins that depends on another plugin asynchronous setup, like the renderer.
Source§

fn cleanup(&self, _app: &mut App)

Runs after all plugins are built and finished, but before the app schedule is executed. This can be useful if you have some resource that other plugins need during their build step, but after build you want to remove it and send it to another thread.
Source§

fn name(&self) -> &str

Configures a name for the Plugin which is primarily used for checking plugin uniqueness and debugging.
Source§

fn is_unique(&self) -> bool

If the plugin can be meaningfully instantiated several times in an App, override this method to return false.

Auto Trait Implementations§

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>

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

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

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

Converts &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> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<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, 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<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,

Source§

impl<Marker, T> Plugins<Marker> for T
where T: Plugins<Marker>,