You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Trac3r-rust/src/input.rs

46 lines
1.2 KiB

use std::collections::HashSet;
use sfml::window::{Key, Event, mouse::Button};
pub struct Input {
held_keys: HashSet<Key>,
held_mouse: HashSet<u8>,
}
impl Input {
pub fn new() -> Input {
let mut key_container = HashSet::new();
let mut mouse_container = HashSet::new();
Input {
held_keys: key_container,
held_mouse: mouse_container,
}
}
pub fn is_held(&self, key: Key) -> bool {
self.held_keys.contains(&key)
}
pub fn is_mousebutton_held(&self, button: Button) -> bool {
self.held_mouse.contains(&(button as u8))
}
pub fn ingest(&mut self, event: &Event) {
match event {
Event::KeyPressed { code, .. } => {
self.held_keys.insert(code.clone());
}
Event::KeyReleased { code, .. } => {
self.held_keys.remove(code);
}
Event::MouseButtonPressed { button, x, y } => {
self.held_mouse.insert(button.clone() as u8);
},
Event::MouseButtonReleased { button, x, y } => {
self.held_mouse.remove(&(button.clone() as u8));
},
_ => {}
}
}
}