1#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
3pub enum KeyCode {
4 Char(char),
5 Enter,
6 Escape,
7 Tab,
8 BackTab,
9 Up,
10 Down,
11 Left,
12 Right,
13 Backspace,
14}
15
16#[derive(Clone, Copy, PartialEq, Eq, Debug)]
18pub enum MouseButton {
19 Left,
20 Right,
21 Middle,
22}
23
24#[derive(Clone, Copy, PartialEq, Eq, Debug)]
26pub enum MouseKind {
27 Press(MouseButton),
28 Release(MouseButton),
29 Move,
30 ScrollUp,
31 ScrollDown,
32}
33
34#[derive(Clone, Copy, Debug)]
36pub struct MouseEvent {
37 pub kind: MouseKind,
38 pub col: u16,
39 pub row: u16,
40}
41
42pub struct Input {
44 pressed: Vec<KeyCode>,
45 mouse: Vec<MouseEvent>,
46}
47
48impl super::resource::Resource for Input {}
49
50impl Input {
51 pub fn new() -> Self {
52 Self { pressed: Vec::with_capacity(8), mouse: Vec::with_capacity(4) }
53 }
54
55 pub fn just_pressed(&self, key: KeyCode) -> bool {
56 self.pressed.contains(&key)
57 }
58
59 pub fn pressed_keys(&self) -> &[KeyCode] {
60 &self.pressed
61 }
62
63 pub fn mouse_events(&self) -> &[MouseEvent] {
64 &self.mouse
65 }
66
67 pub(crate) fn clear(&mut self) {
68 self.pressed.clear();
69 self.mouse.clear();
70 }
71
72 pub(crate) fn press(&mut self, key: KeyCode) {
73 self.pressed.push(key);
74 }
75
76 pub(crate) fn push_mouse(&mut self, event: MouseEvent) {
77 self.mouse.push(event);
78 }
79}