📦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& 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;
|
||||
size_t removed = comp_set.erase(id);
|
||||
|
||||
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);
|
||||
}
|
||||
auto& old_group = archetypes[old_key];
|
||||
old_group.erase(std::remove(old_group.begin(), old_group.end(), e),
|
||||
old_group.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];
|
||||
auto index = pool.entity_to_index[e];
|
||||
pool.free_list.push_back(index);
|
||||
pool.entity_to_index.erase(e);
|
||||
pool.index_to_entity.erase(index);
|
||||
archetypes[new_key].emplace_back(e);
|
||||
|
||||
auto& pool = pools[id];
|
||||
auto index = pool.entity_to_index[e];
|
||||
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>
|
||||
|
|
Loading…
Reference in a new issue