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