📦Archetypes📦
This commit is contained in:
parent
6bd041342a
commit
8055ac0cac
1 changed files with 16 additions and 25 deletions
41
zecsy.hpp
41
zecsy.hpp
|
@ -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>
|
||||||
|
|
Loading…
Reference in a new issue