Skip to main content

ActionState

Struct ActionState 

Source
pub struct ActionState<A: ActionLike> { /* private fields */ }
Expand description

Sim-side gameplay input: fed from repose events each frame, read by fixed-step systems each tick. Edges (just_pressed/just_released) clear at the END of each tick (end_tick, registered last), so compose-fed events survive until the tick’s systems run. Frame-scope readers call clear_edges after consuming.

Implementations§

Source§

impl<A: ActionLike> ActionState<A>

Source

pub fn new(map: ActionMap<A>) -> Self

Source

pub fn map(&self) -> &ActionMap<A>

Source

pub fn end_tick(&mut self)

Edge rollover for the tick end: edges clear, levels persist. Frame-scope readers use clear_edges instead.

Source

pub fn clear_edges(&mut self)

Clear edges outside the schedule (after frame-scope consumption).

Source

pub fn set_contexts(&mut self, contexts: &[&str])

Switch the active context set (phase gating, e.g. menu vs play). Empty set with contexts defined means only context-free actions fire. Pending edges drop only when the set actually changes: re-setting the same contexts every frame (the normal pump pattern) keeps them. Levels (pressed) always track hardware truthfully.

Source

pub fn key(&mut self, chord: &KeyChord, down: bool)

Feed a keyboard chord press/release from the runner.

Source

pub fn mouse(&mut self, button: PointerButton, down: bool)

Feed a mouse button press/release.

Source

pub fn pad(&mut self, button: GamepadButton, down: bool)

Feed a gamepad button press/release.

Source

pub fn axis(&mut self, axis: GamepadAxis, value: f32)

Feed an axis value; threshold bindings flip on crossing. Re-evaluates every action bound to this axis with OR semantics, so a second binding holding the action keeps it pressed.

Source

pub fn axis_value(&self, axis: GamepadAxis) -> f32

Latest raw value fed for an axis (0.0 if never fed).

This is the raw deflection in -1..1 (sticks) or 0..1 (triggers), with no threshold or deadzone applied. Use ActionState::strength for the per-action intensity with thresholds applied.

Source

pub fn strength(&self, action: &A) -> f32

Intensity of an action, from 0.0 (inactive) to 1.0 (fully held).

For button bindings (key, mouse, pad) the value is 0 or 1. For axis bindings it is the stick deflection |value| clamped to 0..1, so the further the stick is pushed past its threshold, the closer the value is to 1. When several bindings drive one action, the strongest active binding wins.

Returns 0.0 while the action is gated out by its context or has been consumed, matching pressed.

In most cases where you need a direction (twin-stick movement, menus), use vector instead of combining strengths by hand.

Source

pub fn vector( &self, neg_x: &A, pos_x: &A, neg_y: &A, pos_y: &A, deadzone: f32, ) -> (f32, f32)

Movement vector from four actions: (x, y) with x = strength(pos_x) - strength(neg_x) and y = strength(pos_y) - strength(neg_y).

This is useful for vector input such as a joystick, d-pad, arrows, or WASD driving movement. The result has a circular deadzone and its length limited to 1, so diagonal input never moves faster than axis-aligned input:

  • Lengths below deadzone (range 0..1) snap to (0, 0), which keeps a resting stick from drifting the player. Use 0.2 for a standard stick feel, 0.0 to disable.
  • Lengths above 1 (opposite pairs can’t exceed this, but two full-strength diagonals can in theory) are normalized back to 1.

Note: y follows screen convention (pos_y is down-positive). For world-up movement, negate y or swap the pair at the call site.

ⓘ
let (x, y) = state.vector(&MoveLeft, &MoveRight, &MoveUp, &MoveDown, 0.2);
player.vel = Vec2::new(x, y) * SPEED;
Source

pub fn pressed(&self, action: &A) -> bool

Held (and live in the active context, not consumed).

Returns true for every tick while any of the action’s bindings is held down. Actions gated out by set_contexts or hidden by consume read as released here even while the hardware is held. The level below keeps tracking the hardware truthfully, so re-entering the context (or clear_consumed) reports held again without a new press.

