pub struct StateMachine { /* private fields */ }Expand description
State machine component.
Entities with this component will have components (the states) added
and removed based on the transitions that you add. Build one with StateMachine::default,
StateMachine::trans, and other methods.
Implementations§
Source§impl StateMachine
impl StateMachine
Sourcepub fn with_state<S: Clone + Component>(self) -> Self
pub fn with_state<S: Clone + Component>(self) -> Self
Registers a state. This is only necessary for states that are not used in any transitions.
Sourcepub fn trans<S: EntityState, Marker>(
self,
trigger: impl IntoTrigger<Marker>,
state: impl Clone + Component,
) -> Self
pub fn trans<S: EntityState, Marker>( self, trigger: impl IntoTrigger<Marker>, state: impl Clone + Component, ) -> Self
Adds a transition to the state machine. When the entity is in the state given as a
type parameter, and the given trigger occurs, it will transition to the state given as a
function parameter. Elide the Marker type parameter with _. Transitions have priority
in the order they are added.
Sourcepub fn trans_builder<Prev: EntityState, Trig: IntoTrigger<TrigMarker>, Next: Clone + Component, TrigMarker, BuildMarker>(
self,
trigger: Trig,
builder: impl IntoSystem<Trans<Prev, <<Trig::Trigger as EntityTrigger>::Out as TriggerOut>::Ok>, Next, BuildMarker>,
) -> Self
pub fn trans_builder<Prev: EntityState, Trig: IntoTrigger<TrigMarker>, Next: Clone + Component, TrigMarker, BuildMarker>( self, trigger: Trig, builder: impl IntoSystem<Trans<Prev, <<Trig::Trigger as EntityTrigger>::Out as TriggerOut>::Ok>, Next, BuildMarker>, ) -> Self
Adds a transition builder to the state machine. When the entity is in Prev state, and
Trig occurs, the given builder will be run on Trig::Ok. If the builder returns
Some(Next), the machine will transition to that Next state.
Sourcepub fn on_enter_to<Prev: EntityState, Next: EntityState>(
self,
on_enter: impl 'static + Fn(&mut EntityCommands<'_>) + Send + Sync,
) -> Self
pub fn on_enter_to<Prev: EntityState, Next: EntityState>( self, on_enter: impl 'static + Fn(&mut EntityCommands<'_>) + Send + Sync, ) -> Self
Adds an on-enter event to the state machine. Whenever the state machine transitions from the given previous state to the given next state, it will run the event.
Sourcepub fn on_enter<Next: EntityState>(
self,
on_enter: impl 'static + Fn(&mut EntityCommands<'_>) + Send + Sync,
) -> Self
pub fn on_enter<Next: EntityState>( self, on_enter: impl 'static + Fn(&mut EntityCommands<'_>) + Send + Sync, ) -> Self
Adds an on-enter event to the state machine. Whenever the state machine transitions from any previous state to the given next state, it will run the event.
Sourcepub fn on_exit_from<Prev: EntityState, Next: EntityState>(
self,
on_exit: impl 'static + Fn(&mut EntityCommands<'_>) + Send + Sync,
) -> Self
pub fn on_exit_from<Prev: EntityState, Next: EntityState>( self, on_exit: impl 'static + Fn(&mut EntityCommands<'_>) + Send + Sync, ) -> Self
Adds an on-enter event to the state machine. Whenever the state machine transitions from the given previous state to the given next state, it will run the event.
Sourcepub fn on_exit<Prev: EntityState>(
self,
on_exit: impl 'static + Fn(&mut EntityCommands<'_>) + Send + Sync,
) -> Self
pub fn on_exit<Prev: EntityState>( self, on_exit: impl 'static + Fn(&mut EntityCommands<'_>) + Send + Sync, ) -> Self
Adds an on-exit event to the state machine. Whenever the state machine transitions from the given previous state to any next state, it will run the event.
Sourcepub fn command_on_enter_to<Prev: EntityState, Next: EntityState>(
self,
command: impl Clone + Command + Sync,
) -> Self
pub fn command_on_enter_to<Prev: EntityState, Next: EntityState>( self, command: impl Clone + Command + Sync, ) -> Self
Adds an on-enter command to the state machine. Whenever the state machine transitions from the given previous state to the given next state, it will run the command.
Sourcepub fn command_on_enter<Next: EntityState>(
self,
command: impl Clone + Command + Sync,
) -> Self
pub fn command_on_enter<Next: EntityState>( self, command: impl Clone + Command + Sync, ) -> Self
Adds an on-enter command to the state machine. Whenever the state machine transitions from any previous state to the given next state, it will run the command.
Sourcepub fn command_on_exit_from<Prev: EntityState, Next: EntityState>(
self,
command: impl Clone + Command + Sync,
) -> Self
pub fn command_on_exit_from<Prev: EntityState, Next: EntityState>( self, command: impl Clone + Command + Sync, ) -> Self
Adds an on-exit command to the state machine. Whenever the state machine transitions from the given previous state to the given next state, it will run the command.
Sourcepub fn command_on_exit<Prev: EntityState>(
self,
command: impl Clone + Command + Sync,
) -> Self
pub fn command_on_exit<Prev: EntityState>( self, command: impl Clone + Command + Sync, ) -> Self
Adds an on-exit command to the state machine. Whenever the state machine transitions from the given previous state to any next state, it will run the command.
Sourcepub fn set_trans_logging(self, log_transitions: bool) -> Self
pub fn set_trans_logging(self, log_transitions: bool) -> Self
Sets whether transitions are logged to the console
Trait Implementations§
Source§impl Component for StateMachine
impl Component for StateMachine
Source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
Source§type Mutability = Mutable
type Mutability = Mutable
Component<Mutability = Mutable>,
while immutable components will instead have Component<Mutability = Immutable>. Read moreSource§fn register_required_components(
_requiree: ComponentId,
required_components: &mut RequiredComponentsRegistrator<'_, '_>,
)
fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Source§fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_replace() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_replace() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
EntityMapper. This is used to remap entities in contexts like scenes and entity cloning.
When deriving Component, this is populated by annotating fields containing entities with #[entities] Read moreAuto Trait Implementations§
impl Freeze for StateMachine
impl !RefUnwindSafe for StateMachine
impl Send for StateMachine
impl Sync for StateMachine
impl Unpin for StateMachine
impl !UnwindSafe for StateMachine
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<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ids: &mut impl FnMut(ComponentId), )
Source§fn get_component_ids(
components: &Components,
ids: &mut impl FnMut(Option<ComponentId>),
)
fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )
Source§impl<C> BundleFromComponents for Cwhere
C: Component,
impl<C> BundleFromComponents for Cwhere
C: Component,
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.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
Source§unsafe fn get_components(
ptr: MovingPtr<'_, C>,
func: &mut impl FnMut(StorageType, OwningPtr<'_>),
) -> <C as DynamicBundle>::Effect
unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
Source§unsafe fn apply_effect(
_ptr: MovingPtr<'_, MaybeUninit<C>>,
_entity: &mut EntityWorldMut<'_>,
)
unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self using default().
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