From 8055ac0cac2fe8131bce8110883f1e4e56dd1dad Mon Sep 17 00:00:00 2001 From: NukeBird Date: Thu, 20 Feb 2025 01:52:30 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6Archetypes=F0=9F=93=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zecsy.hpp | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/zecsy.hpp b/zecsy.hpp index e7ec72b..d9663b2 100644 --- a/zecsy.hpp +++ b/zecsy.hpp @@ -245,36 +245,27 @@ namespace zecsy auto id = get_component_id(); auto& comp_set = entity_to_comps[e]; - if(!comp_set.contains(id)) + if(comp_set.erase(id) > 0) { - return; - } + std::vector old_key(comp_set.begin(), comp_set.end()); + old_key.push_back(id); + std::sort(old_key.begin(), old_key.end()); - std::set old_set = comp_set; - size_t removed = comp_set.erase(id); - - if(removed > 0) - { - std::vector 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 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