This commit is contained in:
taiyu 2015-08-20 04:24:39 -07:00
parent 1d9b73ed67
commit ba6034e8c8
2 changed files with 18 additions and 20 deletions

View file

@ -4,14 +4,13 @@
#include "input_state.h"
enum { KEY_STATE_MAX_LENGTH = 64 };
#define KEY_STATE_MAX_LENGTH 64
static keycode key_state_array[KEY_STATE_MAX_LENGTH];
static uint8_t key_state_length = 0;
static uint8_t find_key(keycode key) {
int i;
for (i = 0; i < key_state_length; ++i) {
for (i = 0; i < KEY_STATE_MAX_LENGTH; ++i) {
if (key_state_array[i] == key) {
break;
}
@ -20,26 +19,25 @@ static uint8_t find_key(keycode key) {
}
bool check_key(keycode key) {
return find_key(key) < key_state_length;
return find_key(key) < KEY_STATE_MAX_LENGTH;
}
void press_key(keycode key) {
// Check if key exists
if (!check_key(key)) {
// Check that we dont exceed buffer length
if (key_state_length < KEY_STATE_MAX_LENGTH) {
key_state_array[key_state_length++] = key;
int insert = find_key(0);
if (insert < KEY_STATE_MAX_LENGTH) {
key_state_array[insert] = key;
}
}
}
void release_key(keycode key) {
uint8_t index = find_key(key);
if (index < key_state_length) {
if (index < KEY_STATE_MAX_LENGTH) {
//shift it over and remove key
memmove(&key_state_array[index],
&key_state_array[index + 1],
sizeof(*key_state_array) * (--key_state_length - index));
key_state_array[index] = 0;
}
}