]> git.tdb.fi Git - poefilter.git/blobdiff - source/category.cpp
Allow categories to use other categories as conditions
[poefilter.git] / source / category.cpp
index 4ceed1883df32f7e971bd8dcb594795f64fa831c..fb12fec0ddfd25fa0dc14996b80e780af62507ae 100644 (file)
@@ -8,12 +8,17 @@
 using namespace std;
 using namespace Msp;
 
-Category::Category(const string &n):
-       name(n),
+Category::Category():
        condition(0),
        order(0)
 { }
 
+Category::Category(const string &n, unsigned o):
+       name(n),
+       condition(0),
+       order(o)
+{ }
+
 Category::Category(const Category &other):
        name(other.name),
        condition(other.condition ? other.condition->clone() : 0),
@@ -54,6 +59,7 @@ 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");
@@ -62,7 +68,6 @@ Category::Loader::Loader(Category &c, const PoeFilter &p, CompoundCondition *n):
        add_range<LinkedSocketsCondition>("linked_sockets");
        add_range<SocketsCondition>("sockets");
        add("or", &Loader::or_);
-       add("order", &Category::order);
        add_range<QualityCondition>("quality");
        add_range<RarityCondition>("rarity");
        add_range<WidthCondition>("width");
@@ -102,6 +107,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)
 {