📦Archetypes📦

This commit is contained in:
NukeBird 2025-02-20 01:52:30 +03:00
parent 6bd041342a
commit 8055ac0cac

View file

@ -245,36 +245,27 @@ namespace zecsy
auto id = get_component_id<T>(); auto id = get_component_id<T>();
auto& comp_set = entity_to_comps[e]; auto& comp_set = entity_to_comps[e];
if(!comp_set.contains(id)) if(comp_set.erase(id) > 0)
{ {
return; std::vector<comp_id> old_key(comp_set.begin(), comp_set.end());
} old_key.push_back(id);
std::sort(old_key.begin(), old_key.end());
std::set<comp_id> old_set = comp_set; auto& old_group = archetypes[old_key];
size_t removed = comp_set.erase(id); old_group.erase(std::remove(old_group.begin(), old_group.end(), e),
old_group.end());
if(removed > 0)
{
std::vector<comp_id> old_key(old_set.begin(), old_set.end());
auto& group = archetypes[old_key];
group.erase(std::remove(group.begin(), group.end(), e),
group.end());
if(archetypes[old_key].empty())
{
archetypes.erase(old_key);
}
std::vector<comp_id> new_key(comp_set.begin(), comp_set.end()); std::vector<comp_id> new_key(comp_set.begin(), comp_set.end());
archetypes[new_key].emplace_back(e); std::sort(new_key.begin(), new_key.end());
}
auto& pool = pools[id]; archetypes[new_key].emplace_back(e);
auto index = pool.entity_to_index[e];
pool.free_list.push_back(index); auto& pool = pools[id];
pool.entity_to_index.erase(e); auto index = pool.entity_to_index[e];
pool.index_to_entity.erase(index); pool.free_list.push_back(index);
pool.entity_to_index.erase(e);
pool.index_to_entity.erase(index);
}
} }
template<Component First, Component Second, Component... Rest> template<Component First, Component Second, Component... Rest>