Source

pub fn just_pressed(&self, action: &A) -> bool

Started this tick (and live in the active context, not consumed).

Returns true only on the tick the action was pressed: the edge is set by the press event and cleared at the end of the tick by end_tick, so holding the button does not re-trigger it. If several ticks run in one frame, only systems in the first tick observe the edge.

Source

pub fn just_released(&self, action: &A) -> bool

Released this tick (and live in the active context, not consumed). Same gating as pressed/just_pressed, so context-gated and UI-consumed releases never leak to late readers.

Returns true only on the tick the last held binding was released (see the OR release rule in the module docs). Like just_pressed, the edge clears at end_tick.

Source

pub fn consume(&mut self, action: &A) -> bool

Swallow an action so later readers skip it (UI consumed the click). Returns true while the action is held.

Source

pub fn consume_all(&mut self)

Source

pub fn mock(&mut self, action: &A, down: bool)

Drive an action without hardware (cutscenes, AI, tests).

Source

pub fn clear_consumed(&mut self)

Clear consumption (fresh frame handoff from UI).

Trait Implementations§

Source§

impl<A: ActionLike> Component for ActionState<A>
where Self: Send + Sync + 'static,

Source§

const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::SparseSet

A constant indicating the storage type used for this component.
Source§

type Mutability = Mutable

A marker type to assist Bevy with determining if this component is mutable, or immutable. Mutable components will have Component<Mutability = Mutable>, while immutable components will instead have Component<Mutability = Immutable>. Read more
Source§

fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )

Registers required components. Read more
Source§

fn clone_behavior() -> ComponentCloneBehavior

Called when registering this component, allowing to override clone function (or disable cloning altogether) for this component. Read more
Source§

fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Self>>

Returns ComponentRelationshipAccessor required for working with relationships in dynamic contexts. Read more
Source§

fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_add ComponentHook for this Component if one is defined.
Source§

fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_insert ComponentHook for this Component if one is defined.
Source§

fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_discard ComponentHook for this Component if one is defined.
Source§

fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_remove ComponentHook for this Component if one is defined.
Source§

fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_despawn ComponentHook for this Component if one is defined.
Source§

fn map_entities<E>(_this: &mut Self, _mapper: &mut E)
where E: EntityMapper,

Maps the entities on this component using the given 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 more
Source§

impl<A: Debug + ActionLike> Debug for ActionState<A>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<A: ActionLike> Resource for ActionState<A>
where Self: Send + Sync + 'static,

Auto Trait Implementations§

§

impl<A> Freeze for ActionState<A>
where ActionMap<A>: Freeze, HashSet<A>: Freeze,

§

impl<A> RefUnwindSafe for ActionState<A>

§

impl<A> Send for ActionState<A>
where ActionMap<A>: Send, HashSet<A>: Send,

§

impl<A> Sync for ActionState<A>
where ActionMap<A>: Sync, HashSet<A>: Sync,

§

impl<A> Unpin for ActionState<A>
where ActionMap<A>: Unpin, HashSet<A>: Unpin,

§

impl<A> UnsafeUnpin for ActionState<A>

§

impl<A> UnwindSafe for ActionState<A>

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<C> Bundle for C
where C: Component,

Source§

fn component_ids( components: &mut ComponentsRegistrator<'_>, ) -> impl Iterator<Item = ComponentId> + use<C>

Source§

fn get_component_ids( components: &Components, ) -> impl Iterator<Item = Option<ComponentId>>

Return a iterator over this Bundle’s component ids. This will be None if the component has not been registered.
Source§

impl<C> BundleFromComponents for C
where C: Component,

Source§

unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
where F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a>, C: Sized,

Source§

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

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<C> DynamicBundle for C
where C: Component,

Source§

type Effect = ()

An operation on the entity that happens after inserting this bundle.
Source§

unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect

Moves the components out of the bundle. Read more
Source§

unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )

Applies the after-effects of spawning this bundle. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> IntoResult<T> for T

Source§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
Source§

impl<A> Is for A
where A: Any,

Source§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.