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

47 lines
1.2 KiB

6 years ago
use std::collections::HashSet;
use sfml::window::{Key, Event, mouse::Button};
6 years ago
pub struct Input {
held_keys: HashSet<Key>,
held_mouse: HashSet<u8>,
6 years ago
}
impl Input {
pub fn new() -> Input {
let mut key_container = HashSet::new();
let mut mouse_container = HashSet::new();
6 years ago
Input {
held_keys: key_container,
held_mouse: mouse_container,
6 years ago
}
}
pub fn is_held(&self, key: Key) -> bool {
6 years ago
self.held_keys.contains(&key)
}
pub fn is_mousebutton_held(&self, button: Button) -> bool {
self.held_mouse.contains(&(button as u8))
}
6 years ago
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.insert(button.clone() as u8);
},
6 years ago
_ => {}
}
}
}