aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-04-10 19:48:30 +0200
committerBad Diode <bd@badd10de.dev>2023-04-10 19:48:30 +0200
commit1b1765d3a27b97dc282b6295aa206d92c32f33d9 (patch)
tree1dd9f28c505724e386be892836dcd62482e7505f
parent2c9b9630b38e7e890daf65ef7b65beb1f5a5783f (diff)
downloaduxngba-1b1765d3a27b97dc282b6295aa206d92c32f33d9.tar.gz
uxngba-1b1765d3a27b97dc282b6295aa206d92c32f33d9.zip
Fix uxn_eval triggering too often on input handling
-rw-r--r--src/main.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/main.c b/src/main.c
index beb65e3..8d0eba8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -282,7 +282,15 @@ file_deo(u8 id, u8 *ram, u8 *d, u8 port) {
282 282
283void 283void
284console_deo(u8 *d, u8 port) { 284console_deo(u8 *d, u8 port) {
285 txt_printf("%c", d[port]); 285 switch(port) {
286 case 0x8:
287 txt_putc(d[port]);
288 return;
289 case 0x9:
290 txt_printf("ERROR: %c");
291 txt_putc(d[port]);
292 return;
293 }
286} 294}
287 295
288void 296void
@@ -307,7 +315,6 @@ emu_dei(Uxn *u, u8 addr) {
307 case 0xc0: return datetime_dei(&u->dev[d], p); 315 case 0xc0: return datetime_dei(&u->dev[d], p);
308 } 316 }
309 return u->dev[addr]; 317 return u->dev[addr];
310 return 0;
311} 318}
312 319
313void 320void
@@ -423,20 +430,27 @@ handle_input(Uxn *u) {
423 *flag &= ~0x80; 430 *flag &= ~0x80;
424 } 431 }
425 432
426 uxn_eval(u, GETVEC(d)); 433 if (key_prev != key_curr) {
434 uxn_eval(u, GETVEC(d));
435 }
427 d[3] = 0; 436 d[3] = 0;
428 } else if (ctrl_methods[ctrl_idx] == CONTROL_MOUSE) { 437 } else if (ctrl_methods[ctrl_idx] == CONTROL_MOUSE) {
429 u8 *d = &u->dev[0x90]; 438 u8 *d = &u->dev[0x90];
430 // Detect "mouse key press". 439 // Detect "mouse key press".
431 u8 flag = d[6]; 440 u8 flag = d[6];
441 bool event = false;
432 if (key_tap(KEY_B)) { 442 if (key_tap(KEY_B)) {
443 event = true;
433 flag |= 0x01; 444 flag |= 0x01;
434 } else if (key_released(KEY_B)) { 445 } else if (key_released(KEY_B)) {
446 event = true;
435 flag &= ~0x01; 447 flag &= ~0x01;
436 } 448 }
437 if (key_tap(KEY_A)) { 449 if (key_tap(KEY_A)) {
450 event = true;
438 flag |= 0x10; 451 flag |= 0x10;
439 } else if (key_released(KEY_A)) { 452 } else if (key_released(KEY_A)) {
453 event = true;
440 flag &= ~0x10; 454 flag &= ~0x10;
441 } 455 }
442 456
@@ -451,20 +465,26 @@ handle_input(Uxn *u) {
451 465
452 // Detect mouse movement. 466 // Detect mouse movement.
453 if (key_pressed(KEY_UP)) { 467 if (key_pressed(KEY_UP)) {
468 event = true;
454 mouse.y = CLAMP(mouse.y - MOUSE_DELTA, 0, SCREEN_HEIGHT - 8); 469 mouse.y = CLAMP(mouse.y - MOUSE_DELTA, 0, SCREEN_HEIGHT - 8);
455 } else if (key_pressed(KEY_DOWN)) { 470 } else if (key_pressed(KEY_DOWN)) {
471 event = true;
456 mouse.y = CLAMP(mouse.y + MOUSE_DELTA, 0, SCREEN_HEIGHT - 8); 472 mouse.y = CLAMP(mouse.y + MOUSE_DELTA, 0, SCREEN_HEIGHT - 8);
457 } 473 }
458 if (key_pressed(KEY_LEFT)) { 474 if (key_pressed(KEY_LEFT)) {
475 event = true;
459 mouse.x = CLAMP(mouse.x - MOUSE_DELTA, 0, SCREEN_WIDTH - 8); 476 mouse.x = CLAMP(mouse.x - MOUSE_DELTA, 0, SCREEN_WIDTH - 8);
460 } else if (key_pressed(KEY_RIGHT)) { 477 } else if (key_pressed(KEY_RIGHT)) {
478 event = true;
461 mouse.x = CLAMP(mouse.x + MOUSE_DELTA, 0, SCREEN_WIDTH - 8); 479 mouse.x = CLAMP(mouse.x + MOUSE_DELTA, 0, SCREEN_WIDTH - 8);
462 } 480 }
463 481
464 // Eval mouse. 482 // Eval mouse.
465 POKDEV(0x2, mouse.x); 483 POKDEV(0x2, mouse.x);
466 POKDEV(0x4, mouse.y); 484 POKDEV(0x4, mouse.y);
467 uxn_eval(u, GETVEC(d)); 485 if (event) {
486 uxn_eval(u, GETVEC(d));
487 }
468 } else if (ctrl_methods[ctrl_idx] == CONTROL_KEYBOARD) { 488 } else if (ctrl_methods[ctrl_idx] == CONTROL_KEYBOARD) {
469 u8 *d = &u->dev[0x80]; 489 u8 *d = &u->dev[0x80];
470 if (key_tap(KEY_LEFT)) { 490 if (key_tap(KEY_LEFT)) {