From 5ee7f4b4b033de403f1861eedc942c7a5a0f31b6 Mon Sep 17 00:00:00 2001 From: 0scar Date: Fri, 28 Jul 2023 16:27:12 +0200 Subject: test --- src/state.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'src/state.c') diff --git a/src/state.c b/src/state.c index 59729a5..853037f 100644 --- a/src/state.c +++ b/src/state.c @@ -1,9 +1,7 @@ #include #include -#include - -typedef StateType state_update_t (void*); +typedef StateType state_update_t(void*); const char *StateTypeStr[] = { "null", @@ -13,6 +11,34 @@ const char *StateTypeStr[] = { "quit", }; +// Setup API for states +#define State(name) \ +typedef struct name##_state name##_state; \ +typedef void (state_##name##_init_t)(name##_state*); \ +typedef void (state_##name##_free_t)(name##_state*); \ +typedef StateType (state_##name##_update_t)(name##_state*); +#include +#undef State + +#ifdef DAW_BUILD_HOTRELOAD +// When hotreloading is enabled, we want to assign state function pointers +// dynamically. +#define State(name) \ +state_##name##_init_t *name##_init = NULL; \ +state_##name##_free_t *name##_free = NULL; \ +state_##name##_update_t *name##_update = NULL; + +#else +// Otherwise we just declare them. +#define State(name) \ +state_##name##_init_t name##_init; \ +state_##name##_free_t name##_free; \ +state_##name##_update_t name##_update; +#endif + +#include +#undef State + void State_init(StateType type, memory *mem) { switch (type) { #define State(name) \ -- cgit v1.3