Allow optional inits for scene
Particle system and entity management are now optional during scene init.main
parent
8645bbd963
commit
10d48c1d70
|
@ -150,13 +150,20 @@ void update_sfx_list(GameEngine_t* engine)
|
||||||
engine->sfx_list.played_sfx = 0;
|
engine->sfx_list.played_sfx = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_scene(Scene_t* scene, action_func_t action_func)
|
void init_scene(Scene_t* scene, action_func_t action_func, uint32_t subsystem_init)
|
||||||
{
|
{
|
||||||
sc_map_init_64(&scene->action_map, 32, 0);
|
sc_map_init_64(&scene->action_map, 32, 0);
|
||||||
sc_array_init(&scene->systems);
|
sc_array_init(&scene->systems);
|
||||||
|
if (subsystem_init & ENABLE_ENTITY_MANAGEMENT_SYSTEM)
|
||||||
|
{
|
||||||
init_entity_manager(&scene->ent_manager);
|
init_entity_manager(&scene->ent_manager);
|
||||||
|
}
|
||||||
|
if (subsystem_init & ENABLE_PARTICLE_SYSTEM)
|
||||||
|
{
|
||||||
init_particle_system(&scene->part_sys);
|
init_particle_system(&scene->part_sys);
|
||||||
|
}
|
||||||
|
|
||||||
|
scene->subsystem_init = subsystem_init;
|
||||||
//scene->scene_type = scene_type;
|
//scene->scene_type = scene_type;
|
||||||
scene->layers.n_layers = 0;
|
scene->layers.n_layers = 0;
|
||||||
scene->bg_colour = WHITE;
|
scene->bg_colour = WHITE;
|
||||||
|
@ -184,8 +191,16 @@ void free_scene(Scene_t* scene)
|
||||||
{
|
{
|
||||||
UnloadRenderTexture(scene->layers.render_layers[i].layer_tex);
|
UnloadRenderTexture(scene->layers.render_layers[i].layer_tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (scene->subsystem_init & ENABLE_ENTITY_MANAGEMENT_SYSTEM)
|
||||||
|
{
|
||||||
free_entity_manager(&scene->ent_manager);
|
free_entity_manager(&scene->ent_manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scene->subsystem_init & ENABLE_PARTICLE_SYSTEM)
|
||||||
|
{
|
||||||
deinit_particle_system(&scene->part_sys);
|
deinit_particle_system(&scene->part_sys);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void update_scene(Scene_t* scene, float delta_time)
|
inline void update_scene(Scene_t* scene, float delta_time)
|
||||||
|
@ -198,7 +213,10 @@ inline void update_scene(Scene_t* scene, float delta_time)
|
||||||
{
|
{
|
||||||
sys(scene);
|
sys(scene);
|
||||||
}
|
}
|
||||||
|
if (scene->subsystem_init & ENABLE_PARTICLE_SYSTEM)
|
||||||
|
{
|
||||||
update_particle_system(&scene->part_sys, scene->delta_time);
|
update_particle_system(&scene->part_sys, scene->delta_time);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _internal_render_scene(Scene_t* scene)
|
static void _internal_render_scene(Scene_t* scene)
|
||||||
|
|
|
@ -60,6 +60,7 @@ typedef struct SceneRenderLayers {
|
||||||
struct Scene {
|
struct Scene {
|
||||||
// Not all scene needs an entity manager
|
// Not all scene needs an entity manager
|
||||||
// but too late to change this
|
// but too late to change this
|
||||||
|
uint32_t subsystem_init;
|
||||||
EntityManager_t ent_manager;
|
EntityManager_t ent_manager;
|
||||||
Scene_t* parent_scene;
|
Scene_t* parent_scene;
|
||||||
struct sc_map_64 action_map; // key -> actions
|
struct sc_map_64 action_map; // key -> actions
|
||||||
|
@ -99,7 +100,10 @@ extern void update_scene(Scene_t* scene, float delta_time);
|
||||||
extern void render_scene(Scene_t* scene);
|
extern void render_scene(Scene_t* scene);
|
||||||
extern void do_action(Scene_t* scene, ActionType_t action, bool pressed);
|
extern void do_action(Scene_t* scene, ActionType_t action, bool pressed);
|
||||||
|
|
||||||
void init_scene(Scene_t* scene, action_func_t action_func);
|
//void init_scene(Scene_t* scene, action_func_t action_func);
|
||||||
|
#define ENABLE_ENTITY_MANAGEMENT_SYSTEM (1)
|
||||||
|
#define ENABLE_PARTICLE_SYSTEM (1 << 1)
|
||||||
|
void init_scene(Scene_t* scene, action_func_t action_func, uint32_t subsystem_init);
|
||||||
bool add_scene_layer(Scene_t* scene, int width, int height, Rectangle render_area);
|
bool add_scene_layer(Scene_t* scene, int width, int height, Rectangle render_area);
|
||||||
void free_scene(Scene_t* scene);
|
void free_scene(Scene_t* scene);
|
||||||
void add_child_scene(GameEngine_t* engine, unsigned int child_idx, unsigned int parent_idx);
|
void add_child_scene(GameEngine_t* engine, unsigned int child_idx, unsigned int parent_idx);
|
||||||
|
|
|
@ -109,7 +109,7 @@ int main(void)
|
||||||
for (uint8_t i = 0; i < 6; ++i)
|
for (uint8_t i = 0; i < 6; ++i)
|
||||||
{
|
{
|
||||||
scenes[i] = &dummy_scenes[i].scene;
|
scenes[i] = &dummy_scenes[i].scene;
|
||||||
init_scene(&dummy_scenes[i].scene, &level_do_action);
|
init_scene(&dummy_scenes[i].scene, &level_do_action, 0);
|
||||||
dummy_scenes[i].scene.engine = &engine;
|
dummy_scenes[i].scene.engine = &engine;
|
||||||
dummy_scenes[i].number = i;
|
dummy_scenes[i].number = i;
|
||||||
add_scene_layer(
|
add_scene_layer(
|
||||||
|
|
|
@ -1146,7 +1146,7 @@ static void at_level_complete(Scene_t* scene)
|
||||||
|
|
||||||
void init_sandbox_scene(LevelScene_t* scene)
|
void init_sandbox_scene(LevelScene_t* scene)
|
||||||
{
|
{
|
||||||
init_scene(&scene->scene, &level_do_action);
|
init_scene(&scene->scene, &level_do_action, ENABLE_ENTITY_MANAGEMENT_SYSTEM | ENABLE_PARTICLE_SYSTEM);
|
||||||
init_entity_tag_map(&scene->scene.ent_manager, PLAYER_ENT_TAG, 4);
|
init_entity_tag_map(&scene->scene.ent_manager, PLAYER_ENT_TAG, 4);
|
||||||
init_entity_tag_map(&scene->scene.ent_manager, BOULDER_ENT_TAG, MAX_COMP_POOL_SIZE);
|
init_entity_tag_map(&scene->scene.ent_manager, BOULDER_ENT_TAG, MAX_COMP_POOL_SIZE);
|
||||||
init_entity_tag_map(&scene->scene.ent_manager, LEVEL_END_TAG, 16);
|
init_entity_tag_map(&scene->scene.ent_manager, LEVEL_END_TAG, 16);
|
||||||
|
|
|
@ -478,7 +478,7 @@ static void at_level_complete(Scene_t* scene)
|
||||||
|
|
||||||
void init_game_scene(LevelScene_t* scene)
|
void init_game_scene(LevelScene_t* scene)
|
||||||
{
|
{
|
||||||
init_scene(&scene->scene, &level_do_action);
|
init_scene(&scene->scene, &level_do_action, ENABLE_ENTITY_MANAGEMENT_SYSTEM | ENABLE_PARTICLE_SYSTEM);
|
||||||
init_entity_tag_map(&scene->scene.ent_manager, PLAYER_ENT_TAG, 4);
|
init_entity_tag_map(&scene->scene.ent_manager, PLAYER_ENT_TAG, 4);
|
||||||
init_entity_tag_map(&scene->scene.ent_manager, BOULDER_ENT_TAG, MAX_COMP_POOL_SIZE);
|
init_entity_tag_map(&scene->scene.ent_manager, BOULDER_ENT_TAG, MAX_COMP_POOL_SIZE);
|
||||||
init_entity_tag_map(&scene->scene.ent_manager, LEVEL_END_TAG, 16);
|
init_entity_tag_map(&scene->scene.ent_manager, LEVEL_END_TAG, 16);
|
||||||
|
|
|
@ -104,7 +104,7 @@ static void level_select_do_action(Scene_t* scene, ActionType_t action, bool pre
|
||||||
#define SCROLL_TOTAL_HEIGHT 800
|
#define SCROLL_TOTAL_HEIGHT 800
|
||||||
void init_level_select_scene(LevelSelectScene_t* scene)
|
void init_level_select_scene(LevelSelectScene_t* scene)
|
||||||
{
|
{
|
||||||
init_scene(&scene->scene, &level_select_do_action);
|
init_scene(&scene->scene, &level_select_do_action, 0);
|
||||||
add_scene_layer(
|
add_scene_layer(
|
||||||
&scene->scene, 400, 800,
|
&scene->scene, 400, 800,
|
||||||
(Rectangle){START_X, START_Y, 400, 800}
|
(Rectangle){START_X, START_Y, 400, 800}
|
||||||
|
|
|
@ -138,7 +138,7 @@ static void gui_loop(Scene_t* scene)
|
||||||
|
|
||||||
void init_menu_scene(MenuScene_t* scene)
|
void init_menu_scene(MenuScene_t* scene)
|
||||||
{
|
{
|
||||||
init_scene(&scene->scene, &menu_do_action);
|
init_scene(&scene->scene, &menu_do_action, 0);
|
||||||
|
|
||||||
sc_array_add(&scene->scene.systems, &gui_loop);
|
sc_array_add(&scene->scene.systems, &gui_loop);
|
||||||
sc_array_add(&scene->scene.systems, &menu_scene_render_func);
|
sc_array_add(&scene->scene.systems, &menu_scene_render_func);
|
||||||
|
|
|
@ -400,7 +400,7 @@ int main(void)
|
||||||
|
|
||||||
LevelScene_t scene;
|
LevelScene_t scene;
|
||||||
scene.scene.engine = &engine;
|
scene.scene.engine = &engine;
|
||||||
init_scene(&scene.scene, &level_do_action);
|
init_scene(&scene.scene, &level_do_action, ENABLE_ENTITY_MANAGEMENT_SYSTEM);
|
||||||
init_entity_tag_map(&scene.scene.ent_manager, PLAYER_ENT_TAG, 4);
|
init_entity_tag_map(&scene.scene.ent_manager, PLAYER_ENT_TAG, 4);
|
||||||
init_entity_tag_map(&scene.scene.ent_manager, DYNMEM_ENT_TAG, 16);
|
init_entity_tag_map(&scene.scene.ent_manager, DYNMEM_ENT_TAG, 16);
|
||||||
init_level_scene_data(
|
init_level_scene_data(
|
||||||
|
|
Loading…
Reference in New Issue