std::set works better for entity groups

This commit is contained in:
NukeBird 2025-02-20 14:36:48 +03:00
parent fbbe04f942
commit 219af9d803

View file

@ -97,7 +97,7 @@ namespace zecsy
std::unordered_map<comp_id, component_pool> pools; std::unordered_map<comp_id, component_pool> pools;
using archetype_signature = std::vector<comp_id>; using archetype_signature = std::vector<comp_id>;
using entity_group = std::vector<entity_id>; using entity_group = std::set<entity_id>;
struct archetype_hash struct archetype_hash
{ {
@ -186,7 +186,7 @@ namespace zecsy
std::vector<comp_id> key; std::vector<comp_id> key;
auto& group = archetypes[key]; auto& group = archetypes[key];
group.emplace_back(id); group.emplace(id);
return id; return id;
} }
@ -199,7 +199,7 @@ namespace zecsy
std::vector<comp_id> key(comp_set.begin(), comp_set.end()); std::vector<comp_id> key(comp_set.begin(), comp_set.end());
auto& group = archetypes[key]; auto& group = archetypes[key];
group.erase(std::remove(group.begin(), group.end(), e), group.end()); group.erase(e);
if(archetypes[key].empty()) if(archetypes[key].empty())
{ {
@ -279,8 +279,7 @@ namespace zecsy
std::vector<comp_id> old_key(old_set.begin(), old_set.end()); std::vector<comp_id> old_key(old_set.begin(), old_set.end());
auto& group = archetypes[old_key]; auto& group = archetypes[old_key];
group.erase(std::remove(group.begin(), group.end(), e), group.erase(e);
group.end());
if(archetypes[old_key].empty()) if(archetypes[old_key].empty())
{ {
@ -288,7 +287,7 @@ namespace zecsy
} }
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); archetypes[new_key].emplace(e);
} }
} }
@ -311,13 +310,12 @@ namespace zecsy
std::sort(old_key.begin(), old_key.end()); std::sort(old_key.begin(), old_key.end());
auto& old_group = archetypes[old_key]; auto& old_group = archetypes[old_key];
old_group.erase(std::remove(old_group.begin(), old_group.end(), e), old_group.erase(e);
old_group.end());
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()); std::sort(new_key.begin(), new_key.end());
archetypes[new_key].emplace_back(e); archetypes[new_key].emplace(e);
if(archetypes[old_key].empty()) if(archetypes[old_key].empty())
{ {