diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/state.c | 32 |
1 files changed, 29 insertions, 3 deletions
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 <engine/state.h> #include <engine/logging.h> -#include <states/all_states.h> - -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 <states/all_states.h> +#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 <states/all_states.h> +#undef State + void State_init(StateType type, memory *mem) { switch (type) { #define State(name) \ |
