pub struct InputManagerPlugin<A: Actionlike> { /* private fields */ }
Expand description
A Plugin
that collects ButtonInput
from disparate sources,
producing an ActionState
that can be conveniently checked
This plugin needs to be passed in an Actionlike
enum type that you’ve created for your game.
Each variant represents a “virtual button” whose state is stored in an ActionState
struct.
Each InputManagerBundle
contains:
- an
InputMap
component, which stores an entity-specific mapping between the assorted input streams and an internal representation of “actions” - an
ActionState
component, which stores the current input state for that entity in a source-agnostic fashion
If you have more than one distinct type of action (e.g., menu actions, camera actions, and player actions),
consider creating multiple Actionlike
enums
and adding a copy of this plugin for each Actionlike
type.
All actions can be dynamically enabled or disabled by calling the relevant methods on
ActionState<A>
. This can be useful when working with states to pause the game, navigate
menus, and so on.
§Systems
WARNING: These systems run during PreUpdate
.
If you have systems that care about inputs and actions that also run during this stage,
you must define an ordering between your systems or behavior will be very erratic.
The stable system sets for these systems are available under InputManagerSystem
enum.
Complete list:
tick_action_state
, which resets thepressed
andjust_pressed
fields of theActionState
each frameupdate_action_state
, which collectsButtonInput
resources to update theActionState
Implementations§
source§impl<A: Actionlike> InputManagerPlugin<A>
impl<A: Actionlike> InputManagerPlugin<A>
sourcepub fn server() -> Self
pub fn server() -> Self
Creates a version of the plugin intended to run on the server
Inputs will not be processed; instead, ActionState
should be copied directly from the state provided by the client,
or constructed from ActionDiff
event streams.
Trait Implementations§
source§impl<A: Actionlike> Default for InputManagerPlugin<A>
impl<A: Actionlike> Default for InputManagerPlugin<A>
source§impl<A: Actionlike + TypePath + GetTypeRegistration> Plugin for InputManagerPlugin<A>
impl<A: Actionlike + TypePath + GetTypeRegistration> Plugin for InputManagerPlugin<A>
source§fn ready(&self, _app: &App) -> bool
fn ready(&self, _app: &App) -> bool
finish
should be called.source§fn finish(&self, _app: &mut App)
fn finish(&self, _app: &mut App)
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)
fn cleanup(&self, _app: &mut App)
Auto Trait Implementations§
impl<A> Freeze for InputManagerPlugin<A>
impl<A> RefUnwindSafe for InputManagerPlugin<A>where
A: RefUnwindSafe,
impl<A> Send for InputManagerPlugin<A>
impl<A> Sync for InputManagerPlugin<A>
impl<A> Unpin for InputManagerPlugin<A>where
A: Unpin,
impl<A> UnwindSafe for InputManagerPlugin<A>where
A: UnwindSafe,
Blanket Implementations§
source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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> 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
Self
using data from the given World
.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