@@ -3,38 +3,206 @@ options gen2
33require node
44require grngame_input
55
6+ enum KeyCode {
7+ KEY_A = 4 ,
8+ KEY_B = 5 ,
9+ KEY_C = 6 ,
10+ KEY_D = 7 ,
11+ KEY_E = 8 ,
12+ KEY_F = 9 ,
13+ KEY_G = 10 ,
14+ KEY_H = 11 ,
15+ KEY_I = 12 ,
16+ KEY_J = 13 ,
17+ KEY_K = 14 ,
18+ KEY_L = 15 ,
19+ KEY_M = 16 ,
20+ KEY_N = 17 ,
21+ KEY_O = 18 ,
22+ KEY_P = 19 ,
23+ KEY_Q = 20 ,
24+ KEY_R = 21 ,
25+ KEY_S = 22 ,
26+ KEY_T = 23 ,
27+ KEY_U = 24 ,
28+ KEY_V = 25 ,
29+ KEY_W = 26 ,
30+ KEY_X = 27 ,
31+ KEY_Y = 28 ,
32+ KEY_Z = 29 ,
33+
34+ KEY_0 = 39 ,
35+ KEY_1 = 30 ,
36+ KEY_2 = 31 ,
37+ KEY_3 = 32 ,
38+ KEY_4 = 33 ,
39+ KEY_5 = 34 ,
40+ KEY_6 = 35 ,
41+ KEY_7 = 36 ,
42+ KEY_8 = 37 ,
43+ KEY_9 = 38 ,
44+
45+ KEY_F1 = 58 ,
46+ KEY_F2 = 59 ,
47+ KEY_F3 = 60 ,
48+ KEY_F4 = 61 ,
49+ KEY_F5 = 62 ,
50+ KEY_F6 = 63 ,
51+ KEY_F7 = 64 ,
52+ KEY_F8 = 65 ,
53+ KEY_F9 = 66 ,
54+ KEY_F10 = 67 ,
55+ KEY_F11 = 68 ,
56+ KEY_F12 = 69 ,
57+
58+ KEY_RETURN = 40 ,
59+ KEY_ESCAPE = 41 ,
60+ KEY_BACKSPACE = 42 ,
61+ KEY_TAB = 43 ,
62+ KEY_SPACE = 44 ,
63+ KEY_DELETE = 76 ,
64+ KEY_INSERT = 73 ,
65+ KEY_HOME = 74 ,
66+ KEY_END = 77 ,
67+ KEY_PAGEUP = 75 ,
68+ KEY_PAGEDOWN = 78 ,
69+
70+ KEY_UP = 82 ,
71+ KEY_DOWN = 81 ,
72+ KEY_LEFT = 80 ,
73+ KEY_RIGHT = 79 ,
74+
75+ KEY_LSHIFT = 225 ,
76+ KEY_RSHIFT = 229 ,
77+ KEY_LCTRL = 224 ,
78+ KEY_RCTRL = 228 ,
79+ KEY_LALT = 226 ,
80+ KEY_RALT = 230 ,
81+ KEY_LGUI = 227 ,
82+ KEY_RGUI = 231 ,
83+ KEY_CAPS = 57 ,
84+
85+ KEY_KP0 = 98 ,
86+ KEY_KP1 = 89 ,
87+ KEY_KP2 = 90 ,
88+ KEY_KP3 = 91 ,
89+ KEY_KP4 = 92 ,
90+ KEY_KP5 = 93 ,
91+ KEY_KP6 = 94 ,
92+ KEY_KP7 = 95 ,
93+ KEY_KP8 = 96 ,
94+ KEY_KP9 = 97 ,
95+ KEY_KP_ENTER = 88 ,
96+ KEY_KP_PLUS = 87 ,
97+ KEY_KP_MINUS = 86 ,
98+ KEY_KP_MUL = 85 ,
99+ KEY_KP_DIV = 84 ,
100+ KEY_KP_DOT = 99 ,
101+
102+ KEY_PRINTSCREEN = 70 ,
103+ KEY_SCROLLLOCK = 71 ,
104+ KEY_PAUSE = 72 ,
105+ KEY_MENU = 118
106+ }
107+
108+ enum PadButton {
109+ PAD_SOUTH = 0 ,
110+ PAD_EAST = 1 ,
111+ PAD_WEST = 2 ,
112+ PAD_NORTH = 3 ,
113+
114+ PAD_LB = 9 ,
115+ PAD_RB = 10 ,
116+
117+ PAD_LS = 7 ,
118+ PAD_RS = 8 ,
119+
120+ PAD_START = 6 ,
121+ PAD_BACK = 4 ,
122+ PAD_GUIDE = 5 ,
123+
124+ PAD_DPAD_UP = 11 ,
125+ PAD_DPAD_DOWN = 12 ,
126+ PAD_DPAD_LEFT = 13 ,
127+ PAD_DPAD_RIGHT = 14 ,
128+
129+ PAD_MISC1 = 15 ,
130+ PAD_MISC2 = 21 ,
131+ PAD_MISC3 = 22 ,
132+ PAD_MISC4 = 23 ,
133+ PAD_MISC5 = 24 ,
134+ PAD_MISC6 = 25 ,
135+
136+ PAD_PADDLE1 = 16 ,
137+ PAD_PADDLE2 = 17 ,
138+ PAD_PADDLE3 = 18 ,
139+ PAD_PADDLE4 = 19 ,
140+
141+ PAD_TOUCHPAD = 20 ,
142+
143+ PAD_BUTTON_COUNT = 26
144+ }
145+
146+ enum input_event {
147+ just_pressed ,
148+ pressed
149+ }
150+
6151class InputNode : Node {
7- aliases: table<string, int>
8- events : table<int, array<lambda>>
152+ aliases: table<string, KeyCode>
153+ just_pressed_events : table<KeyCode, array<lambda>>
154+ pressed_events : table<KeyCode, array<lambda>>
9155
10156 def InputNode () {
11157 Node`Node(self, "InputNode")
158+ aliases = table<string, KeyCode>()
159+ just_pressed_events = table<KeyCode, array<lambda>>()
160+ pressed_events = table<KeyCode, array<lambda>>()
12161 }
13162
14- def add_alias (name: string, key: int ) : void {
163+ def add_alias (name: string, key: KeyCode ) : void {
15164 aliases .insert (name , key )
16165 }
17166
18- def add_callback (alias: string, var callback: lambda) : bool {
167+ def add_callback (alias: string, input_type: input_event, var callback: lambda) : bool {
19168 if (! aliases .key_exists (alias )) {
20169 return false
21170 }
22171
23172 let aliased_key = aliases | > get_value (alias )
24- add_callback_raw (aliased_key , callback )
173+ add_callback_raw (aliased_key , input_type , callback )
25174 return true
26175 }
27176
28- def add_callback_raw (key: int, var callback: lambda) : void {
29- if (! events .key_exists (key )) {
30- events [key ] < - array < lambda > ()
177+ def add_callback_raw (key: KeyCode, input_type: input_event, var callback: lambda) : void {
178+ if (input_type == input_event .just_pressed ) {
179+ if (! just_pressed_events .key_exists (key )) {
180+ just_pressed_events [key ] < - array < lambda > ()
181+ }
182+ just_pressed_events [key ].emplace (callback )
183+ }
184+ elif (input_type == input_event .pressed ) {
185+ if (! pressed_events .key_exists (key )) {
186+ pressed_events [key ] < - array < lambda > ()
187+ }
188+ pressed_events [key ].emplace (callback )
31189 }
32- events [key ].emplace (callback )
33190 }
34191
192+
35193 def override update (dt: float) {
36- for (key , callbacks in keys (events ), values (events )) {
37- if (key_just_pressed (key )) {
194+ super .update (dt )
195+
196+ for (key , callbacks in keys (just_pressed_events ), values (just_pressed_events )) {
197+ if (key_just_pressed (int (key ))) {
198+ for (cb in callbacks ) {
199+ invoke (cb )
200+ }
201+ }
202+ }
203+
204+ for (key , callbacks in keys (pressed_events ), values (pressed_events )) {
205+ if (key_pressed (int (key ))) {
38206 for (cb in callbacks ) {
39207 invoke (cb )
40208 }
0 commit comments