cloudiful-bevy-input 0.1.3

Reusable Bevy input abstraction for game-defined actions.
Documentation
use bevy::prelude::*;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum PrimaryGamepadMode {
    #[default]
    Auto,
    Manual,
}

#[derive(Resource, Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct PrimaryGamepad {
    selected: Option<Entity>,
    mode: PrimaryGamepadMode,
}

impl PrimaryGamepad {
    pub fn selected(self) -> Option<Entity> {
        self.selected
    }

    pub fn mode(self) -> PrimaryGamepadMode {
        self.mode
    }

    pub fn select(&mut self, entity: Entity) {
        self.selected = Some(entity);
        self.mode = PrimaryGamepadMode::Manual;
    }

    pub fn clear_manual(&mut self) {
        self.mode = PrimaryGamepadMode::Auto;
    }

    pub(crate) fn set_selected(&mut self, entity: Option<Entity>) {
        self.selected = entity;
    }
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum InputDevice {
    KeyboardMouse,
    Gamepad(Entity),
}

#[derive(Resource, Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct ActiveInputDevice {
    current: Option<InputDevice>,
}

impl ActiveInputDevice {
    pub fn current(self) -> Option<InputDevice> {
        self.current
    }

    pub(crate) fn set_current(&mut self, current: Option<InputDevice>) {
        self.current = current;
    }
}