Change to manual init for entity tag map
The entity tag mapping is not that used often enough. So, change it to manual init.scene_man
parent
029415e19f
commit
b150b3ad38
|
@ -252,6 +252,7 @@ struct EntityManager {
|
|||
// All fields are Read-Only
|
||||
struct sc_map_64v entities; // ent id : entity
|
||||
struct sc_map_64v entities_map[N_TAGS]; // [{ent id: ent}]
|
||||
bool tag_map_inited[N_TAGS];
|
||||
struct sc_map_64v component_map[N_COMPONENTS]; // [{ent id: comp}, ...]
|
||||
struct sc_queue_uint to_add;
|
||||
struct sc_queue_uint to_remove;
|
||||
|
@ -259,6 +260,7 @@ struct EntityManager {
|
|||
};
|
||||
|
||||
void init_entity_manager(EntityManager_t* p_manager);
|
||||
void init_entity_tag_map(EntityManager_t* p_manager, unsigned int tag_number, unsigned int initial_size);
|
||||
void update_entity_manager(EntityManager_t* p_manager);
|
||||
void clear_entity_manager(EntityManager_t* p_manager);
|
||||
void free_entity_manager(EntityManager_t* p_manager);
|
||||
|
|
|
@ -7,15 +7,20 @@ void init_entity_manager(EntityManager_t* p_manager)
|
|||
{
|
||||
sc_map_init_64v(p_manager->component_map + i, MAX_COMP_POOL_SIZE, 0);
|
||||
}
|
||||
for (size_t i = 0; i < N_TAGS; ++i)
|
||||
{
|
||||
sc_map_init_64v(p_manager->entities_map + i, MAX_COMP_POOL_SIZE, 0);
|
||||
}
|
||||
memset(p_manager->tag_map_inited, 0, sizeof(p_manager->tag_map_inited));
|
||||
sc_queue_init(&p_manager->to_add);
|
||||
sc_queue_init(&p_manager->to_remove);
|
||||
sc_queue_init(&p_manager->to_update);
|
||||
}
|
||||
|
||||
void init_entity_tag_map(EntityManager_t* p_manager, unsigned int tag_number, unsigned int initial_size)
|
||||
{
|
||||
if (tag_number >= N_TAGS) return;
|
||||
|
||||
sc_map_init_64v(p_manager->entities_map + tag_number, initial_size, 0);
|
||||
p_manager->tag_map_inited[tag_number] = true;
|
||||
}
|
||||
|
||||
void update_entity_manager(EntityManager_t* p_manager)
|
||||
{
|
||||
// This will only update the entity map of the manager
|
||||
|
@ -27,7 +32,10 @@ void update_entity_manager(EntityManager_t* p_manager)
|
|||
{
|
||||
Entity_t *p_entity = get_entity_wtih_id(e_idx);
|
||||
sc_map_put_64v(&p_manager->entities, e_idx, (void *)p_entity);
|
||||
sc_map_put_64v(&p_manager->entities_map[p_entity->m_tag], e_idx, (void *)p_entity);
|
||||
if (p_manager->tag_map_inited[p_entity->m_tag])
|
||||
{
|
||||
sc_map_put_64v(&p_manager->entities_map[p_entity->m_tag], e_idx, (void *)p_entity);
|
||||
}
|
||||
}
|
||||
sc_queue_clear(&p_manager->to_add);
|
||||
|
||||
|
@ -42,7 +50,10 @@ void update_entity_manager(EntityManager_t* p_manager)
|
|||
sc_map_del_64v(&p_manager->component_map[i], e_idx);
|
||||
p_entity->components[i] = MAX_COMP_POOL_SIZE;
|
||||
}
|
||||
sc_map_del_64v(&p_manager->entities_map[p_entity->m_tag], e_idx);
|
||||
if (p_manager->tag_map_inited[p_entity->m_tag])
|
||||
{
|
||||
sc_map_del_64v(&p_manager->entities_map[p_entity->m_tag], e_idx);
|
||||
}
|
||||
free_entity_to_mempool(e_idx);
|
||||
sc_map_del_64v(&p_manager->entities, e_idx);
|
||||
}
|
||||
|
@ -88,7 +99,10 @@ void free_entity_manager(EntityManager_t* p_manager)
|
|||
}
|
||||
for (size_t i = 0; i < N_TAGS; ++i)
|
||||
{
|
||||
sc_map_term_64v(p_manager->entities_map + i);
|
||||
if (p_manager->tag_map_inited[i])
|
||||
{
|
||||
sc_map_term_64v(p_manager->entities_map + i);
|
||||
}
|
||||
}
|
||||
sc_queue_term(&p_manager->to_add);
|
||||
sc_queue_term(&p_manager->to_remove);
|
||||
|
|
|
@ -883,8 +883,11 @@ static void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
|||
|
||||
void init_sandbox_scene(LevelScene_t* scene)
|
||||
{
|
||||
//init_scene(&scene->scene, LEVEL_SCENE, &level_scene_render_func, &level_do_action);
|
||||
init_scene(&scene->scene, &level_scene_render_func, &level_do_action);
|
||||
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, LEVEL_END_TAG, 16);
|
||||
init_entity_tag_map(&scene->scene.ent_manager, DYNMEM_ENT_TAG, 16);
|
||||
|
||||
scene->data.tilemap.tiles = all_tiles;
|
||||
init_level_scene_data(
|
||||
|
|
|
@ -345,8 +345,11 @@ static void render_regular_game_scene(Scene_t* scene)
|
|||
|
||||
void init_game_scene(LevelScene_t* scene)
|
||||
{
|
||||
//init_scene(&scene->scene, LEVEL_SCENE, &level_scene_render_func, &level_do_action);
|
||||
init_scene(&scene->scene, &level_scene_render_func, &level_do_action);
|
||||
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, LEVEL_END_TAG, 16);
|
||||
init_entity_tag_map(&scene->scene.ent_manager, DYNMEM_ENT_TAG, 16);
|
||||
|
||||
scene->data.tilemap.tiles = all_tiles;
|
||||
init_level_scene_data(
|
||||
|
|
Loading…
Reference in New Issue