[][src]Struct rust_action_heroes::system::process_input::ProcessInputSystem

pub(crate) struct ProcessInputSystem {
    curr: BTreeSet<VirtualKeyCode>,
}

ProcessInputSystem transforms raw(ish) InputHandler inputs into a small set of possible actions. i.e., instead of all systems dealing with user input having to match on all possible keybaord inputs, we match on "Move Up", "Move Down", "Interact", etc.

ProcessInputSystem also handles the "spamming input problem" in turn-based games by remembering what the current action is and only sending a new signal when the user input changes. This means that if someone pressed "Up", the game only sends/reads one "Move Up" message, even though the InputHandler is spamming "Up" once per frame.

The "spamming input problem" could be solved by having some "turn" construct where we read input for a turn, then reject input until the next turn, but this was easier. The user is in control of when their turns are, and in this simple game there is no AI to take a different turn, so the user's turns can happen as fast as they can press keys.

Fields

curr: BTreeSet<VirtualKeyCode>

Implementations

impl ProcessInputSystem[src]

pub(crate) fn new() -> Self[src]

Trait Implementations

impl<'s> System<'s> for ProcessInputSystem[src]

type SystemData = (Read<'s, InputHandler<StringBindings>>, Write<'s, EventChannel<TransformedInputEvent>>)

The resource bundle required to execute this system. Read more

impl<'system_desc_a, 'system_desc_b> SystemDesc<'system_desc_a, 'system_desc_b, ProcessInputSystem> for ProcessInputSystem[src]

Auto Trait Implementations

impl RefUnwindSafe for ProcessInputSystem

impl Send for ProcessInputSystem

impl Sync for ProcessInputSystem

impl Unpin for ProcessInputSystem

impl UnwindSafe for ProcessInputSystem

Blanket Implementations

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S where
    D: AdaptFrom<S, Swp, Dwp, T>,
    Dwp: WhitePoint,
    Swp: WhitePoint,
    T: Component + Float
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Any for T where
    T: Any

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Event for T where
    T: Send + Sync + 'static, 

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Resource for T where
    T: Any + Send + Sync

impl<'a, T> RunNow<'a> for T where
    T: System<'a>, 

impl<'a, T> RunWithPool<'a> for T where
    T: System<'a>, 

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> SetParameter for T

impl<SS, SP> SupersetOf<SS> for SP where
    SS: SubsetOf<SP>, 

impl<T> Supports<T> for T

impl<'s, S> SystemExt for S where
    S: System<'s>, 

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,