start game physics

This commit is contained in:
2023-01-22 13:09:38 +01:00
parent 5c6b6513c3
commit b7ca43006a
9 changed files with 154 additions and 39 deletions
+55 -17
View File
@@ -5,42 +5,80 @@
#include <stdbool.h>
keyEvent_t * events[SDL_NUM_SCANCODES];
int event_counts[SDL_NUM_SCANCODES];
keyEvent_t * eventsKeyDown[SDL_NUM_SCANCODES];
int eventKeyDown_counts[SDL_NUM_SCANCODES];
keyEvent_t * eventsKeyUp[SDL_NUM_SCANCODES];
int eventKeyUp_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));
memset(eventsKeyDown, 0, SDL_NUM_SCANCODES * sizeof(keyEvent_t *));
memset(eventKeyDown_counts, 0, SDL_NUM_SCANCODES * sizeof(int));
memset(eventsKeyUp, 0, SDL_NUM_SCANCODES * sizeof(keyEvent_t *));
memset(eventKeyUp_counts, 0, SDL_NUM_SCANCODES * sizeof(int));
}
void input_poll(SDL_Scancode code) {
void input_pollKeyDown(SDL_Scancode code) {
printf("Scancode: %d\n", code);
keyEvent_t * handlers = events[code];
for(int i = 0; i < event_counts[code]; i++) {
keyEvent_t * handlers = eventsKeyDown[code];
for(int i = 0; i < eventKeyDown_counts[code]; i++) {
handlers[i]();
}
}
void input_pollKeyUp(SDL_Scancode code){
printf("Scancode: %d\n", code);
keyEvent_t * handlers = eventsKeyUp[code];
for(int i = 0; i < eventKeyUp_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_listenKeyDown(SDL_Scancode code, keyEvent_t handler) {
eventKeyDown_counts[code]++;
eventsKeyDown[code] = (keyEvent_t *)realloc(eventsKeyDown[code], eventKeyDown_counts[code] * sizeof(keyEvent_t));
eventsKeyDown[code][eventKeyDown_counts[code] - 1] = handler;
}
void input_removeListener(SDL_Scancode code, keyEvent_t handler) {
void input_listenKeyUp(SDL_Scancode code, keyEvent_t handler) {
eventKeyUp_counts[code]++;
eventsKeyUp[code] = (keyEvent_t *)realloc(eventsKeyUp[code], eventKeyUp_counts[code] * sizeof(keyEvent_t));
eventsKeyUp[code][eventKeyUp_counts[code] - 1] = handler;
}
void input_removeKeyDownListener(SDL_Scancode code, keyEvent_t handler) {
bool found = false;
for(int i = 0; i < event_counts[code]; i++) {
if(events[code][i] == handler) {
for(int i = 0; i < eventKeyDown_counts[code]; i++) {
if(eventsKeyDown[code][i] == handler) {
found = true;
break;
}
if(found) {
if(i == event_counts[code] - 1) {
if(i == eventKeyDown_counts[code] - 1) {
break;
}
events[code][i] = events[code][i + 1];
eventsKeyDown[code][i] = eventsKeyDown[code][i + 1];
}
}
event_counts[code]--;
eventKeyDown_counts[code]--;
}
void input_removeKeyUpListener(SDL_Scancode code, keyEvent_t handler) {
bool found = false;
for(int i = 0; i < eventKeyUp_counts[code]; i++) {
if(eventsKeyUp[code][i] == handler) {
found = true;
break;
}
if(found) {
if(i == eventKeyUp_counts[code] - 1) {
break;
}
eventsKeyUp[code][i] = eventsKeyUp[code][i + 1];
}
}
eventKeyUp_counts[code]--;
}