#include #include #include "input.h" void input_step(Input *input) { /* read all inputs */ clearevents(); /* for each key, update it's state */ for (int i = 0; i < KEYS_COUNT; ++i) { uint8_t *state = &input->states[i]; uint8_t key = input->keys[i]; /* get if the key is pressed */ bool pressed = keydown(key); /* update input status */ if (pressed) { *state = (*state == S_RELEASED || *state == S_UP) ? S_PRESSED : S_DOWN; } else { *state = (*state == S_PRESSED || *state == S_DOWN) ? S_RELEASED : S_UP; } } } void input_init(Input *input) { 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; for (int i = 0; i < KEYS_COUNT; ++i) { input->states[i] = S_UP; } } void input_draw_debug(Input *input) { for (int i = 0; i < KEYS_COUNT; ++i) { dprint(0, i * 10, C_BLACK, "%d", i); dprint(16, i * 10, C_BLACK, "%d", input->states[i]); dprint(32, i * 10, C_BLACK, "D%d", input_is_down(input, i)); dprint(48, i * 10, C_BLACK, "P%d", input_is_pressed(input, i)); dprint(64, i * 10, C_BLACK, "U%d", input_is_up(input, i)); dprint(80, i * 10, C_BLACK, "R%d", input_is_released(input, i)); dprint(96, i * 10, C_BLACK, "V%d", (int)input_is_down(input, i)); } } bool input_is_pressed(Input *input, uint8_t key) { return input->states[key] == S_PRESSED; } bool input_is_down(Input *input, uint8_t key) { return (input->states[key] == S_DOWN) || (input->states[key] == S_PRESSED); } bool input_is_released(Input *input, uint8_t key) { return input->states[key] == S_RELEASED; } bool input_is_up(Input *input, uint8_t key) { return (input->states[key] == S_UP) || (input->states[key] == S_RELEASED); }