Struct leafwing_input_manager::plugin::InputManagerPlugin
source · 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.
§Systems
All systems added by this plugin can be dynamically enabled and disabled by setting the value of the ToggleActions<A>
resource is set.
This can be useful when working with states to pause the game, navigate menus, or so on.
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
update_action_state_from_interaction
, for triggering actions from buttons- powers the
ActionStateDriver
component based on anInteraction
component
- powers the
release_on_disable
, which resets action states whenToggleActions
is flipped, to avoid persistent presses.
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> Plugin for InputManagerPlugin<A>
impl<A: Actionlike + TypePath> Plugin for InputManagerPlugin<A>
§fn ready(&self, _app: &App) -> bool
fn ready(&self, _app: &App) -> bool
finish
should be called.§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.§fn cleanup(&self, _app: &mut App)
fn cleanup(&self, _app: &mut App)
Auto Trait Implementations§
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§
§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> 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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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
.§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
.§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.§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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given [World
].