good_web_game/input/
input_handler.rs

1#![allow(dead_code)]
2
3use cgmath::Point2;
4use std::collections::HashSet;
5
6use miniquad::MouseButton as QuadMouseButton;
7
8#[derive(Hash, Debug, Eq, PartialEq, Clone, Copy)]
9pub enum MouseButton {
10    Left,
11    Middle,
12    Right,
13    Button4,
14    Button5,
15}
16
17impl From<QuadMouseButton> for MouseButton {
18    fn from(button: QuadMouseButton) -> MouseButton {
19        match button {
20            QuadMouseButton::Left => MouseButton::Left,
21            QuadMouseButton::Right => MouseButton::Right,
22            QuadMouseButton::Middle => MouseButton::Middle,
23            QuadMouseButton::Unknown => MouseButton::Button4,
24        }
25    }
26}
27
28pub struct InputHandler {
29    pub keys: HashSet<String>,
30    pub frame_keys: HashSet<String>,
31    pub mouse_position: Point2<f32>,
32    pub mouse_keys: HashSet<MouseButton>,
33    pub wheel: f32,
34}
35
36impl Default for InputHandler {
37    fn default() -> Self {
38        InputHandler::new()
39    }
40}
41
42impl InputHandler {
43    pub fn new() -> InputHandler {
44        InputHandler {
45            keys: HashSet::new(),
46            frame_keys: HashSet::new(),
47            mouse_position: Point2::new(0., 0.),
48            mouse_keys: HashSet::new(),
49            wheel: 0.,
50        }
51    }
52
53    pub fn handle_mouse_move(&mut self, mouse_x: f32, mouse_y: f32) {
54        self.mouse_position = Point2::new(mouse_x, mouse_y);
55    }
56
57    pub fn handle_mouse_down(&mut self, button: miniquad::MouseButton) {
58        self.mouse_keys.insert(MouseButton::from(button));
59    }
60
61    pub fn handle_mouse_up(&mut self, button: miniquad::MouseButton) {
62        self.mouse_keys.remove(&MouseButton::from(button));
63    }
64
65    pub fn handle_key_down(&mut self, key: String) {
66        self.keys.insert(key.clone());
67        self.frame_keys.insert(key);
68    }
69
70    pub fn handle_end_frame(&mut self) {
71        self.frame_keys.clear();
72        self.wheel = 0.;
73    }
74
75    pub fn handle_key_up(&mut self, key: String) {
76        self.keys.remove(&key);
77    }
78
79    pub fn handle_mouse_wheel(&mut self, delta_y: f64) {
80        self.wheel = delta_y as f32;
81    }
82
83    pub fn is_key_pressed(&self, key: &str) -> bool {
84        self.keys.contains(key)
85    }
86
87    pub fn is_key_down(&self, key: &str) -> bool {
88        self.frame_keys.contains(key)
89    }
90
91    pub fn is_mouse_key_down(&self, key: &MouseButton) -> bool {
92        self.mouse_keys.contains(key)
93    }
94}