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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
use macroquad::prelude::*;
pub fn key_matrix(row: usize) -> u8 {
static KEYCODES_DATA: [&[KeyCode]; 11] = [
&[
KeyCode::Key7,
KeyCode::Key6,
KeyCode::Key5,
KeyCode::Key4,
KeyCode::Key3,
KeyCode::Key2,
KeyCode::Key1,
KeyCode::Key0,
],
&[
KeyCode::Semicolon,
KeyCode::RightBracket,
KeyCode::LeftBracket,
KeyCode::F11,
KeyCode::Equal,
KeyCode::Minus,
KeyCode::Key9,
KeyCode::Key8,
],
&[
KeyCode::B,
KeyCode::A,
KeyCode::F11,
KeyCode::Slash,
KeyCode::Period,
KeyCode::Comma,
KeyCode::F11,
KeyCode::F8,
],
&[
KeyCode::J,
KeyCode::I,
KeyCode::H,
KeyCode::G,
KeyCode::F,
KeyCode::E,
KeyCode::D,
KeyCode::C,
],
&[
KeyCode::R,
KeyCode::Q,
KeyCode::P,
KeyCode::O,
KeyCode::N,
KeyCode::M,
KeyCode::L,
KeyCode::K,
],
&[
KeyCode::Z,
KeyCode::Y,
KeyCode::X,
KeyCode::W,
KeyCode::V,
KeyCode::U,
KeyCode::T,
KeyCode::S,
],
&[
KeyCode::F3,
KeyCode::F2,
KeyCode::F1,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::LeftControl,
KeyCode::LeftShift,
],
&[
KeyCode::Enter,
KeyCode::F11,
KeyCode::Backspace,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F5,
KeyCode::F4,
],
&[
KeyCode::Right,
KeyCode::Down,
KeyCode::Up,
KeyCode::Left,
KeyCode::Delete,
KeyCode::Insert,
KeyCode::Home,
KeyCode::Space,
],
&[
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
],
&[
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
KeyCode::F11,
],
];
let mut result = 0xff_u8;
if row < 11 {
for i in 0..8 {
if macroquad::input::is_key_down(KEYCODES_DATA[row][i]) {
result &= !(1 << (7 - i));
}
}
} else {
log::error!("KeyMatrix: Tried to scan row > 10");
}
result
}