diff options
author | Bad Diode <bd@badd10de.dev> | 2021-05-24 09:31:32 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-05-24 09:31:32 +0200 |
commit | e07f072de45d23ab17661e3ea6bd3c707f04aa35 (patch) | |
tree | d4b17b9e3b1ceaa502dbd5f19c0d7dda377d39fa | |
parent | 4814d3b4ab1df2d48ad4cd20be90ec06386d077f (diff) | |
download | uxngba-e07f072de45d23ab17661e3ea6bd3c707f04aa35.tar.gz uxngba-e07f072de45d23ab17661e3ea6bd3c707f04aa35.zip |
Enable setting macros to control available ctrl devices
-rw-r--r-- | src/main.c | 30 | ||||
-rw-r--r-- | src/uxn/devices/ppu.c | 4 |
2 files changed, 21 insertions, 13 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)) { |
diff --git a/src/uxn/devices/ppu.c b/src/uxn/devices/ppu.c index 7a4429c..f626604 100644 --- a/src/uxn/devices/ppu.c +++ b/src/uxn/devices/ppu.c | |||
@@ -401,7 +401,7 @@ initppu(Ppu *p, u8 hor, u8 ver, u8 pad) { | |||
401 | for (size_t i = 0; i < sizeof(keyboard) / sizeof(keyboard[0]); ++i) { | 401 | for (size_t i = 0; i < sizeof(keyboard) / sizeof(keyboard[0]); ++i) { |
402 | keyboard[i].x = tile_x * 8; | 402 | keyboard[i].x = tile_x * 8; |
403 | keyboard[i].y = tile_y * 8; | 403 | keyboard[i].y = tile_y * 8; |
404 | OBJ_ATTR_0(i) = OBJ_SHAPE_SQUARE | OBJ_Y_COORD(keyboard[i].y); | 404 | OBJ_ATTR_0(i) = OBJ_SHAPE_SQUARE | OBJ_Y_COORD(keyboard[i].y) | OBJ_HIDDEN; |
405 | OBJ_ATTR_1(i) = OBJ_SIZE_SMALL | OBJ_X_COORD(keyboard[i].x); | 405 | OBJ_ATTR_1(i) = OBJ_SIZE_SMALL | OBJ_X_COORD(keyboard[i].x); |
406 | OBJ_ATTR_2(i) = (SPRITE_START_IDX + keyboard[i].symbol) | OBJ_PAL_BANK(0); | 406 | OBJ_ATTR_2(i) = (SPRITE_START_IDX + keyboard[i].symbol) | OBJ_PAL_BANK(0); |
407 | tile_x++; | 407 | tile_x++; |
@@ -410,7 +410,7 @@ initppu(Ppu *p, u8 hor, u8 ver, u8 pad) { | |||
410 | tile_y++; | 410 | tile_y++; |
411 | } | 411 | } |
412 | } | 412 | } |
413 | OBJ_ATTR_0(127) = OBJ_SHAPE_SQUARE | OBJ_Y_COORD(keyboard[cursor_position].y); | 413 | OBJ_ATTR_0(127) = OBJ_SHAPE_SQUARE | OBJ_Y_COORD(keyboard[cursor_position].y) | OBJ_HIDDEN; |
414 | OBJ_ATTR_1(127) = OBJ_SIZE_SMALL | OBJ_X_COORD(keyboard[cursor_position].x); | 414 | OBJ_ATTR_1(127) = OBJ_SIZE_SMALL | OBJ_X_COORD(keyboard[cursor_position].x); |
415 | OBJ_ATTR_2(127) = (SPRITE_START_IDX + 0xdb) | OBJ_PAL_BANK(3); | 415 | OBJ_ATTR_2(127) = (SPRITE_START_IDX + 0xdb) | OBJ_PAL_BANK(3); |
416 | 416 | ||