crystal-tower/src/input.c

80 lines
1.4 KiB
C

#include "input.h"
#include "raygint/keyboard.h"
static struct Input input;
void
input_init(void)
{
int i = K_COUNT;
while (i-- > 0) {
input.states[i] = KS_UP;
}
#ifdef GINT
input.keys[K_JUMP] = KEY_SHIFT;
input.keys[K_PUNCH] = KEY_ALPHA;
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_EXIT;
#endif
#ifdef RAYLIB
input.keys[K_JUMP] = KEY_SPACE;
input.keys[K_PUNCH] = KEY_LEFT_SHIFT;
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_ESCAPE;
#endif
}
void
input_update(void)
{
int i = K_COUNT;
clearevents();
while (i-- > 0) {
const int kdown = keydown(input.keys[i]);
enum KeyState *const state = &input.states[i];
const enum 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(enum Key k)
{
return input.states[k] == KS_DOWN || input.states[k] == KS_PRESS;
}
int
input_pressed(enum Key k)
{
return input.states[k] == KS_PRESS;
}
int
input_up(enum Key k)
{
return !input_down(k);
}
int
input_released(enum Key k)
{
return input.states[k] == KS_RELEASE;
}