summaryrefslogtreecommitdiff
path: root/src/engine.c
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2023-10-30 22:11:54 +0000
committer0scar <qgt268@alumni.ku.dk>2023-10-30 22:12:34 +0000
commit5c0311ff3095a5dd30fb15db54aa394498dd2bcf (patch)
tree2abb0e3dc145e4372fcf07aeeb736279d00471e5 /src/engine.c
parent3e3fe3d42206dc14baca2f50445e6fe8bb2d2480 (diff)
The great formattening!
Diffstat (limited to 'src/engine.c')
-rw-r--r--src/engine.c1182
1 files changed, 592 insertions, 590 deletions
diff --git a/src/engine.c b/src/engine.c
index ecc6ec1..0bcb8da 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -1,40 +1,39 @@
-#include <stdlib.h>
#include <errno.h>
+#include <stdlib.h>
#include <string.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
-#if defined (_WIN32) || defined (__WIN32__) || defined (WIN32)
- /* include winapi */
-#elif defined (__APPLE__)
- /* mac includes */
-#elif defined (__linux) || defined (__linux__) || defined (linux)
+#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+/* include winapi */
+#elif defined(__APPLE__)
+/* mac includes */
+#elif defined(__linux) || defined(__linux__) || defined(linux)
#include <unistd.h>
#endif
-
#define ENGINE_INTERNALS
-#include <engine/engine.h>
#include <engine/btree.h>
+#include <engine/engine.h>
#include <engine/hashmap.h>
#include <engine/list.h>
#include <engine/state.h>
-//#include <states/titlescreen.h>
-//#include <states/gameover.h>
+// #include <states/titlescreen.h>
+// #include <states/gameover.h>
#define DEFAULT_NUM_PROCS 8
#ifdef BENCHMARK
-#define BENCHEXPR(timevar, expr) { \
- u32 t = SDL_GetTicks(); \
- expr \
- timevar += SDL_GetTicks() - t; \
-}
+#define BENCHEXPR(timevar, expr) \
+ { \
+ u32 t = SDL_GetTicks(); \
+ expr timevar += SDL_GetTicks() - t; \
+ }
extern i32 drawcall_len;
@@ -42,24 +41,22 @@ extern i32 drawcall_len;
#define BENCHEXPR(timevar, expr) expr
#endif
-static u64 FPS_CAP = 50;
-Platform *GLOBAL_PLATFORM = NULL;
+static u64 FPS_CAP = 50;
+Platform* GLOBAL_PLATFORM = NULL;
-input_callback_t *callbacks[128];
+input_callback_t* callbacks[128];
usize callbacks_len;
-i32 nproc(void) {
- return SDL_GetCPUCount();
-}
+i32 nproc(void) { return SDL_GetCPUCount(); }
-i32 cmp_int(const void *a, const void *b) {
- const i32 *x = a;
- const i32 *y = b;
+i32 cmp_int(const void* a, const void* b) {
+ const i32* x = a;
+ const i32* y = b;
- return *x - *y;
+ return *x - *y;
}
-v2_i32 get_canvas_size(SDL_Renderer *renderer) {
+v2_i32 get_canvas_size(SDL_Renderer* renderer) {
v2_i32 realsize;
SDL_GetRendererOutputSize(renderer, &(realsize.x), &(realsize.y));
@@ -67,707 +64,712 @@ v2_i32 get_canvas_size(SDL_Renderer *renderer) {
return realsize;
}
-Texture *load_texture(SDL_Renderer *render, const TextureSpec *ts) {
- SDL_Texture* new_texture = NULL;
- SDL_Surface* loaded_surface = NULL;
- Texture *t = NULL;
+Texture* load_texture(SDL_Renderer* render, const TextureSpec* ts) {
+ SDL_Texture* new_texture = NULL;
+ SDL_Surface* loaded_surface = NULL;
+ Texture* t = NULL;
- if (ts == NULL) {
- ERROR("Invalid TextureSpec\n");
- return NULL;
- }
+ if (ts == NULL) {
+ ERROR("Invalid TextureSpec\n");
+ return NULL;
+ }
- loaded_surface = IMG_Load(ts->path);
- if (loaded_surface == NULL) {
- ERROR("Unable to load image \"%s\"!\n", ts->path);
- ERROR("SDL_image Error: %s\n", IMG_GetError());
- return NULL;
- }
+ loaded_surface = IMG_Load(ts->path);
+ if (loaded_surface == NULL) {
+ ERROR("Unable to load image \"%s\"!\n", ts->path);
+ ERROR("SDL_image Error: %s\n", IMG_GetError());
+ return NULL;
+ }
- const i32 tw = loaded_surface->w / ts->width;
+ const i32 tw = loaded_surface->w / ts->width;
- SDL_SetColorKey(loaded_surface, SDL_TRUE,
- SDL_MapRGB(loaded_surface->format, 0xFF, 0x00, 0xFF));
+ SDL_SetColorKey(loaded_surface, SDL_TRUE,
+ SDL_MapRGB(loaded_surface->format, 0xFF, 0x00, 0xFF));
- /*Create texture from surface pixels */
- new_texture = SDL_CreateTextureFromSurface(render, loaded_surface);
- if (new_texture == NULL) {
- ERROR("Unable to create texture from \"%s\"!\n", ts->path);
- ERROR("SDL Error: %s\n", SDL_GetError());
- }
+ /*Create texture from surface pixels */
+ new_texture = SDL_CreateTextureFromSurface(render, loaded_surface);
+ if (new_texture == NULL) {
+ ERROR("Unable to create texture from \"%s\"!\n", ts->path);
+ ERROR("SDL Error: %s\n", SDL_GetError());
+ }
- /*Get rid of old loaded surface */
- SDL_FreeSurface(loaded_surface);
+ /*Get rid of old loaded surface */
+ SDL_FreeSurface(loaded_surface);
- t = (Texture*)malloc(sizeof(Texture));
- t->texture = new_texture;
- /* Assigning const value */
- *(i32*)&t->tilesize = tw;
- *(i32*)&t->width = ts->width;
- *(i32*)&t->height = ts->height;
+ t = (Texture*)malloc(sizeof(Texture));
+ t->texture = new_texture;
+ /* Assigning const value */
+ *(i32*)&t->tilesize = tw;
+ *(i32*)&t->width = ts->width;
+ *(i32*)&t->height = ts->height;
- return t;
+ return t;
}
-void engine_update_window(Window *w, SDL_WindowEvent *e) {
- switch (e->event) {
- case SDL_WINDOWEVENT_NONE:
- case SDL_WINDOWEVENT_SHOWN:
- case SDL_WINDOWEVENT_HIDDEN:
- case SDL_WINDOWEVENT_EXPOSED:
- case SDL_WINDOWEVENT_MOVED:
- break;
- case SDL_WINDOWEVENT_RESIZED:
- w->windowsize = get_canvas_size(w->renderer);
- LOG("Resized window to %dx%d", w->windowsize.x, w->windowsize.y);
- ui_resolve_constraints();
- if (w->game_w != NULL && w->game_h != NULL) {
- *w->game_h = w->windowsize.x;
- *w->game_w = w->windowsize.y;
- }
- break;
- case SDL_WINDOWEVENT_SIZE_CHANGED:
- case SDL_WINDOWEVENT_MINIMIZED:
- case SDL_WINDOWEVENT_MAXIMIZED:
- case SDL_WINDOWEVENT_RESTORED:
- case SDL_WINDOWEVENT_ENTER:
- case SDL_WINDOWEVENT_LEAVE:
- case SDL_WINDOWEVENT_FOCUS_GAINED:
- case SDL_WINDOWEVENT_FOCUS_LOST:
- case SDL_WINDOWEVENT_CLOSE:
- case SDL_WINDOWEVENT_TAKE_FOCUS:
- case SDL_WINDOWEVENT_HIT_TEST:
- break;
- default:
- WARN("Unhandled window event 0x%04x", (i32)e->event);
- break;
- }
- return;
+void engine_update_window(Window* w, SDL_WindowEvent* e) {
+ switch (e->event) {
+ case SDL_WINDOWEVENT_NONE:
+ case SDL_WINDOWEVENT_SHOWN:
+ case SDL_WINDOWEVENT_HIDDEN:
+ case SDL_WINDOWEVENT_EXPOSED:
+ case SDL_WINDOWEVENT_MOVED:
+ break;
+ case SDL_WINDOWEVENT_RESIZED:
+ w->windowsize = get_canvas_size(w->renderer);
+ LOG("Resized window to %dx%d", w->windowsize.x, w->windowsize.y);
+ ui_resolve_constraints();
+ if (w->game_w != NULL && w->game_h != NULL) {
+ *w->game_h = w->windowsize.x;
+ *w->game_w = w->windowsize.y;
+ }
+ break;
+ case SDL_WINDOWEVENT_SIZE_CHANGED:
+ case SDL_WINDOWEVENT_MINIMIZED:
+ case SDL_WINDOWEVENT_MAXIMIZED:
+ case SDL_WINDOWEVENT_RESTORED:
+ case SDL_WINDOWEVENT_ENTER:
+ case SDL_WINDOWEVENT_LEAVE:
+ case SDL_WINDOWEVENT_FOCUS_GAINED:
+ case SDL_WINDOWEVENT_FOCUS_LOST:
+ case SDL_WINDOWEVENT_CLOSE:
+ case SDL_WINDOWEVENT_TAKE_FOCUS:
+ case SDL_WINDOWEVENT_HIT_TEST:
+ break;
+ default:
+ WARN("Unhandled window event 0x%04x", (i32)e->event);
+ break;
+ }
+ return;
}
-Platform *engine_init(
- const char *windowtitle,
- v2_i32 windowsize,
- const f32 render_scale,
- const u32 flags,
- const usize initial_memory,
- const FontSpec *fonts[],
- const TextureSpec *textures[]) {
+Platform* engine_init(const char* windowtitle, v2_i32 windowsize,
+ const f32 render_scale, const u32 flags,
+ const usize initial_memory, const FontSpec* fonts[],
+ const TextureSpec* textures[]) {
#ifdef BENCHMARK
- u32 init_start = SDL_GetTicks();
+ u32 init_start = SDL_GetTicks();
#endif
-#if defined (__linux) || defined (__linux__) || defined (linux)
- {
- pid_t pid = getpid();
- INFO("Starting with pid %lu", pid);
- }
+#if defined(__linux) || defined(__linux__) || defined(linux)
+ {
+ pid_t pid = getpid();
+ INFO("Starting with pid %lu", pid);
+ }
#endif
- Platform *p = (Platform*)malloc(sizeof(Platform));
- Window *w = (Window*)malloc(sizeof(Window));
- SDL_Window *window = NULL;
- SDL_Renderer *renderer = NULL;
-
- /* initialize resources */
- struct Resources *resources = (struct Resources*)malloc(sizeof(struct Resources));
- resources->textures_len = 0;
- resources->fonts_len = 0;
- resources->texturepaths_len = 0;
- resources->fontpaths_len = 0;
- resources->texture_paths = NULL;
- resources->font_paths = NULL;
- resources->textures = NULL;
- resources->fonts = NULL;
-
+ Platform* p = (Platform*)malloc(sizeof(Platform));
+ Window* w = (Window*)malloc(sizeof(Window));
+ SDL_Window* window = NULL;
+ SDL_Renderer* renderer = NULL;
- { /* Init subsystems */
- INFO_("initializing sdl...");
- if (SDL_Init(SDL_INIT_VIDEO) < 0) {
- ERROR("failed to initialize sdl: %s\n", SDL_GetError());
- exit(EXIT_FAILURE);
- } else printf("ok\n");
+ /* initialize resources */
+ struct Resources* resources =
+ (struct Resources*)malloc(sizeof(struct Resources));
+ resources->textures_len = 0;
+ resources->fonts_len = 0;
+ resources->texturepaths_len = 0;
+ resources->fontpaths_len = 0;
+ resources->texture_paths = NULL;
+ resources->font_paths = NULL;
+ resources->textures = NULL;
+ resources->fonts = NULL;
- SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
- SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
- SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
- SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
+ { /* Init subsystems */
+ INFO_("initializing sdl...");
+ if (SDL_Init(SDL_INIT_VIDEO) < 0) {
+ ERROR("failed to initialize sdl: %s\n", SDL_GetError());
+ exit(EXIT_FAILURE);
+ } else
+ printf("ok\n");
- INFO_("creating window...");
- window = SDL_CreateWindow(windowtitle,
- SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
- windowsize.x, windowsize.y,
- SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS | flags);
+ SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
+ SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
+ SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+ SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
- if (window == NULL) {
- ERROR("failed to create window: %s\n", SDL_GetError());
- exit(EXIT_FAILURE);
- } else printf("ok\n");
+ INFO_("creating window...");
+ window = SDL_CreateWindow(
+ windowtitle, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
+ windowsize.x, windowsize.y,
+ SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_INPUT_FOCUS |
+ SDL_WINDOW_MOUSE_FOCUS | flags);
- INFO_("creating renderer...");
- renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
- if (renderer == NULL) {
- ERROR("failed to create renderer: %s\n", SDL_GetError());
- exit(EXIT_FAILURE);
- } else printf("ok\n");
+ if (window == NULL) {
+ ERROR("failed to create window: %s\n", SDL_GetError());
+ exit(EXIT_FAILURE);
+ } else
+ printf("ok\n");
- INFO_("initializing sdl_image...");
- if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG) {
- ERROR("failed to initialize sdl_image png support\n");
- exit(EXIT_FAILURE);
- } else printf("ok\n");
+ INFO_("creating renderer...");
+ renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
+ if (renderer == NULL) {
+ ERROR("failed to create renderer: %s\n", SDL_GetError());
+ exit(EXIT_FAILURE);
+ } else
+ printf("ok\n");
- INFO_("initializing sdl_ttf...");
- if (TTF_Init() == -1) {
- ERROR("failed to initialize sdl_ttf: %s\n", TTF_GetError());
- exit(EXIT_FAILURE);
- } else printf("ok\n");
- }
+ INFO_("initializing sdl_image...");
+ if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG) {
+ ERROR("failed to initialize sdl_image png support\n");
+ exit(EXIT_FAILURE);
+ } else
+ printf("ok\n");
+ INFO_("initializing sdl_ttf...");
+ if (TTF_Init() == -1) {
+ ERROR("failed to initialize sdl_ttf: %s\n", TTF_GetError());
+ exit(EXIT_FAILURE);
+ } else
+ printf("ok\n");
+ }
- { /* Resource loading */
+ { /* Resource loading */
- /* Count resources */
- usize n_textures = 0;
- usize n_fonts = 0;
+ /* Count resources */
+ usize n_textures = 0;
+ usize n_fonts = 0;
- if (textures != NULL) while (textures[n_textures] != NULL) n_textures++;
- if (fonts != NULL) while (fonts[n_fonts] != NULL) n_fonts++;
+ if (textures != NULL)
+ while (textures[n_textures] != NULL) n_textures++;
+ if (fonts != NULL)
+ while (fonts[n_fonts] != NULL) n_fonts++;
- INFO("Number of textures: "TERM_COLOR_YELLOW"%d"TERM_COLOR_RESET, n_textures);
- INFO("Number of fonts: "TERM_COLOR_YELLOW"%d"TERM_COLOR_RESET, n_fonts);
+ INFO("Number of textures: " TERM_COLOR_YELLOW "%d" TERM_COLOR_RESET,
+ n_textures);
+ INFO("Number of fonts: " TERM_COLOR_YELLOW "%d" TERM_COLOR_RESET, n_fonts);
+ /* Save the textures and fonts, if we should need to reload them later */
+ resources->texture_paths = (TextureSpec**)textures;
+ resources->font_paths = (FontSpec**)fonts;
- /* Save the textures and fonts, if we should need to reload them later */
- resources->texture_paths = (TextureSpec**)textures;
- resources->font_paths = (FontSpec**)fonts;
+ /* Allocate memory for textures and fonts */
+ resources->textures = (Texture**)malloc(sizeof(Texture*) * n_textures);
+ resources->fonts = (TTF_Font**)malloc(sizeof(TTF_Font*) * n_fonts);
+ resources->textures_size = n_textures;
- /* Allocate memory for textures and fonts */
- resources->textures = (Texture**)malloc(sizeof(Texture*) * n_textures);
- resources->fonts = (TTF_Font**)malloc(sizeof(TTF_Font*) * n_fonts);
- resources->textures_size = n_textures;
+ for (usize i = 0; i < n_textures; i++) resources->textures[i] = NULL;
+ for (usize i = 0; i < n_fonts; i++) resources->fonts[i] = NULL;
- for (usize i = 0; i < n_textures; i++) resources->textures[i] = NULL;
- for (usize i = 0; i < n_fonts; i++) resources->fonts[i] = NULL;
+ /* Load textures */
+ for (usize i = 0; i < n_textures; i++) {
+ Texture* t = NULL;
+ INFO_("loading texture \"" TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET
+ "\"...",
+ textures[i]->path);
- /* Load textures */
- for (usize i = 0; i < n_textures; i++) {
- Texture *t = NULL;
- INFO_("loading texture \""
- TERM_COLOR_YELLOW"%s"TERM_COLOR_RESET
- "\"...", textures[i]->path);
+ t = load_texture(renderer, textures[i]);
+ if (t == NULL) {
+ puts("");
+ ERROR("failed to load texture\n");
+ exit(EXIT_FAILURE);
+ }
- t = load_texture(renderer, textures[i]);
- if (t == NULL) {
- puts("");
- ERROR("failed to load texture\n");
- exit(EXIT_FAILURE);
- }
+ if (t->tilesize < 8) {
+ puts("");
+ ERROR("texture too small!\n");
+ exit(EXIT_FAILURE);
+ }
- if (t->tilesize < 8) {
- puts("");
- ERROR("texture too small!\n");
- exit(EXIT_FAILURE);
- }
+ if (t->texture == NULL) {
+ puts("");
+ ERROR("failed to load texture\n");
+ } else {
+ printf("ok\n");
+ resources->textures[i] = t;
+ resources->textures_len++;
+ }
+ }
- if (t->texture == NULL) {
- puts("");
- ERROR("failed to load texture\n");
- } else {
- printf("ok\n");
- resources->textures[i] = t;
- resources->textures_len++;
- }
- }
+ /* Load fonts */
+ for (usize i = 0; i < n_fonts; i++) {
+ INFO_("loading font \"" TERM_COLOR_YELLOW "%s" TERM_COLOR_RESET "\"...",
+ fonts[i]->font_path);
- /* Load fonts */
- for (usize i = 0; i < n_fonts; i++) {
- INFO_("loading font \""
- TERM_COLOR_YELLOW"%s"TERM_COLOR_RESET
- "\"...", fonts[i]->font_path);
+ TTF_Font* font = TTF_OpenFont(fonts[i]->font_path, fonts[i]->ptsize);
+ if (!font) {
+ ERROR("failed to load font: %s\n", TTF_GetError());
+ } else {
+ printf("ok\n");
+ resources->fonts[i] = font;
+ resources->fonts_len++;
+ }
+ }
- TTF_Font *font = TTF_OpenFont(fonts[i]->font_path
- , fonts[i]->ptsize);
- if (!font) {
- ERROR("failed to load font: %s\n", TTF_GetError());
- } else {
- printf("ok\n");
- resources->fonts[i] = font;
- resources->fonts_len++;
- }
- }
+ if (resources->textures_len != n_textures) {
+ WARN("Done. %d/%d textures loaded.", resources->textures_len, n_textures);
+ } else {
+ INFO("Done. All %d textures loaded.", n_textures);
+ }
- if (resources->textures_len != n_textures) {
- WARN("Done. %d/%d textures loaded.", resources->textures_len, n_textures);
- } else {
- INFO("Done. All %d textures loaded.", n_textures);
- }
+ if (resources->fonts_len != n_fonts) {
+ WARN("Done. %d/%d fonts loaded.", resources->fonts_len, n_fonts);
+ } else {
+ INFO("Done. All %d fonts loaded.", n_fonts);
+ }
- if (resources->fonts_len != n_fonts) {
- WARN("Done. %d/%d fonts loaded.", resources->fonts_len, n_fonts);
- } else {
- INFO("Done. All %d fonts loaded.", n_fonts);
- }
+ resources->texturepaths_len = resources->textures_len;
+ resources->fontpaths_len = resources->fonts_len;
+ }
- resources->texturepaths_len = resources->textures_len;
- resources->fontpaths_len = resources->fonts_len;
+ { /* Adjust window and such */
+ /* Set actual windowsize, which might be forced by OS */
+ SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0");
+ INFO("Adjusting window size...");
+ windowsize = get_canvas_size(renderer);
- }
+ SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
+ INFO("Windowsize: <%d,%d>", windowsize.x, windowsize.y);
+ }
- { /* Adjust window and such */
- /* Set actual windowsize, which might be forced by OS */
- SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0");
- INFO("Adjusting window size...");
- windowsize = get_canvas_size(renderer);
+ w->renderer = renderer;
+ w->window = window;
+ w->render_scale = render_scale;
+ w->windowsize = windowsize;
+ w->game_w = NULL;
+ w->game_h = NULL;
- SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND);
+ p->data = (void*)resources;
+ p->data_len = sizeof(struct Resources);
+ p->window = w;
+ p->quit = false;
- INFO("Windowsize: <%d,%d>", windowsize.x, windowsize.y);
- }
+ p->frame = 0;
+ p->fps_target = 60;
- w->renderer = renderer;
- w->window = window;
- w->render_scale = render_scale;
- w->windowsize = windowsize;
- w->game_w = NULL;
- w->game_h = NULL;
+ p->mem = memory_new(initial_memory);
- p->data = (void*)resources;
- p->data_len = sizeof(struct Resources);
- p->window = w;
- p->quit = false;
+ /* Getting the mouse coords now resolves the issue where a click "isn't
+ * registered" when the mouse isn't moved before the user clicks */
+ SDL_GetMouseState(&p->mouse_pos.x, &p->mouse_pos.y);
- p->frame = 0;
- p->fps_target = 60;
+ p->mousedown = (v2_i32){-1, -1};
+ p->mouseup = (v2_i32){-1, -1};
- p->mem = memory_new(initial_memory);
+ p->mouse_lclick = false;
+ p->mouse_rclick = false;
- /* Getting the mouse coords now resolves the issue where a click "isn't
- * registered" when the mouse isn't moved before the user clicks */
- SDL_GetMouseState(&p->mouse_pos.x, &p->mouse_pos.y);
+ p->camera_x = 0;
+ p->camera_y = 0;
- p->mousedown = (v2_i32){-1, -1};
- p->mouseup = (v2_i32){-1, -1};
+ p->edit_text = NULL;
+ p->edit_pos = 0;
- p->mouse_lclick = false;
- p->mouse_rclick = false;
+ p->bindings = NULL;
+ p->bindings_sz = 0;
+ p->bindings_len = 0;
- p->camera_x = 0;
- p->camera_y = 0;
-
- p->edit_text = NULL;
- p->edit_pos = 0;
-
- p->bindings = NULL;
- p->bindings_sz = 0;
- p->bindings_len = 0;
-
- // TODO: Add global bindings
+ // TODO: Add global bindings
#ifdef BENCHMARK
- u32 init_stop = SDL_GetTicks();
- INFO("Initialization took %dms", init_stop - init_start);
+ u32 init_stop = SDL_GetTicks();
+ INFO("Initialization took %dms", init_stop - init_start);
#endif
- INFO("Available cores: %d", nproc());
-
- GLOBAL_PLATFORM = p;
+ INFO("Available cores: %d", nproc());
+ GLOBAL_PLATFORM = p;
#ifdef DAW_BUILD_HOTRELOAD
-#define State(name) \
-if (!State_reload(STATE_##name, p->bindings, p->bindings_len)) { \
- ERROR("Failed to reload shared object file for state %s", #name ); \
-};
+#define State(name) \
+ if (!State_reload(STATE_##name, p->bindings, p->bindings_len)) { \
+ ERROR("Failed to reload shared object file for state %s", #name); \
+ };
#include <states/list_of_states.h>
#undef State
#endif
- return p;
+ return p;
}
-i32 engine_run(Platform *p, StateType initial_state) {
- if (p == NULL) {
- ERROR("Platform is uninitialized.\n");
- INFO("initialize with `engine_init`");
- return -1;
- }
+i32 engine_run(Platform* p, StateType initial_state) {
+ if (p == NULL) {
+ ERROR("Platform is uninitialized.\n");
+ INFO("initialize with `engine_init`");
+ return -1;
+ }
- memory* mem = p->mem;
+ memory* mem = p->mem;
- StateType state = initial_state;
+ StateType state = initial_state;
- {
- u32 state_init_time = SDL_GetTicks();
- State_init(state, mem);
- INFO("Initializing state \"%s\" took %ldms", StateTypeStr[state], SDL_GetTicks() - state_init_time);
- }
+ {
+ u32 state_init_time = SDL_GetTicks();
+ State_init(state, mem);
+ INFO("Initializing state \"%s\" took %ldms", StateTypeStr[state],
+ SDL_GetTicks() - state_init_time);
+ }
- u32 time = SDL_GetTicks();
+ u32 time = SDL_GetTicks();
- // Update ticks
- u64 ticks = 0;
+ // Update ticks
+ u64 ticks = 0;
- /* Profiling values */
+ /* Profiling values */
#ifdef BENCHMARK
- u64 profile_tick_counter = 0;
- //u64 profile_slack = 0;
- u64 profile_rendering = 0;
- u64 profile_gameloop = 0;
- u64 profile_input = 0;
- u64 profile_input_handling = 0;
- u64 profile_num_drawcalls = 0;
- u32 profile_interval_timer = time;
- const u32 profile_interval_ms = 5000;
- const f32 profile_interval_scale = (f32)(profile_interval_ms) / 100.0f;
+ u64 profile_tick_counter = 0;
+ // u64 profile_slack = 0;
+ u64 profile_rendering = 0;
+ u64 profile_gameloop = 0;
+ u64 profile_input = 0;
+ u64 profile_input_handling = 0;
+ u64 profile_num_drawcalls = 0;
+ u32 profile_interval_timer = time;
+ const u32 profile_interval_ms = 5000;
+ const f32 profile_interval_scale = (f32)(profile_interval_ms) / 100.0f;
#endif
- const f64 frame_interval = 1000.0 / FPS_CAP;
+ const f64 frame_interval = 1000.0 / FPS_CAP;
- StateType (*update_func)(void*) = State_updateFunc(state);
+ StateType (*update_func)(void*) = State_updateFunc(state);
- /* Main loop */
- do {
- const u32 now = SDL_GetTicks();
- const u64 dt = now - time;
- time = now;
- /* Wait frame_interval */
- if (dt < frame_interval) {
+ /* Main loop */
+ do {
+ const u32 now = SDL_GetTicks();
+ const u64 dt = now - time;
+ time = now;
+ /* Wait frame_interval */
+ if (dt < frame_interval) {
#ifndef BENCHMARK
- SDL_Delay(frame_interval - dt);
+ SDL_Delay(frame_interval - dt);
#else
- /* We want to know how much time is spend sleeping */
- //profile_slack += frame_interval - dt;
+ /* We want to know how much time is spend sleeping */
+ // profile_slack += frame_interval - dt;
#endif
- }
+ }
#ifdef BENCHMARK
- if (time - profile_interval_timer > profile_interval_ms) {
- /* Ticks/frames since last measurement */
- u32 fps = (ticks - profile_tick_counter) / profile_interval_scale;
- u64 drawcalls = profile_num_drawcalls / profile_interval_scale / fps;
+ if (time - profile_interval_timer > profile_interval_ms) {
+ /* Ticks/frames since last measurement */
+ u32 fps = (ticks - profile_tick_counter) / profile_interval_scale;
+ u64 drawcalls = profile_num_drawcalls / profile_interval_scale / fps;
- u32 sum =
- + profile_rendering
- //+ profile_slack
- + profile_input
- + profile_input_handling
- + profile_gameloop
- ;
+ u32 sum = +profile_rendering
+ //+ profile_slack
+ + profile_input + profile_input_handling + profile_gameloop;
-
- /* Log fps and slack percentage */
- LOG("fps:%d\t"
- "rendering:%.2f%%\t"
- //"slack:%.2f%%\t"
- "input:%.2f%% (%.2f%%)\t"
- "gameloop:%.2f%%\t"
- "unaccounted:%llu / %llu ms\t"
- "avg drawcalls:%llu",
- fps,
- 100.0f * (f32)profile_rendering / (f32)sum,
- //100.0f * (f32)profile_slack / (f32)sum,
- 100.0f * (f32)profile_input / (f32)sum,
- 100.0f * (f32)profile_input_handling / (f32)sum,
- 100.0f * (f32)profile_gameloop / (f32)sum,
- time - profile_interval_timer - sum, sum,
- drawcalls);
- /* Reset values */
- profile_tick_counter = ticks;
- profile_interval_timer = time;
- //profile_slack = 0;
- profile_rendering = 0;
- profile_gameloop = 0;
- profile_input = 0;
- profile_input_handling = 0;
- profile_num_drawcalls = 0;
- }
+ /* Log fps and slack percentage */
+ LOG("fps:%d\t"
+ "rendering:%.2f%%\t"
+ //"slack:%.2f%%\t"
+ "input:%.2f%% (%.2f%%)\t"
+ "gameloop:%.2f%%\t"
+ "unaccounted:%llu / %llu ms\t"
+ "avg drawcalls:%llu",
+ fps, 100.0f * (f32)profile_rendering / (f32)sum,
+ // 100.0f * (f32)profile_slack / (f32)sum,
+ 100.0f * (f32)profile_input / (f32)sum,
+ 100.0f * (f32)profile_input_handling / (f32)sum,
+ 100.0f * (f32)profile_gameloop / (f32)sum,
+ time - profile_interval_timer - sum, sum, drawcalls);
+ /* Reset values */
+ profile_tick_counter = ticks;
+ profile_interval_timer = time;
+ // profile_slack = 0;
+ profile_rendering = 0;
+ profile_gameloop = 0;
+ profile_input = 0;
+ profile_input_handling = 0;
+ profile_num_drawcalls = 0;
+ }
#endif
- /* Events */
- BENCHEXPR(profile_input, {
-
- if (p->mouse_lclick) {
- p->mouseup.x = -1;
- p->mouseup.y = -1;
- p->mousedown.x = -1;
- p->mousedown.y = -1;
- p->mouse_lclick = false;
- }
- if (p->mouse_rclick) {
- p->mouse_rclick = false;
- }
+ /* Events */
+ BENCHEXPR(profile_input, {
+ if (p->mouse_lclick) {
+ p->mouseup.x = -1;
+ p->mouseup.y = -1;
+ p->mousedown.x = -1;
+ p->mousedown.y = -1;
+ p->mouse_lclick = false;
+ }
+ if (p->mouse_rclick) {
+ p->mouse_rclick = false;
+ }
- /* Window events */
- SDL_Event e[8];
- i32 num_events;
- SDL_PumpEvents();
- while ((num_events = SDL_PeepEvents(e, 8, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_SYSWMEVENT)) > 0) {
- for (i32 i = 0; i < num_events; i++) {
- switch (e[i].type) {
- case SDL_QUIT:
- state = STATE_quit;
- break;
- case SDL_WINDOWEVENT:
- engine_update_window(p->window, &e[i].window);
- break;
- default:
- WARN("Unhandled event 0x%04x", (i32)e[i].type);
- }
- }
- }
+ /* Window events */
+ SDL_Event e[8];
+ i32 num_events;
+ SDL_PumpEvents();
+ while ((num_events = SDL_PeepEvents(e, 8, SDL_GETEVENT, SDL_FIRSTEVENT,
+ SDL_SYSWMEVENT)) > 0) {
+ for (i32 i = 0; i < num_events; i++) {
+ switch (e[i].type) {
+ case SDL_QUIT:
+ state = STATE_quit;
+ break;
+ case SDL_WINDOWEVENT:
+ engine_update_window(p->window, &e[i].window);
+ break;
+ default:
+ WARN("Unhandled event 0x%04x", (i32)e[i].type);
+ }
+ }
+ }
- /* Mouse events */
- while ((num_events = SDL_PeepEvents(e, 8, SDL_GETEVENT, SDL_MOUSEMOTION, SDL_MOUSEWHEEL)) > 0) {
- for (i32 i = 0; i < num_events; i++) {
- switch (e[i].type) {
- case SDL_MOUSEWHEEL: break;
- case SDL_MOUSEMOTION:
- {
- SDL_MouseMotionEvent m = e[i].motion;
- /* In case of a first-person game, use xrel and yrel */
- p->mouse_pos.x = m.x;
- p->mouse_pos.y = m.y;
- }
- break;
- case SDL_MOUSEBUTTONUP:
- {
- switch (e[i].button.button) {
- case SDL_BUTTON_LEFT:
- p->mouseup = p->mouse_pos;
+ /* Mouse events */
+ while ((num_events = SDL_PeepEvents(e, 8, SDL_GETEVENT, SDL_MOUSEMOTION,
+ SDL_MOUSEWHEEL)) > 0) {
+ for (i32 i = 0; i < num_events; i++) {
+ switch (e[i].type) {
+ case SDL_MOUSEWHEEL:
+ break;
+ case SDL_MOUSEMOTION: {
+ SDL_MouseMotionEvent m = e[i].motion;
+ /* In case of a first-person game, use xrel and yrel */
+ p->mouse_pos.x = m.x;
+ p->mouse_pos.y = m.y;
+ } break;
+ case SDL_MOUSEBUTTONUP: {
+ switch (e[i].button.button) {
+ case SDL_BUTTON_LEFT:
+ p->mouseup = p->mouse_pos;
- p->mouse_lclick = true;
- case SDL_BUTTON_RIGHT:
- break;
- default:
- break;
- }
- }
- break;
- case SDL_MOUSEBUTTONDOWN:
- switch (e[i].button.button) {
- case SDL_BUTTON_LEFT:
- p->mousedown = p->mouse_pos;
- break;
- case SDL_BUTTON_RIGHT:
- break;
- default:
- break;
- }
- break;
- default:
- WARN("Unhandled mouse event 0x%04x", (i32)e[i].type);
- break;
- }
- }
- }
+ p->mouse_lclick = true;
+ case SDL_BUTTON_RIGHT:
+ break;
+ default:
+ break;
+ }
+ } break;
+ case SDL_MOUSEBUTTONDOWN:
+ switch (e[i].button.button) {
+ case SDL_BUTTON_LEFT:
+ p->mousedown = p->mouse_pos;
+ break;
+ case SDL_BUTTON_RIGHT:
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ WARN("Unhandled mouse event 0x%04x", (i32)e[i].type);
+ break;
+ }
+ }
+ }
- BENCHEXPR(profile_input_handling, {
- if (p->bindings != NULL) {
- const i_ctx *bindings = *p->bindings;
- const usize bindings_len = p->bindings_len;
+ BENCHEXPR(profile_input_handling, {
+ if (p->bindings != NULL) {
+ const i_ctx* bindings = *p->bindings;
+ const usize bindings_len = p->bindings_len;
- while ((num_events = SDL_PeepEvents(e, 8, SDL_GETEVENT, SDL_KEYDOWN, SDL_KEYUP)) > 0) {
- for (i32 i = 0; i < num_events; i++) {
- switch (e[i].type) {
- case SDL_KEYDOWN:
- if (e[i].key.keysym.sym == SDLK_F7) {
- INFO("Reloading %s", StateTypeStr[state]);
- if (! State_reload(state, p->bindings, p->bindings_len) ) {
- ERROR("Failed to reload state library!");
- } else {
- update_func = State_updateFunc(state);
- }
- break;
- }
- for (usize b = 0; b < bindings_len; b++) {
- const action_t a = i_get_action(&bindings[b], e[i].key.timestamp, e[i].key.keysym.scancode);
+ while ((num_events = SDL_PeepEvents(e, 8, SDL_GETEVENT, SDL_KEYDOWN,
+ SDL_KEYUP)) > 0) {
+ for (i32 i = 0; i < num_events; i++) {
+ switch (e[i].type) {
+ case SDL_KEYDOWN:
+ if (e[i].key.keysym.sym == SDLK_F7) {
+ INFO("Reloading %s", StateTypeStr[state]);
+ if (!State_reload(state, p->bindings, p->bindings_len)) {
+ ERROR("Failed to reload state library!");
+ } else {
+ update_func = State_updateFunc(state);
+ }
+ break;
+ }
+ for (usize b = 0; b < bindings_len; b++) {
+ const action_t a =
+ i_get_action(&bindings[b], e[i].key.timestamp,
+ e[i].key.keysym.scancode);
- switch (a.type) {
- case InputType_action:
- if (a.action.callback != NULL) {
- callbacks[callbacks_len++] = a.action.callback;
- }
- break;
+ switch (a.type) {
+ case InputType_action:
+ if (a.action.callback != NULL) {
+ callbacks[callbacks_len++] = a.action.callback;
+ }
+ break;
- case InputType_state:
- if (!e[i].key.repeat && a.state.activate != NULL) {
- callbacks[callbacks_len++] = a.state.activate;
- }
- break;
+ case InputType_state:
+ if (!e[i].key.repeat && a.state.activate != NULL) {
+ callbacks[callbacks_len++] = a.state.activate;
+ }
+ break;
- case InputType_range:
- WARN("Range inputs not supported yet!");
- break;
- case InputType_error:
- WARN("Unhandled scancode: %lu", e[i].key.keysym.scancode);
+ case InputType_range:
+ WARN("Range inputs not supported yet!");
+ break;
+ case InputType_error:
+ WARN("Unhandled scancode: %lu", e[i].key.keysym.scancode);
- default:
- break;
- }
- }
- break;
+ default:
+ break;
+ }
+ }
+ break;
- case SDL_KEYUP:
- for (usize b = 0; b < bindings_len; b++) {
- const action_t a = i_get_action(&bindings[b], e[i].key.timestamp, e[i].key.keysym.scancode);
- if (a.type == InputType_state && a.state.deactivate != NULL && !e[i].key.repeat) {
- callbacks[callbacks_len++] = a.state.deactivate;
- }
- }
- break;
- default:
- WARN("Unhandled mouse event 0x%04x", (i32)e[i].type);
- break;
- }
- }
- }
- }
- });
- });
+ case SDL_KEYUP:
+ for (usize b = 0; b < bindings_len; b++) {
+ const action_t a =
+ i_get_action(&bindings[b], e[i].key.timestamp,
+ e[i].key.keysym.scancode);
+ if (a.type == InputType_state && a.state.deactivate != NULL &&
+ !e[i].key.repeat) {
+ callbacks[callbacks_len++] = a.state.deactivate;
+ }
+ }
+ break;
+ default:
+ WARN("Unhandled mouse event 0x%04x", (i32)e[i].type);
+ break;
+ }
+ }
+ }
+ }
+ });
+ });
- i_flush_bindings(callbacks_len, mem->data, callbacks);
- callbacks_len = 0;
+ i_flush_bindings(callbacks_len, mem->data, callbacks);
+ callbacks_len = 0;
- /* update */
- StateType next_state;
- BENCHEXPR(profile_gameloop, {next_state = update_func((void*)(mem->data));} );//State_update(state, mem);});
+ /* update */
+ StateType next_state;
+ BENCHEXPR(profile_gameloop, {
+ next_state = update_func((void*)(mem->data));
+ }); // State_update(state, mem);});
- if (next_state != STATE_null) {
- if (next_state == STATE_quit) break;
+ if (next_state != STATE_null) {
+ if (next_state == STATE_quit) break;
- drawcall_reset();
+ drawcall_reset();
- engine_window_resize_pointers_reset();
- State_free(state, mem);
- memory_clear(mem);
+ engine_window_resize_pointers_reset();
+ State_free(state, mem);
+ memory_clear(mem);
- engine_input_ctx_reset();
+ engine_input_ctx_reset();
- state = next_state;
- update_func = State_updateFunc(state);
+ state = next_state;
+ update_func = State_updateFunc(state);
#ifdef BENCHMARK
- {
- u32 t = SDL_GetTicks();
- State_init(state, mem);
- LOG("Initializing %s took %dms", StateTypeStr[state], SDL_GetTicks() - t);
- }
+ {
+ u32 t = SDL_GetTicks();
+ State_init(state, mem);
+ LOG("Initializing %s took %dms", StateTypeStr[state],
+ SDL_GetTicks() - t);
+ }
#else
- State_init(state, mem);
+ State_init(state, mem);
#endif
- } else {
+ } else {
#ifdef BENCHMARK
- profile_num_drawcalls += drawcall_len;
+ profile_num_drawcalls += drawcall_len;
#endif
- render_begin(p->window);
- BENCHEXPR(profile_rendering, {render_present(p->window);})
- }
+ render_begin(p->window);
+ BENCHEXPR(profile_rendering, { render_present(p->window); })
+ }
+ ticks++;
+ } while (state != STATE_quit);
- ticks++;
- } while (state != STATE_quit);
-
- return 0;
+ return 0;
}
+void stop(Platform* p) {
+ if (p == NULL) return;
-void stop(Platform *p) {
- if (p == NULL) return;
-
- { /* Deallocate resources */
- struct Resources *r = (struct Resources*)p->data;
- if (r != NULL) {
- /* Destroy textures */
- for (usize i = 0; i < r->textures_len; i++) {
- if (r->textures[i] != NULL) {
- SDL_DestroyTexture(r->textures[i]->texture);
- r->textures[i] = NULL;
- }
- }
- free(r->textures);
+ { /* Deallocate resources */
+ struct Resources* r = (struct Resources*)p->data;
+ if (r != NULL) {
+ /* Destroy textures */
+ for (usize i = 0; i < r->textures_len; i++) {
+ if (r->textures[i] != NULL) {
+ SDL_DestroyTexture(r->textures[i]->texture);
+ r->textures[i] = NULL;
+ }
+ }
+ free(r->textures);
- /* Destroy Fonts */
- for (usize i = 0; i < r->fonts_len; i++) {
- if (r->fonts[i] != NULL) {
- TTF_CloseFont(r->fonts[i]);
- r->fonts[i] = NULL;
- }
- }
- free(r->fonts);
- }
- }
+ /* Destroy Fonts */
+ for (usize i = 0; i < r->fonts_len; i++) {
+ if (r->fonts[i] != NULL) {
+ TTF_CloseFont(r->fonts[i]);
+ r->fonts[i] = NULL;
+ }
+ }
+ free(r->fonts);
+ }
+ }
- { /* Deallocate window */
- Window *w = p->window;
- if (w != NULL) {
- if (w->window != NULL) { SDL_DestroyWindow(w->window); w->window = NULL; }
- if (w->renderer != NULL) { SDL_DestroyRenderer(w->renderer); w->renderer = NULL; }
- }
- }
+ { /* Deallocate window */
+ Window* w = p->window;
+ if (w != NULL) {
+ if (w->window != NULL) {
+ SDL_DestroyWindow(w->window);
+ w->window = NULL;
+ }
+ if (w->renderer != NULL) {
+ SDL_DestroyRenderer(w->renderer);
+ w->renderer = NULL;
+ }
+ }
+ }
- TTF_Quit();
- IMG_Quit();
- SDL_Quit();
+ TTF_Quit();
+ IMG_Quit();
+ SDL_Quit();
}
void engine_fps_max(u64 cap) { FPS_CAP = cap; }
-void engine_input_ctx_push(i_ctx *ctx) {
- if (GLOBAL_PLATFORM->bindings == NULL) {
- GLOBAL_PLATFORM->bindings = calloc(8, sizeof(i_ctx*));
- GLOBAL_PLATFORM->bindings_sz = 8;
- }
+void engine_input_ctx_push(i_ctx* ctx) {
+ if (GLOBAL_PLATFORM->bindings == NULL) {
+ GLOBAL_PLATFORM->bindings = calloc(8, sizeof(i_ctx*));
+ GLOBAL_PLATFORM->bindings_sz = 8;
+ }
- if (GLOBAL_PLATFORM->bindings_len + 1 >= GLOBAL_PLATFORM->bindings_sz) {
- void* m = realloc(GLOBAL_PLATFORM->bindings, GLOBAL_PLATFORM->bindings_sz + 8);
- if (m == NULL) {
- ERROR("Failed to allocate 8 bytes (%d): %s", errno, strerror(errno));
- exit(EXIT_FAILURE);
- }
- GLOBAL_PLATFORM->bindings_sz += 8;
- }
+ if (GLOBAL_PLATFORM->bindings_len + 1 >= GLOBAL_PLATFORM->bindings_sz) {
+ void* m =
+ realloc(GLOBAL_PLATFORM->bindings, GLOBAL_PLATFORM->bindings_sz + 8);
+ if (m == NULL) {
+ ERROR("Failed to allocate 8 bytes (%d): %s", errno, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ GLOBAL_PLATFORM->bindings_sz += 8;
+ }
- LOG("Bindings in ctx[%d]:", GLOBAL_PLATFORM->bindings_len);
- for (isize i = 0; i < ctx->len; i++) {
- switch (ctx->bindings[i].action.type) {
- case InputType_error:
- LOG("(error)");
- break;
+ LOG("Bindings in ctx[%d]:", GLOBAL_PLATFORM->bindings_len);
+ for (isize i = 0; i < ctx->len; i++) {
+ switch (ctx->bindings[i].action.type) {
+ case InputType_error:
+ LOG("(error)");
+ break;
- case InputType_action:
- LOG("(action) %s", ctx->bindings[i].action.action.callback_str);
- break;
+ case InputType_action:
+ LOG("(action) %s", ctx->bindings[i].action.action.callback_str);
+ break;
- case InputType_state:
- LOG("(+state) %s", ctx->bindings[i].action.state.activate_str);
- LOG("(-state) %s", ctx->bindings[i].action.state.deactivate_str);
- break;
- case InputType_range:
- LOG("(range) --unhandled--");
- break;
- }
- }
+ case InputType_state:
+ LOG("(+state) %s", ctx->bindings[i].action.state.activate_str);
+ LOG("(-state) %s", ctx->bindings[i].action.state.deactivate_str);
+ break;
+ case InputType_range:
+ LOG("(range) --unhandled--");
+ break;
+ }
+ }
- GLOBAL_PLATFORM->bindings[GLOBAL_PLATFORM->bindings_len++] = ctx;
+ GLOBAL_PLATFORM->bindings[GLOBAL_PLATFORM->bindings_len++] = ctx;
}
void engine_input_ctx_pop(void) {
- if (GLOBAL_PLATFORM->bindings == NULL || GLOBAL_PLATFORM->bindings_sz == 0) return;
- i_ctx_t_free(GLOBAL_PLATFORM->bindings[--GLOBAL_PLATFORM->bindings_len]);
+ if (GLOBAL_PLATFORM->bindings == NULL || GLOBAL_PLATFORM->bindings_sz == 0)
+ return;
+ i_ctx_t_free(GLOBAL_PLATFORM->bindings[--GLOBAL_PLATFORM->bindings_len]);
}
void engine_input_ctx_reset(void) {
- while (GLOBAL_PLATFORM->bindings_len > 0) {
- i_ctx_t_free(GLOBAL_PLATFORM->bindings[--GLOBAL_PLATFORM->bindings_len]);
- }
+ while (GLOBAL_PLATFORM->bindings_len > 0) {
+ i_ctx_t_free(GLOBAL_PLATFORM->bindings[--GLOBAL_PLATFORM->bindings_len]);
+ }
}
-u32 get_time(void) {return SDL_GetTicks();}
-v2_i32 get_windowsize(void) {return GLOBAL_PLATFORM->window->windowsize;}
-v2_i32 *get_mousepos(void) { return &GLOBAL_PLATFORM->mouse_pos; }
+u32 get_time(void) { return SDL_GetTicks(); }
+v2_i32 get_windowsize(void) { return GLOBAL_PLATFORM->window->windowsize; }
+v2_i32* get_mousepos(void) { return &GLOBAL_PLATFORM->mouse_pos; }