From f5d0d451b44c76cfdfe39da221b5c88a096255d1 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Sat, 11 Mar 2023 19:23:09 +0100 Subject: [PATCH] group: split pools and filter in the group handlers --- src/entt/entity/group.hpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/entt/entity/group.hpp b/src/entt/entity/group.hpp index 71f891f82..b3630933f 100644 --- a/src/entt/entity/group.hpp +++ b/src/entt/entity/group.hpp @@ -102,13 +102,14 @@ struct group_handler, get_t, exclude_t> { using entity_type = std::common_type_t; group_handler(Owned &...opool, Get &...gpool, Exclude &...epool) - : pools{&opool..., &gpool..., &epool...} {} + : pools{&opool..., &gpool...}, + filter{&epool...} {} template void maybe_valid_if(const entity_type entt) { if(((std::is_same_v || std::get(pools)->contains(entt)) && ...) && ((std::is_same_v || std::get(pools)->contains(entt)) && ...) - && ((std::is_same_v || !std::get(pools)->contains(entt)) && ...) + && ((std::is_same_v || !std::get(filter)->contains(entt)) && ...) && !(std::get<0>(pools)->index(entt) < current)) { const auto pos = current++; (std::get(pools)->swap_elements(std::get(pools)->data()[pos], entt), ...); @@ -125,7 +126,8 @@ struct group_handler, get_t, exclude_t> { std::size_t current{}; private: - std::tuple pools; + std::tuple pools; + std::tuple filter; }; template @@ -139,12 +141,13 @@ struct group_handler, get_t, exclude_t>: std::comm template group_handler(const Alloc &alloc, Get &...gpool, Exclude &...epool) : basic_common_type{alloc}, - pools{&gpool..., &epool...} {} + pools{&gpool...}, + filter{&epool...} {} template void maybe_valid_if(const entity_type entt) { if(((std::is_same_v || std::get(pools)->contains(entt)) && ...) - && ((std::is_same_v || !std::get(pools)->contains(entt)) && ...) + && ((std::is_same_v || !std::get(filter)->contains(entt)) && ...) && !basic_common_type::contains(entt)) { basic_common_type::push(entt); } @@ -155,7 +158,8 @@ struct group_handler, get_t, exclude_t>: std::comm } private: - std::tuple pools; + std::tuple pools; + std::tuple filter; }; } // namespace internal