Skip to main content

cloudiful_bevy_input/
plugin.rs

1use 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}