cloudiful-bevy-input 0.1.2

Reusable Bevy input abstraction for game-defined actions.
Documentation
use crate::action_state::{ActionState, InputSettings};
use crate::bindings::{InputAction, InputMap};
use crate::device::{ActiveInputDevice, PrimaryGamepad};
use crate::systems::{sync_primary_gamepad, update_action_state};
use bevy::input::ButtonInput;
use bevy::input::keyboard::KeyCode;
use bevy::prelude::*;
use std::marker::PhantomData;

pub struct InputBindingsPlugin<A: InputAction> {
    marker: PhantomData<A>,
}

impl<A: InputAction> Default for InputBindingsPlugin<A> {
    fn default() -> Self {
        Self {
            marker: PhantomData,
        }
    }
}

impl<A: InputAction> Plugin for InputBindingsPlugin<A> {
    fn build(&self, app: &mut App) {
        app.init_resource::<ButtonInput<KeyCode>>()
            .init_resource::<InputMap<A>>()
            .init_resource::<ActionState<A>>()
            .init_resource::<InputSettings>()
            .init_resource::<PrimaryGamepad>()
            .init_resource::<ActiveInputDevice>()
            .add_systems(PreUpdate, (sync_primary_gamepad, update_action_state::<A>));
    }
}