#include "engine.h" void change_scene(GameEngine_t* engine, unsigned int idx) { engine->scenes[engine->curr_scene]->state = SCENE_ENDED; engine->curr_scene = idx; engine->scenes[engine->curr_scene]->state = SCENE_PLAYING; } void init_scene(Scene_t* scene, SceneType_t scene_type, system_func_t render_func, action_func_t action_func) { sc_map_init_64(&scene->action_map, 32, 0); sc_array_init(&scene->systems); init_entity_manager(&scene->ent_manager); scene->scene_type = scene_type; scene->render_function = render_func; scene->action_function = action_func; scene->state = SCENE_ENDED; } void free_scene(Scene_t* scene) { sc_map_term_64(&scene->action_map); sc_array_term(&scene->systems); free_entity_manager(&scene->ent_manager); } inline void update_scene(Scene_t* scene) { system_func_t sys; sc_array_foreach(&scene->systems, sys) { sys(scene); } } inline void render_scene(Scene_t* scene) { scene->render_function(scene); } inline void do_action(Scene_t* scene, ActionType_t action, bool pressed) { scene->action_function(scene, action, pressed); }