cloudiful_bevy_input/
plugin.rs1use crate::action_state::{ActionState, InputSettings};
2use crate::bindings::{InputAction, InputMap};
3use crate::device::{ActiveInputDevice, PrimaryGamepad};
4use crate::systems::{sync_primary_gamepad, update_action_state};
5use bevy::input::ButtonInput;
6use bevy::input::keyboard::KeyCode;
7use bevy::prelude::*;
8use std::marker::PhantomData;
9
10pub struct InputBindingsPlugin<A: InputAction> {
11 marker: PhantomData<A>,
12}
13
14impl<A: InputAction> Default for InputBindingsPlugin<A> {
15 fn default() -> Self {
16 Self {
17 marker: PhantomData,
18 }
19 }
20}
21
22impl<A: InputAction> Plugin for InputBindingsPlugin<A> {
23 fn build(&self, app: &mut App) {
24 app.init_resource::<ButtonInput<KeyCode>>()
25 .init_resource::<InputMap<A>>()
26 .init_resource::<ActionState<A>>()
27 .init_resource::<InputSettings>()
28 .init_resource::<PrimaryGamepad>()
29 .init_resource::<ActiveInputDevice>()
30 .add_systems(PreUpdate, (sync_primary_gamepad, update_action_state::<A>));
31 }
32}