diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 30 |
1 files changed, 19 insertions, 11 deletions
@@ -30,8 +30,8 @@ WITH REGARD TO THIS SOFTWARE. | |||
30 | #define TEXT_LAYER ppu.fg | 30 | #define TEXT_LAYER ppu.fg |
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | #ifndef DEFAULT_CONTROL | 33 | #ifndef CONTROL_METHODS |
34 | #define DEFAULT_CONTROL CONTROL_CONTROLLER | 34 | #define CONTROL_METHODS CONTROL_CONTROLLER,CONTROL_MOUSE,CONTROL_KEYBOARD |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | typedef enum { | 37 | typedef enum { |
@@ -40,7 +40,10 @@ typedef enum { | |||
40 | CONTROL_KEYBOARD, | 40 | CONTROL_KEYBOARD, |
41 | } ControlMethod; | 41 | } ControlMethod; |
42 | 42 | ||
43 | static ControlMethod control_method = CONTROL_KEYBOARD; | 43 | const ControlMethod ctrl_methods[] = { |
44 | CONTROL_METHODS | ||
45 | }; | ||
46 | static ControlMethod ctrl_idx = 0; | ||
44 | 47 | ||
45 | #define MOUSE_DELTA 1 | 48 | #define MOUSE_DELTA 1 |
46 | typedef struct Mouse { | 49 | typedef struct Mouse { |
@@ -167,12 +170,12 @@ void | |||
167 | handle_input(Uxn *u) { | 170 | handle_input(Uxn *u) { |
168 | poll_keys(); | 171 | poll_keys(); |
169 | if (key_tap(KEY_SELECT)) { | 172 | if (key_tap(KEY_SELECT)) { |
170 | switch (control_method) { | 173 | // Reset control variables on method switch. |
174 | switch (ctrl_methods[ctrl_idx]) { | ||
171 | case CONTROL_CONTROLLER: { | 175 | case CONTROL_CONTROLLER: { |
172 | devctrl->dat[2] = 0; | 176 | devctrl->dat[2] = 0; |
173 | evaluxn(u, mempeek16(devctrl->dat, 0)); | 177 | evaluxn(u, mempeek16(devctrl->dat, 0)); |
174 | devctrl->dat[3] = 0; | 178 | devctrl->dat[3] = 0; |
175 | control_method = CONTROL_MOUSE; | ||
176 | } break; | 179 | } break; |
177 | case CONTROL_MOUSE: { | 180 | case CONTROL_MOUSE: { |
178 | devmouse->dat[6] = 0; | 181 | devmouse->dat[6] = 0; |
@@ -180,17 +183,22 @@ handle_input(Uxn *u) { | |||
180 | mempoke16(devmouse->dat, 0x2, -10); | 183 | mempoke16(devmouse->dat, 0x2, -10); |
181 | mempoke16(devmouse->dat, 0x4, -10); | 184 | mempoke16(devmouse->dat, 0x4, -10); |
182 | evaluxn(u, mempeek16(devmouse->dat, 0)); | 185 | evaluxn(u, mempeek16(devmouse->dat, 0)); |
183 | toggle_keyboard(); | ||
184 | control_method = CONTROL_KEYBOARD; | ||
185 | } break; | 186 | } break; |
186 | case CONTROL_KEYBOARD: { | 187 | case CONTROL_KEYBOARD: { |
187 | toggle_keyboard(); | 188 | toggle_keyboard(); |
188 | control_method = CONTROL_CONTROLLER; | ||
189 | } break; | 189 | } break; |
190 | } | 190 | } |
191 | |||
192 | // Update ctrl_idx. | ||
193 | ctrl_idx = ctrl_idx + 1 > LEN(ctrl_methods) - 1 ? 0 : ctrl_idx + 1; | ||
194 | |||
195 | // Initialize controller variables here. | ||
196 | if (ctrl_methods[ctrl_idx] == CONTROL_KEYBOARD) { | ||
197 | toggle_keyboard(); | ||
198 | } | ||
191 | } | 199 | } |
192 | 200 | ||
193 | if (control_method == CONTROL_CONTROLLER) { | 201 | if (ctrl_methods[ctrl_idx] == CONTROL_CONTROLLER) { |
194 | // TODO: We don't need ifs if we use KEY_INPUTS directly and mayvbe just | 202 | // TODO: We don't need ifs if we use KEY_INPUTS directly and mayvbe just |
195 | // swap some things if needed. | 203 | // swap some things if needed. |
196 | u8 *flag = &devctrl->dat[2]; | 204 | u8 *flag = &devctrl->dat[2]; |
@@ -237,7 +245,7 @@ handle_input(Uxn *u) { | |||
237 | 245 | ||
238 | evaluxn(u, mempeek16(devctrl->dat, 0)); | 246 | evaluxn(u, mempeek16(devctrl->dat, 0)); |
239 | devctrl->dat[3] = 0; | 247 | devctrl->dat[3] = 0; |
240 | } else if (control_method == CONTROL_MOUSE) { | 248 | } else if (ctrl_methods[ctrl_idx] == CONTROL_MOUSE) { |
241 | // Detect "mouse key press". | 249 | // Detect "mouse key press". |
242 | u8 flag = devmouse->dat[6]; | 250 | u8 flag = devmouse->dat[6]; |
243 | if (key_tap(KEY_B)) { | 251 | if (key_tap(KEY_B)) { |
@@ -276,7 +284,7 @@ handle_input(Uxn *u) { | |||
276 | mempoke16(devmouse->dat, 0x2, mouse.x); | 284 | mempoke16(devmouse->dat, 0x2, mouse.x); |
277 | mempoke16(devmouse->dat, 0x4, mouse.y); | 285 | mempoke16(devmouse->dat, 0x4, mouse.y); |
278 | evaluxn(u, mempeek16(devmouse->dat, 0)); | 286 | evaluxn(u, mempeek16(devmouse->dat, 0)); |
279 | } else if (control_method == CONTROL_KEYBOARD) { | 287 | } else if (ctrl_methods[ctrl_idx] == CONTROL_KEYBOARD) { |
280 | if (key_tap(KEY_LEFT)) { | 288 | if (key_tap(KEY_LEFT)) { |
281 | update_cursor(cursor_position - 1); | 289 | update_cursor(cursor_position - 1); |
282 | } else if (key_tap(KEY_RIGHT)) { | 290 | } else if (key_tap(KEY_RIGHT)) { |