Trait leafwing_input_manager::user_input::UserInput

source ·
pub trait UserInput:
    Send
    + Sync
    + Debug
    + DynClone
    + DynEq
    + DynHash
    + Reflect
    + Serialize {
    // Required methods
    fn kind(&self) -> InputControlKind;
    fn decompose(&self) -> BasicInputs;
}
Expand description

A trait for defining the behavior expected from different user input sources.

Implementers of this trait should provide methods for accessing and processing user input data.

§Examples

use std::hash::{Hash, Hasher};
use bevy::prelude::*;
use bevy::math::{Vec2, FloatOrd};
use serde::{Deserialize, Serialize};
use leafwing_input_manager::prelude::*;
use leafwing_input_manager::axislike::{DualAxisType};
use leafwing_input_manager::clashing_inputs::BasicInputs;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Reflect, Serialize, Deserialize)]
pub struct MouseScrollAlwaysFiveOnYAxis;

// Add this attribute for ensuring proper serialization and deserialization.
#[serde_typetag]
impl UserInput for MouseScrollAlwaysFiveOnYAxis {
    fn kind(&self) -> InputControlKind {
        // Returns the kind of input this represents.
        //
        // In this case, it represents an axial input.
        InputControlKind::Axis
    }

    fn decompose(&self) -> BasicInputs {
        // Gets the most basic form of this input for clashing input detection.
        //
        // This input is not buttonlike, so it uses `None`.
        BasicInputs::None
    }
}

// Remember to register your input - it will ensure everything works smoothly!
let mut app = App::new();
app.register_user_input::<MouseScrollAlwaysFiveOnYAxis>();

Required Methods§

source

fn kind(&self) -> InputControlKind

Defines the kind of behavior that the input should be.

source

fn decompose(&self) -> BasicInputs

Returns the set of primitive inputs that make up this input.

These inputs are used to detect clashes between different user inputs, and are stored in a BasicInputs for easy comparison.

For inputs that represent a simple, atomic control, this method should always return a BasicInputs::Simple that only contains the input itself.

Trait Implementations§

source§

impl<'de> Deserialize<'de> for Box<dyn UserInput>

source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl FromReflect for Box<dyn UserInput>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

Constructs a concrete instance of Self from a reflected value.
source§

fn take_from_reflect( reflect: Box<dyn Reflect>, ) -> Result<Self, Box<dyn Reflect>>

Attempts to downcast the given value to Self using, constructing the value using from_reflect if that fails. Read more
source§

impl GetTypeRegistration for Box<dyn UserInput>

source§

fn get_type_registration() -> TypeRegistration

Returns the default TypeRegistration for this type.
source§

fn register_type_dependencies(registry: &mut TypeRegistry)

Registers other types needed by this type. Read more
source§

impl<'hash> Hash for dyn UserInput + 'hash

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
source§

impl<'hash> Hash for dyn UserInput + Send + 'hash

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
source§

impl<'hash> Hash for dyn UserInput + Send + Sync + 'hash

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
source§

impl<'hash> Hash for dyn UserInput + Sync + 'hash

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
source§

impl<'eq> PartialEq<&Box<dyn UserInput + 'eq>> for Box<dyn UserInput + 'eq>

source§

