#include "input.h" #include static struct Input input; void input_init(void) { int i = K_COUNT; while (i-- > 0) { input.states[i] = KS_UP; } 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; } 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; }