std::set works better for entity groups
This commit is contained in:
parent
fbbe04f942
commit
219af9d803
1 changed files with 7 additions and 9 deletions
16
zecsy.hpp
16
zecsy.hpp
|
@ -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())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue