use crate::{Button, Buttons};
#[derive(Debug, Copy, Clone, Default)]
pub struct ButtonCounts {
counts: [u16; Button::COUNT],
}
impl ButtonCounts {
pub fn update_for_event(&mut self, button: Button, is_press: bool) {
let count = &mut self.counts[button.index()];
*count = count.wrapping_add(1);
let count_is_press = count_is_press(*count);
if is_press != count_is_press {
*count = count.wrapping_add(1);
}
}
#[must_use]
pub fn is_pressed(&self, button: Button) -> bool {
count_is_press(self.counts[button.index()])
}
#[must_use]
pub fn currently_pressed(&self) -> Buttons {
let is_presses = self.counts.map(count_is_press);
Buttons::from_slice(&is_presses)
}
}
fn count_is_press(count: u16) -> bool {
count & 1 == 1
}