From bf4595ee70863511ee75619db77022f022ce3939 Mon Sep 17 00:00:00 2001 From: "wagic.jeck" Date: Mon, 8 Feb 2010 06:08:29 +0000 Subject: [PATCH] Jeck - Added filter for mana-producing abilities. --- projects/mtg/include/WFilter.h | 7 +++++++ projects/mtg/include/WGui.h | 1 + projects/mtg/src/WFilter.cpp | 21 +++++++++++++++++++++ projects/mtg/src/WGui.cpp | 17 ++++++++++++++++- 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/projects/mtg/include/WFilter.h b/projects/mtg/include/WFilter.h index 354cef306..3c32b5c3b 100644 --- a/projects/mtg/include/WFilter.h +++ b/projects/mtg/include/WFilter.h @@ -110,6 +110,13 @@ public: bool isMatch(MTGCard * c); string getCode(); }; +class WCFilterProducesColor: public WCFilterColor{ +public: + WCFilterProducesColor(int _c) : WCFilterColor(_c) {}; + WCFilterProducesColor(string arg) : WCFilterColor(arg) {}; + bool isMatch(MTGCard * c); + string getCode(); +}; class WCFilterNumeric: public WCardFilter{ public: WCFilterNumeric(int _num) {number = _num;}; diff --git a/projects/mtg/include/WGui.h b/projects/mtg/include/WGui.h index dc084c290..ecac084fe 100644 --- a/projects/mtg/include/WGui.h +++ b/projects/mtg/include/WGui.h @@ -454,6 +454,7 @@ public: FILTER_SET = BEGIN_FILTERS, FILTER_RARITY, FILTER_COLOR, + FILTER_PRODUCE, FILTER_TYPE, FILTER_BASIC, FILTER_CMC, diff --git a/projects/mtg/src/WFilter.cpp b/projects/mtg/src/WFilter.cpp index a7add4193..04b5c6cb3 100644 --- a/projects/mtg/src/WFilter.cpp +++ b/projects/mtg/src/WFilter.cpp @@ -136,6 +136,8 @@ WCardFilter * WCFilterFactory::Terminal(string type, string arg){ return NEW WCFilterAbility(arg); else if(type == "cmc") return NEW WCFilterCMC(arg); + else if(type == "produces" || type == "ma") + return NEW WCFilterProducesColor(arg); else if(type == "pow" || type == "power") return NEW WCFilterPower(arg); else if(type == "tgh" || type == "tough" || type == "toughness") @@ -197,6 +199,25 @@ string WCFilterOnlyColor::getCode(){ sprintf(buf,"xcolor:%c;",c); return buf; } +//WCFilterProducesColor +bool WCFilterProducesColor::isMatch(MTGCard * c){ + if(!c || !c->data) + return false; + string s = c->data->magicText; + size_t t = s.find("add"); + if(t == string::npos) + return false; + ManaCost * mc = ManaCost::parseManaCost(s.substr(t)); + return (mc->hasColor(color) > 0); +} +string WCFilterProducesColor::getCode(){ + char buf[12]; + char c = '?'; + if(color < 0 || color >= Constants::MTG_NB_COLORS) + c = Constants::MTGColorChars[color]; + sprintf(buf,"produces:%c;",c); + return buf; +} //WCFilterNumeric WCFilterNumeric::WCFilterNumeric(string arg){ number = atoi(arg.c_str()); diff --git a/projects/mtg/src/WGui.cpp b/projects/mtg/src/WGui.cpp index d44041a86..8ecf17eed 100644 --- a/projects/mtg/src/WGui.cpp +++ b/projects/mtg/src/WGui.cpp @@ -1446,7 +1446,7 @@ if(!list) return false; } bool WGuiFilters::isAvailable(int type){ if(!list) return false; - int colors = 0; + int colors = 0, ma = 0; WGuiList * wgl = dynamic_cast(list->Current()); if(wgl){ vector::iterator it; @@ -1456,6 +1456,9 @@ bool WGuiFilters::isAvailable(int type){ switch(type){ case WGuiFilterItem::FILTER_BASIC: return true; + case WGuiFilterItem::FILTER_PRODUCE: + if(wgfi->filterType == type) + ma++; case WGuiFilterItem::FILTER_COLOR: if(wgfi->filterType == type) colors++; @@ -1467,6 +1470,8 @@ bool WGuiFilters::isAvailable(int type){ } if(colors >= 5) return false; + if(ma >= 5) + return false; return true; } return false; //For some reason, we don't have any rows? @@ -1499,6 +1504,10 @@ void WGuiFilterItem::updateValue(){ mParent->subMenu->Add(FILTER_COLOR,"Color"); delMenu = false; } + if(mParent->isAvailable(FILTER_PRODUCE)){ + mParent->subMenu->Add(FILTER_PRODUCE,"Mana Ability"); + delMenu = false; + } if(mParent->isAvailable(FILTER_TYPE)){ mParent->subMenu->Add(FILTER_TYPE,"Type"); delMenu = false; @@ -1574,6 +1583,12 @@ void WGuiFilterItem::updateValue(){ addArg("Red","c:r;"); addArg("Green","c:g;"); addArg("Black","c:b;"); + }else if(filterType == FILTER_PRODUCE){ + addArg("White mana abiltity","ma:w;"); + addArg("Blue mana abiltity","ma:u;"); + addArg("Red mana abiltity","ma:r;"); + addArg("Green mana abiltity","ma:g;"); + addArg("Black mana abiltity","ma:b;"); }else if(filterType == FILTER_BASIC){ char buf[512]; for(int i=0;i