fn eq(&self, other: &&Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'eq> PartialEq<&Box<dyn UserInput + Send + 'eq>> for Box<dyn UserInput + Send + 'eq>

source§

fn eq(&self, other: &&Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'eq> PartialEq<&Box<dyn UserInput + Send + Sync + 'eq>> for Box<dyn UserInput + Send + Sync + 'eq>

source§

fn eq(&self, other: &&Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'eq> PartialEq<&Box<dyn UserInput + Sync + 'eq>> for Box<dyn UserInput + Sync + 'eq>

source§

fn eq(&self, other: &&Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'eq> PartialEq for dyn UserInput + 'eq

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'eq> PartialEq for dyn UserInput + Send + 'eq

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'eq> PartialEq for dyn UserInput + Send + Sync + 'eq

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<'eq> PartialEq for dyn UserInput + Sync + 'eq

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Reflect for Box<dyn UserInput>

source§

fn get_represented_type_info(&self) -> Option<&'static TypeInfo>

Returns the TypeInfo of the type represented by this value. Read more
source§

fn into_any(self: Box<Self>) -> Box<dyn Any>

Returns the value as a Box<dyn Any>.
source§

fn as_any(&self) -> &dyn Any

Returns the value as a &dyn Any.
source§

fn as_any_mut(&mut self) -> &mut dyn Any

Returns the value as a &mut dyn Any.
source§

fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>

Casts this type to a boxed reflected value.
source§

fn as_reflect(&self) -> &dyn Reflect

Casts this type to a reflected value.
source§

fn as_reflect_mut(&mut self) -> &mut dyn Reflect

Casts this type to a mutable reflected value.
source§

fn try_apply(&mut self, value: &dyn Reflect) -> Result<(), ApplyError>

Tries to apply a reflected value to this value. Read more
source§

fn apply(&mut self, value: &dyn Reflect)

Applies a reflected value to this value. Read more
source§

fn set(&mut self, value: Box<dyn Reflect>) -> Result<(), Box<dyn Reflect>>

Performs a type-checked assignment of a reflected value to this value. Read more
source§

fn reflect_kind(&self) -> ReflectKind

Returns a zero-sized enumeration of “kinds” of type. Read more
source§

fn reflect_ref(&self) -> ReflectRef<'_>

Returns an immutable enumeration of “kinds” of type. Read more
source§

fn reflect_mut(&mut self) -> ReflectMut<'_>

Returns a mutable enumeration of “kinds” of type. Read more
source§

fn reflect_owned(self: Box<Self>) -> ReflectOwned

Returns an owned enumeration of “kinds” of type. Read more
source§

fn clone_value(&self) -> Box<dyn Reflect>

Clones the value as a Reflect trait object. Read more
source§

fn reflect_hash(&self) -> Option<u64>

Returns a hash of the value (which includes the type). Read more
source§

fn reflect_partial_eq(&self, value: &dyn Reflect) -> Option<bool>

Returns a “partial equality” comparison result. Read more
source§

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

Debug formatter for the value. Read more
source§

fn serializable(&self) -> Option<Serializable<'_>>

Returns a serializable version of the value. Read more
source§

fn is_dynamic(&self) -> bool

Indicates whether or not this type is a dynamic type. Read more
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for AxislikeChord

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for ButtonlikeChord

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for DualAxislikeChord

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for GamepadButtonType

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for GamepadControlAxis

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for GamepadControlDirection

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for GamepadStick

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for GamepadVirtualAxis

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for GamepadVirtualDPad

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for KeyCode

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for KeyboardVirtualAxis

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for KeyboardVirtualDPad

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for ModifierKey

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for MouseButton

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for MouseMove

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for MouseMoveAxis

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for MouseMoveDirection

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for MouseScroll

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for MouseScrollAxis

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'de> RegisterTypeTag<'de, dyn UserInput> for MouseScrollDirection

source§

fn register_typetag(registry: &mut MapRegistry<dyn UserInput>)

Registers the specified type tag into the MapRegistry.
source§

impl<'a> Serialize for dyn UserInput + 'a

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl TypePath for Box<dyn UserInput>

source§

fn type_path() -> &'static str

Returns the fully qualified path of the underlying type. Read more
source§

fn short_type_path() -> &'static str

Returns a short, pretty-print enabled path to the type. Read more
source§

fn type_ident() -> Option<&'static str>

Returns the name of the type, or None if it is anonymous. Read more
source§

fn crate_name() -> Option<&'static str>

Returns the name of the crate the type is in, or None if it is anonymous. Read more
source§

fn module_path() -> Option<&'static str>

Returns the path to the module the type is in, or None if it is anonymous. Read more
source§

impl Typed for Box<dyn UserInput>

source§

fn type_info() -> &'static TypeInfo

Returns the compile-time info for the underlying type.
source§

impl<'eq> Eq for dyn UserInput + 'eq

source§

impl<'eq> Eq for dyn UserInput + Send + 'eq

source§

impl<'eq> Eq for dyn UserInput + Send + Sync + 'eq

source§

impl<'eq> Eq for dyn UserInput + Sync + 'eq

Implementations on Foreign Types§

source§

impl UserInput for GamepadButtonType

source§

fn kind(&self) -> InputControlKind

GamepadButtonType acts as a button.

source§

fn decompose(&self) -> BasicInputs

Creates a BasicInputs that only contains the GamepadButtonType itself, as it represents a simple physical button.

source§

impl UserInput for KeyCode

source§

fn kind(&self) -> InputControlKind

KeyCode acts as a button.

source§

fn decompose(&self) -> BasicInputs

Returns a BasicInputs that only contains the KeyCode itself, as it represents a simple physical button.

source§

impl UserInput for MouseButton

source§

fn kind(&self) -> InputControlKind

MouseButton acts as a button.

source§

fn decompose(&self) -> BasicInputs

Returns a BasicInputs that only contains the MouseButton itself, as it represents a simple physical button.

source§

impl UserInput for GamepadAxis

Unlike GamepadButtonType, this struct represents a specific axis on a specific gamepad.

In the majority of cases, GamepadControlAxis or GamepadStick should be used instead.

source§

impl UserInput for GamepadButton

Unlike GamepadButtonType, this struct represents a specific button on a specific gamepad.

In the majority of cases, GamepadButtonType should be used instead.

Implementors§