mirror of
https://github.com/mlaux/gb6.git
synced 2026-10-24 16:02:16 +00:00
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
#include <Events.h>
|
|
|
|
#include "../src/dmg.h"
|
|
#include "emulator.h"
|
|
#include "input.h"
|
|
#include "dialogs.h"
|
|
|
|
// indices match keyMappings order
|
|
// (up, down, left, right, a, b, select, start)
|
|
static struct {
|
|
int button;
|
|
int field;
|
|
} buttonMap[8] = {
|
|
{ BUTTON_UP, FIELD_JOY },
|
|
{ BUTTON_DOWN, FIELD_JOY },
|
|
{ BUTTON_LEFT, FIELD_JOY },
|
|
{ BUTTON_RIGHT, FIELD_JOY },
|
|
{ BUTTON_A, FIELD_ACTION },
|
|
{ BUTTON_B, FIELD_ACTION },
|
|
{ BUTTON_SELECT, FIELD_ACTION },
|
|
{ BUTTON_START, FIELD_ACTION }
|
|
};
|
|
|
|
#define KEY_COMMAND 0x37
|
|
|
|
#define KEY_IS_DOWN(raw, code) (((raw)[(code) >> 3] >> ((code) & 7)) & 1)
|
|
|
|
// edge-detect against the last poll
|
|
void PollGameInput(void)
|
|
{
|
|
KeyMap keys;
|
|
unsigned char *raw = (unsigned char *) keys;
|
|
static unsigned char prev[8];
|
|
int k, cmd;
|
|
|
|
GetKeys(keys);
|
|
cmd = KEY_IS_DOWN(raw, KEY_COMMAND);
|
|
|
|
for (k = 0; k < 8; k++) {
|
|
int code = keyMappings[k];
|
|
// treat everything as released while a menu shortcut is being typed
|
|
unsigned char down = cmd ? 0 : KEY_IS_DOWN(raw, code);
|
|
|
|
if (down == prev[k]) {
|
|
continue;
|
|
}
|
|
prev[k] = down;
|
|
dmg_set_button(&dmg, buttonMap[k].field, buttonMap[k].button, down);
|
|
}
|
|
}
|