HATPC/scenes/engine/engine.c

48 lines
1.2 KiB
C

#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)
void init_scene(Scene_t* scene, 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);
}