]> git.tdb.fi Git - poefilter.git/blobdiff - source/category.cpp
Correctly merge icon and light beam appearances
[poefilter.git] / source / category.cpp
index bb2484dca021cbe11e52953ccf3f1c10ef65dbe7..e697aeefac209d456bb2ac30d6f8bb1474d75e55 100644 (file)
@@ -47,7 +47,15 @@ void Category::create_statements(list<FilterStatement> &st) const
                st.push_back(FilterStatement());
 
        if(condition)
-               condition->add_lines(st);
+       {
+               Condition *flat = condition->flatten();
+               if(flat)
+               {
+                       flat->add_lines(st);
+                       delete flat;
+               }
+               // TODO handle the case of the entire condition being non-viable
+       }
 }
 
 
@@ -59,12 +67,14 @@ Category::Loader::Loader(Category &c, const PoeFilter &p, CompoundCondition *n):
 {
        add("and", &Loader::and_);
        add("base_type", &Loader::condition<BaseTypeCondition>);
+       add("category", &Loader::category);
        add("class", &Loader::condition<ClassCondition>);
        add_range<DropLevelCondition>("drop_level");
        add_range<HeightCondition>("height");
        add_range<ItemLevelCondition>("item_level");
        add("linked_colors", &Loader::linked_colors);
        add_range<LinkedSocketsCondition>("linked_sockets");
+       add_range<MapTierCondition>("map_tier");
        add_range<SocketsCondition>("sockets");
        add("or", &Loader::or_);
        add_range<QualityCondition>("quality");
@@ -106,6 +116,12 @@ void Category::Loader::and_()
        add_condition(cond.release());
 }
 
+void Category::Loader::category(const string &name)
+{
+       const Category &categ = poe.get_category(name);
+       add_condition(categ.condition->clone());
+}
+
 template<typename T>
 void Category::Loader::condition(typename T::Type value)
 {