72 lines
1.1 KiB
C
72 lines
1.1 KiB
C
/* CODE FROM FISFOR */
|
|
|
|
#include "input.h"
|
|
#include <gint/keyboard.h>
|
|
|
|
static Input input;
|
|
|
|
void
|
|
input_init(void)
|
|
{
|
|
int i = K_COUNT;
|
|
while (i-- > 0) {
|
|
input.states[i] = KS_UP;
|
|
}
|
|
input.keys[K_A] = KEY_SHIFT;
|
|
input.keys[K_B] = KEY_ALPHA;
|
|
input.keys[K_X] = KEY_OPTN;
|
|
input.keys[K_LEFT] = KEY_LEFT;
|
|
input.keys[K_RIGHT] = KEY_RIGHT;
|
|
input.keys[K_UP] = KEY_UP;
|
|
input.keys[K_DOWN] = KEY_DOWN;
|
|
input.keys[K_EXIT] = KEY_MENU;
|
|
}
|
|
|
|
void
|
|
input_step(void)
|
|
{
|
|
int i = K_COUNT;
|
|
clearevents();
|
|
while (i-- > 0) {
|
|
const int kdown = keydown(input.keys[i]);
|
|
KeyState *const state = &input.states[i];
|
|
const KeyState prev_state = input.states[i];
|
|
switch (prev_state) {
|
|
case KS_UP:
|
|
case KS_RELEASE:
|
|
*state = (kdown) ? (KS_PRESS) : (KS_UP);
|
|
break;
|
|
case KS_DOWN:
|
|
case KS_PRESS:
|
|
*state = (kdown) ? (KS_DOWN) : (KS_RELEASE);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
int
|
|
input_down(Key k)
|
|
{
|
|
return input.states[k] == KS_DOWN || input.states[k] == KS_PRESS;
|
|
}
|
|
|
|
int
|
|
input_pressed(Key k)
|
|
{
|
|
return input.states[k] == KS_PRESS;
|
|
}
|
|
|
|
int
|
|
input_up(Key k)
|
|
{
|
|
return !input_down(k);
|
|
}
|
|
|
|
int
|
|
input_released(Key k)
|
|
{
|
|
return input.states[k] == KS_RELEASE;
|
|
}
|