good_web_game/input/
input_handler.rs1#![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}