Kaynağa Gözat

observer: use any<T...> rather than a fold expression with has<T>

Michele Caini 6 yıl önce
ebeveyn
işleme
6a560fc7bf
2 değiştirilmiş dosya ile 2 ekleme ve 3 silme
  1. 0 1
      TODO
  2. 2 2
      src/entt/entity/observer.hpp

+ 0 - 1
TODO

@@ -16,7 +16,6 @@
 * any-of rule for views/groups (eg entity has A and any of B/C/D)
   - get -> all, exclude -> none
 * review prepare after clone and the others have been removed
-* !(has<T>(e) || ...) -> !any<T...>(e)
 * review pool<T>::remove, ::assign
 
 * WIP:

+ 2 - 2
src/entt/entity/observer.hpp

@@ -177,7 +177,7 @@ class basic_observer {
     struct matcher_handler<matcher<type_list<Reject...>, type_list<Require...>, AnyOf>> {
         template<std::size_t Index>
         static void maybe_valid_if(basic_observer &obs, const basic_registry<Entity> &reg, const Entity entt) {
-            if(reg.template has<Require...>(entt) && !(reg.template has<Reject>(entt) || ...)) {
+            if(reg.template has<Require...>(entt) && !reg.template any<Reject...>(entt)) {
                 if(auto *comp = obs.view.try_get(entt); !comp) {
                     obs.view.construct(entt);
                 }
@@ -213,7 +213,7 @@ class basic_observer {
     struct matcher_handler<matcher<type_list<Reject...>, type_list<Require...>, type_list<NoneOf...>, AllOf...>> {
         template<std::size_t Index>
         static void maybe_valid_if(basic_observer &obs, const basic_registry<Entity> &reg, const Entity entt) {
-            if(reg.template has<AllOf..., Require...>(entt) && !(reg.template has<NoneOf>(entt) || ...) && !(reg.template has<Reject>(entt) || ...)) {
+            if(reg.template has<AllOf..., Require...>(entt) && !reg.template any<NoneOf..., Reject...>(entt)) {
                 if(auto *comp = obs.view.try_get(entt); !comp) {
                     obs.view.construct(entt);
                 }