use std::collections::HashSet;
use winit::keyboard::KeyCode;
#[derive(Default, Debug)]
pub struct KeyboardState {
pressed: HashSet<KeyCode>,
just_pressed: HashSet<KeyCode>,
just_released: HashSet<KeyCode>,
}
impl KeyboardState {
pub fn new() -> Self {
Self::default()
}
pub fn is_pressed(&self, key: KeyCode) -> bool {
self.pressed.contains(&key)
}
pub fn just_pressed(&self, key: KeyCode) -> bool {
self.just_pressed.contains(&key)
}
pub fn just_released(&self, key: KeyCode) -> bool {
self.just_released.contains(&key)
}
pub fn press(&mut self, key: KeyCode) {
if self.pressed.insert(key) {
self.just_pressed.insert(key);
}
}
pub fn release(&mut self, key: KeyCode) {
if self.pressed.remove(&key) {
self.just_released.insert(key);
}
}
pub fn update(&mut self) {
self.just_pressed.clear();
self.just_released.clear();
}
}