#include #include "scene_manager.h" typedef struct scene_state_t { app_context_t* ctx; Scene* current; } scene_state_t; static scene_state_t g_scene_state; void scene_manager_init(app_context_t* ctx) { g_scene_state.ctx = ctx; g_scene_state.current = NULL; } void scene_manager_shutdown(void) { if (g_scene_state.current && g_scene_state.current->on_exit) { g_scene_state.current->on_exit(g_scene_state.ctx); } g_scene_state.current = NULL; g_scene_state.ctx = NULL; } void scene_manager_set(Scene* scene) { if (g_scene_state.current && g_scene_state.current->on_exit) { g_scene_state.current->on_exit(g_scene_state.ctx); } g_scene_state.current = scene; if (g_scene_state.current && g_scene_state.current->on_enter) { g_scene_state.current->on_enter(g_scene_state.ctx); } } Scene* scene_manager_current(void) { return g_scene_state.current; } void scene_manager_update(float dt) { if (g_scene_state.current && g_scene_state.current->on_update) { g_scene_state.current->on_update(g_scene_state.ctx, dt); } } void scene_manager_render(void) { if (g_scene_state.current && g_scene_state.current->on_render) { g_scene_state.current->on_render(g_scene_state.ctx); } } void scene_manager_event(const struct sapp_event* ev) { if (g_scene_state.current && g_scene_state.current->on_event) { g_scene_state.current->on_event(g_scene_state.ctx, ev); } }