1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
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)); }, _ => {} } } }