summaryrefslogtreecommitdiff
path: root/src/state.c
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2023-07-28 14:27:12 +0000
committer0scar <qgt268@alumni.ku.dk>2023-07-28 14:27:12 +0000
commit5ee7f4b4b033de403f1861eedc942c7a5a0f31b6 (patch)
treeec27fbe62ab815d79d9e75735789e5543a4870cb /src/state.c
parentdbea7051aded87a5de8466124154569ff4e4be9b (diff)
test
Diffstat (limited to 'src/state.c')
-rw-r--r--src/state.c32
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) \