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
|
// All fields are Read-Only
|
||||||
struct sc_map_64v entities; // ent id : entity
|
struct sc_map_64v entities; // ent id : entity
|
||||||
struct sc_map_64v entities_map[N_TAGS]; // [{ent id: ent}]
|
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_map_64v component_map[N_COMPONENTS]; // [{ent id: comp}, ...]
|
||||||
struct sc_queue_uint to_add;
|
struct sc_queue_uint to_add;
|
||||||
struct sc_queue_uint to_remove;
|
struct sc_queue_uint to_remove;
|
||||||
|
@ -259,6 +260,7 @@ struct EntityManager {
|
||||||
};
|
};
|
||||||
|
|
||||||
void init_entity_manager(EntityManager_t* p_manager);
|
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 update_entity_manager(EntityManager_t* p_manager);
|
||||||
void clear_entity_manager(EntityManager_t* p_manager);
|
void clear_entity_manager(EntityManager_t* p_manager);
|
||||||
void free_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);
|
sc_map_init_64v(p_manager->component_map + i, MAX_COMP_POOL_SIZE, 0);
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < N_TAGS; ++i)
|
memset(p_manager->tag_map_inited, 0, sizeof(p_manager->tag_map_inited));
|
||||||
{
|
|
||||||
sc_map_init_64v(p_manager->entities_map + i, MAX_COMP_POOL_SIZE, 0);
|
|
||||||
}
|
|
||||||
sc_queue_init(&p_manager->to_add);
|
sc_queue_init(&p_manager->to_add);
|
||||||
sc_queue_init(&p_manager->to_remove);
|
sc_queue_init(&p_manager->to_remove);
|
||||||
sc_queue_init(&p_manager->to_update);
|
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)
|
void update_entity_manager(EntityManager_t* p_manager)
|
||||||
{
|
{
|
||||||
// This will only update the entity map of the manager
|
// This will only update the entity map of the manager
|
||||||
|
@ -27,8 +32,11 @@ void update_entity_manager(EntityManager_t* p_manager)
|
||||||
{
|
{
|
||||||
Entity_t *p_entity = get_entity_wtih_id(e_idx);
|
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, 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_map_put_64v(&p_manager->entities_map[p_entity->m_tag], e_idx, (void *)p_entity);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
sc_queue_clear(&p_manager->to_add);
|
sc_queue_clear(&p_manager->to_add);
|
||||||
|
|
||||||
sc_queue_foreach (&p_manager->to_remove, e_idx)
|
sc_queue_foreach (&p_manager->to_remove, e_idx)
|
||||||
|
@ -42,7 +50,10 @@ void update_entity_manager(EntityManager_t* p_manager)
|
||||||
sc_map_del_64v(&p_manager->component_map[i], e_idx);
|
sc_map_del_64v(&p_manager->component_map[i], e_idx);
|
||||||
p_entity->components[i] = MAX_COMP_POOL_SIZE;
|
p_entity->components[i] = MAX_COMP_POOL_SIZE;
|
||||||
}
|
}
|
||||||
|
if (p_manager->tag_map_inited[p_entity->m_tag])
|
||||||
|
{
|
||||||
sc_map_del_64v(&p_manager->entities_map[p_entity->m_tag], e_idx);
|
sc_map_del_64v(&p_manager->entities_map[p_entity->m_tag], e_idx);
|
||||||
|
}
|
||||||
free_entity_to_mempool(e_idx);
|
free_entity_to_mempool(e_idx);
|
||||||
sc_map_del_64v(&p_manager->entities, e_idx);
|
sc_map_del_64v(&p_manager->entities, e_idx);
|
||||||
}
|
}
|
||||||
|
@ -87,9 +98,12 @@ void free_entity_manager(EntityManager_t* p_manager)
|
||||||
sc_map_term_64v(p_manager->component_map + i);
|
sc_map_term_64v(p_manager->component_map + i);
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < N_TAGS; ++i)
|
for (size_t i = 0; i < N_TAGS; ++i)
|
||||||
|
{
|
||||||
|
if (p_manager->tag_map_inited[i])
|
||||||
{
|
{
|
||||||
sc_map_term_64v(p_manager->entities_map + i);
|
sc_map_term_64v(p_manager->entities_map + i);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
sc_queue_term(&p_manager->to_add);
|
sc_queue_term(&p_manager->to_add);
|
||||||
sc_queue_term(&p_manager->to_remove);
|
sc_queue_term(&p_manager->to_remove);
|
||||||
sc_queue_term(&p_manager->to_update);
|
sc_queue_term(&p_manager->to_update);
|
||||||
|
|
|
@ -883,8 +883,11 @@ static void level_do_action(Scene_t* scene, ActionType_t action, bool pressed)
|
||||||
|
|
||||||
void init_sandbox_scene(LevelScene_t* scene)
|
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_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;
|
scene->data.tilemap.tiles = all_tiles;
|
||||||
init_level_scene_data(
|
init_level_scene_data(
|
||||||
|
|
|
@ -345,8 +345,11 @@ static void render_regular_game_scene(Scene_t* scene)
|
||||||
|
|
||||||
void init_game_scene(LevelScene_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_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;
|
scene->data.tilemap.tiles = all_tiles;
|
||||||
init_level_scene_data(
|
init_level_scene_data(
|
||||||
|
|
Loading…
Reference in New Issue