#include "commands.h" #include "lzr.h" #include "cfg.h" #include int mouse_x, mouse_y, hovered = -1, editing = -1, hovered_instr = -1, was_down = 0; static const unsigned int commands[COM_LEN] = { COM_RIGHT, COM_RIGHT, COM_UP, COM_DOWN, COM_LEFT, COM_NOOP, COM_LEFT, COM_DOWN, COM_UP }; static unsigned int instructions[_COM_COUNT][2] = { {COM_LEFT, COM_NOOP}, {COM_RIGHT, COM_NOOP}, {COM_UP, COM_NOOP}, {COM_DOWN, COM_NOOP}, {COM_NOOP, COM_NOOP}, }; void commands_update(void) { LZR_MousePosition(&mouse_x, &mouse_y); hovered = -1; hovered_instr = -1; const int y = (mouse_y - CFG_TSIZE / 2) / (int)(CFG_TSIZE * 1.5); const int press = LZR_BUTTON(MOUSE_L) && !was_down; if (mouse_x > CFG_TSIZE / 2 && mouse_x <= CFG_TSIZE * 2.5) { if (y < 0 || y >= COM_LEN) return; hovered = y; if (press) editing = commands[y]; } if (editing != -1 && mouse_x > CFG_DWIDTH - CFG_TSIZE * 2.5) { if (y < 0 || y > 1) return; hovered_instr = y; if (press) { instructions[editing][hovered_instr] += 1; if (instructions[editing][hovered_instr] >= _COM_COUNT) instructions[editing][hovered_instr] = 0; } } was_down = LZR_BUTTON(MOUSE_L); } void commands_draw(void) { for (int i = 0; i < COM_LEN; i++) { const int dx = CFG_TSIZE / 2; const int dy = CFG_TSIZE / 2 + i * (int)(CFG_TSIZE * 1.5); const int cmd = commands[i]; const int blink = hovered == i || (LZR_GetTick() & 1); if (!blink) ; else if (cmd == editing) { LZR_DrawSetColor(rand() & 1, rand() & 1, rand() & 1, 1); LZR_DrawImage(cmd, dx, dy); } else { LZR_DrawSetColor(1, 1, 1, 1); LZR_DrawImage(cmd, dx, dy); } } if (editing != -1) { const int dx = CFG_DWIDTH - CFG_TSIZE * 2.5; for (int i = 0; i < 2; i++) { const int dy = CFG_TSIZE / 2 + i * (int)(CFG_TSIZE * 1.5); const int instr = instructions[editing][i]; const int blink = hovered_instr == i || (LZR_GetTick() & 1); if (!blink) continue; LZR_DrawSetColor(1, 1, 1, 1); LZR_DrawImage(instr, dx, dy); } } }