Single thread + inputs

This commit is contained in:
Marc
2023-01-21 12:09:39 +01:00
parent 8a93d29021
commit 41792a17d3
6 changed files with 176 additions and 52 deletions
+46
View File
@@ -0,0 +1,46 @@
#include "input.h"
#include <SDL2/SDL_scancode.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
keyEvent_t * events[SDL_NUM_SCANCODES];
int event_counts[SDL_NUM_SCANCODES];
void input_init(void) {
memset(events, 0, SDL_NUM_SCANCODES * sizeof(keyEvent_t *));
memset(event_counts, 0, SDL_NUM_SCANCODES * sizeof(int));
}
void input_poll(SDL_Scancode code) {
printf("Scancode: %d\n", code);
keyEvent_t * handlers = events[code];
for(int i = 0; i < event_counts[code]; i++) {
handlers[i]();
}
}
void input_listen(SDL_Scancode code, keyEvent_t handler) {
event_counts[code]++;
events[code] = (keyEvent_t *)realloc(events[code], event_counts[code] * sizeof(keyEvent_t));
events[code][event_counts[code] - 1] = handler;
}
void input_removeListener(SDL_Scancode code, keyEvent_t handler) {
bool found = false;
for(int i = 0; i < event_counts[code]; i++) {
if(events[code][i] == handler) {
found = true;
break;
}
if(found) {
if(i == event_counts[code] - 1) {
break;
}
events[code][i] = events[code][i + 1];
}
}
event_counts[code]--;
}