📦Archetypes📦

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

View file

@ -245,30 +245,20 @@ 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());
std::sort(new_key.begin(), new_key.end());
archetypes[new_key].emplace_back(e); archetypes[new_key].emplace_back(e);
}
auto& pool = pools[id]; auto& pool = pools[id];
auto index = pool.entity_to_index[e]; auto index = pool.entity_to_index[e];
@ -276,6 +266,7 @@ namespace zecsy
pool.entity_to_index.erase(e); pool.entity_to_index.erase(e);
pool.index_to_entity.erase(index); pool.index_to_entity.erase(index);
} }
}
template<Component First, Component Second, Component... Rest> template<Component First, Component Second, Component... Rest>
inline bool world::has(entity_id e) const inline bool world::has(entity_id e) const