bevy_controls 1.0.0

Bevy controls library
Documentation
use bevy::prelude::*;

use crate::button::buttons::Buttons;

#[derive(Component, Clone, Debug, Reflect)]
pub struct ButtonControl<TContext, TAction> {
    pub action: TAction,
    pub contexts: Vec<TContext>,
    pub(crate) state: bool,
    pub(crate) read: bool,
    pub mappings: Vec<Buttons>,
}

impl<TContext, TAction> ButtonControl<TContext, TAction> {
    pub fn new(action: TAction, contexts: Vec<TContext>, mappings: Vec<Buttons>) -> Self {
        Self {
            action,
            contexts,
            state: false,
            read: false,
            mappings,
        }
    }

    pub fn read(&mut self) -> bool {
        self.read = true;
        self.state
    }

    pub fn just_pressed(&mut self) -> bool {
        let result = self.state && !self.read;
        self.read = true;
        result
    }
}