Jeck - Deck editor filtering now works much better- single filter, automatically recolors itself to match the active color.
This commit is contained in:
@@ -105,7 +105,7 @@ private:
|
|||||||
int mStage;
|
int mStage;
|
||||||
int nbDecks;
|
int nbDecks;
|
||||||
int deckNum;
|
int deckNum;
|
||||||
int useFilter[2];
|
int useFilter;
|
||||||
JMusic * bgMusic;
|
JMusic * bgMusic;
|
||||||
JQuad * backQuad;
|
JQuad * backQuad;
|
||||||
WGuiFilters * filterDeck;
|
WGuiFilters * filterDeck;
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ private:
|
|||||||
class WCardFilter{
|
class WCardFilter{
|
||||||
public:
|
public:
|
||||||
WCardFilter() {};
|
WCardFilter() {};
|
||||||
|
virtual void recolor(int mtgcolor) {};
|
||||||
|
virtual bool filtersColor() {return false;};
|
||||||
virtual ~WCardFilter() {};
|
virtual ~WCardFilter() {};
|
||||||
virtual bool isMatch(MTGCard * c) {return true;};
|
virtual bool isMatch(MTGCard * c) {return true;};
|
||||||
virtual string getCode() = 0;
|
virtual string getCode() = 0;
|
||||||
@@ -29,8 +31,10 @@ class WCFBranch: public WCardFilter{
|
|||||||
public:
|
public:
|
||||||
WCFBranch(WCardFilter * a, WCardFilter * b) {lhs=a;rhs=b;};
|
WCFBranch(WCardFilter * a, WCardFilter * b) {lhs=a;rhs=b;};
|
||||||
~WCFBranch() {SAFE_DELETE(lhs); SAFE_DELETE(rhs);};
|
~WCFBranch() {SAFE_DELETE(lhs); SAFE_DELETE(rhs);};
|
||||||
|
virtual bool filtersColor() {return (rhs->filtersColor() || lhs->filtersColor());};
|
||||||
virtual bool isMatch(MTGCard * c) = 0;
|
virtual bool isMatch(MTGCard * c) = 0;
|
||||||
virtual string getCode() = 0;
|
virtual string getCode() = 0;
|
||||||
|
virtual void recolor(int mtgcolor) {rhs->recolor(mtgcolor);lhs->recolor(mtgcolor);};
|
||||||
virtual WCardFilter * Right(){return rhs;};
|
virtual WCardFilter * Right(){return rhs;};
|
||||||
virtual WCardFilter * Left(){return lhs;};
|
virtual WCardFilter * Left(){return lhs;};
|
||||||
protected:
|
protected:
|
||||||
@@ -57,6 +61,8 @@ class WCFilterGROUP: public WCardFilter{
|
|||||||
public:
|
public:
|
||||||
WCFilterGROUP(WCardFilter * _k) {kid = _k;};
|
WCFilterGROUP(WCardFilter * _k) {kid = _k;};
|
||||||
~WCFilterGROUP() {SAFE_DELETE(kid);};
|
~WCFilterGROUP() {SAFE_DELETE(kid);};
|
||||||
|
virtual void recolor(int mtgcolor) {kid->recolor(mtgcolor);};
|
||||||
|
virtual bool filtersColor() {return (kid->filtersColor());};
|
||||||
bool isMatch(MTGCard *c) {return kid->isMatch(c);};
|
bool isMatch(MTGCard *c) {return kid->isMatch(c);};
|
||||||
string getCode();
|
string getCode();
|
||||||
float filterFee() {return kid->filterFee();};
|
float filterFee() {return kid->filterFee();};
|
||||||
@@ -68,6 +74,8 @@ class WCFilterNOT: public WCardFilter{
|
|||||||
public:
|
public:
|
||||||
WCFilterNOT(WCardFilter * _k) {kid = _k;};
|
WCFilterNOT(WCardFilter * _k) {kid = _k;};
|
||||||
~WCFilterNOT() {SAFE_DELETE(kid);};
|
~WCFilterNOT() {SAFE_DELETE(kid);};
|
||||||
|
virtual void recolor(int mtgcolor) {kid->recolor(mtgcolor);};
|
||||||
|
virtual bool filtersColor() {return (kid->filtersColor());};
|
||||||
bool isMatch(MTGCard *c) {return !kid->isMatch(c);};
|
bool isMatch(MTGCard *c) {return !kid->isMatch(c);};
|
||||||
string getCode();
|
string getCode();
|
||||||
protected:
|
protected:
|
||||||
@@ -105,9 +113,11 @@ protected:
|
|||||||
class WCFilterColor: public WCardFilter{
|
class WCFilterColor: public WCardFilter{
|
||||||
public:
|
public:
|
||||||
WCFilterColor(int _c) {color = _c;};
|
WCFilterColor(int _c) {color = _c;};
|
||||||
|
virtual void recolor(int mtgcolor) {color = mtgcolor;};
|
||||||
WCFilterColor(string arg);
|
WCFilterColor(string arg);
|
||||||
bool isMatch(MTGCard * c);
|
bool isMatch(MTGCard * c);
|
||||||
string getCode();
|
string getCode();
|
||||||
|
bool filtersColor() {return true;};
|
||||||
float filterFee() {return 0.2f;};
|
float filterFee() {return 0.2f;};
|
||||||
protected:
|
protected:
|
||||||
int color;
|
int color;
|
||||||
@@ -124,6 +134,8 @@ public:
|
|||||||
WCFilterProducesColor(int _c) : WCFilterColor(_c) {};
|
WCFilterProducesColor(int _c) : WCFilterColor(_c) {};
|
||||||
WCFilterProducesColor(string arg) : WCFilterColor(arg) {};
|
WCFilterProducesColor(string arg) : WCFilterColor(arg) {};
|
||||||
bool isMatch(MTGCard * c);
|
bool isMatch(MTGCard * c);
|
||||||
|
void recolor(int mtgcolor) {return;};
|
||||||
|
bool filtersColor() {return false;}; //We only want to know about filtering against card color, not produced.
|
||||||
string getCode();
|
string getCode();
|
||||||
};
|
};
|
||||||
class WCFilterNumeric: public WCardFilter{
|
class WCFilterNumeric: public WCardFilter{
|
||||||
|
|||||||
@@ -421,6 +421,7 @@ public:
|
|||||||
void Render();
|
void Render();
|
||||||
void Entering(JButton key);
|
void Entering(JButton key);
|
||||||
void addColumn();
|
void addColumn();
|
||||||
|
void recolorFilter(int color);
|
||||||
bool isAvailable(int type);
|
bool isAvailable(int type);
|
||||||
bool isAvailableCode(string code);
|
bool isAvailableCode(string code);
|
||||||
bool Finish(); //Returns true if card set reasonably expected to be changed.
|
bool Finish(); //Returns true if card set reasonably expected to be changed.
|
||||||
@@ -433,6 +434,7 @@ protected:
|
|||||||
vector< pair<string,string> > tempArgs; //TODO FIXME this is inefficient
|
vector< pair<string,string> > tempArgs; //TODO FIXME this is inefficient
|
||||||
bool bFinished;
|
bool bFinished;
|
||||||
string priorFilter;
|
string priorFilter;
|
||||||
|
int recolorTo, priorRecolor;
|
||||||
WSrcCards* source;
|
WSrcCards* source;
|
||||||
SimpleMenu* subMenu;
|
SimpleMenu* subMenu;
|
||||||
WGuiList * list;
|
WGuiList * list;
|
||||||
|
|||||||
@@ -32,8 +32,7 @@ GameStateDeckViewer::GameStateDeckViewer(GameApp* parent): GameState(parent) {
|
|||||||
bgMusic = NULL;
|
bgMusic = NULL;
|
||||||
nbDecks = 0;
|
nbDecks = 0;
|
||||||
deckNum = 0;
|
deckNum = 0;
|
||||||
useFilter[0] = 0;
|
useFilter = 0;
|
||||||
useFilter[1] = 0;
|
|
||||||
mSwitching = false;
|
mSwitching = false;
|
||||||
welcome_menu = NULL;
|
welcome_menu = NULL;
|
||||||
myCollection = NULL;
|
myCollection = NULL;
|
||||||
@@ -74,41 +73,15 @@ void GameStateDeckViewer::updateFilters(){
|
|||||||
if(!displayed_deck) return;
|
if(!displayed_deck) return;
|
||||||
displayed_deck->clearFilters();
|
displayed_deck->clearFilters();
|
||||||
int i = (displayed_deck == myDeck);
|
int i = (displayed_deck == myDeck);
|
||||||
|
if(i && filterDeck){
|
||||||
if(useFilter[i] == 0){
|
filterDeck->recolorFilter(useFilter-1);
|
||||||
if(i && filterDeck)
|
|
||||||
filterDeck->Finish();
|
filterDeck->Finish();
|
||||||
else if(filterCollection)
|
|
||||||
filterCollection->Finish();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
WCFilterFactory * wc = WCFilterFactory::GetInstance();
|
else if(filterCollection){
|
||||||
switch(useFilter[i]-1){
|
filterCollection->recolorFilter(useFilter-1);
|
||||||
case Constants::MTG_COLOR_ARTIFACT:
|
filterCollection->Finish();
|
||||||
displayed_deck->addFilter(wc->Construct("c:x;"));
|
|
||||||
break;
|
|
||||||
case Constants::MTG_COLOR_GREEN:
|
|
||||||
displayed_deck->addFilter(wc->Construct("c:g;"));
|
|
||||||
break;
|
|
||||||
case Constants::MTG_COLOR_BLUE:
|
|
||||||
displayed_deck->addFilter(wc->Construct("c:u;"));
|
|
||||||
break;
|
|
||||||
case Constants::MTG_COLOR_RED:
|
|
||||||
displayed_deck->addFilter(wc->Construct("c:r;"));
|
|
||||||
break;
|
|
||||||
case Constants::MTG_COLOR_BLACK:
|
|
||||||
displayed_deck->addFilter(wc->Construct("c:b;"));
|
|
||||||
break;
|
|
||||||
case Constants::MTG_COLOR_WHITE:
|
|
||||||
displayed_deck->addFilter(wc->Construct("c:w;"));
|
|
||||||
break;
|
|
||||||
case Constants::MTG_COLOR_LAND:
|
|
||||||
displayed_deck->addFilter(wc->Construct("t:Land;"));
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
//No sanity checking for color filters
|
return;
|
||||||
//if(!displayed_deck->Size())
|
|
||||||
// displayed_deck->clearFilters();
|
|
||||||
}
|
}
|
||||||
void GameStateDeckViewer::loadIndexes(){
|
void GameStateDeckViewer::loadIndexes(){
|
||||||
int x=0;
|
int x=0;
|
||||||
@@ -299,16 +272,16 @@ void GameStateDeckViewer::Update(float dt)
|
|||||||
case JGE_BTN_UP :
|
case JGE_BTN_UP :
|
||||||
last_user_activity = 0;
|
last_user_activity = 0;
|
||||||
mStage = STAGE_TRANSITION_UP;
|
mStage = STAGE_TRANSITION_UP;
|
||||||
useFilter[myD]++;
|
useFilter++;
|
||||||
if(useFilter[myD] >= MAX_SAVED_FILTERS)
|
if(useFilter >= MAX_SAVED_FILTERS)
|
||||||
useFilter[myD] = 0;
|
useFilter = 0;
|
||||||
break;
|
break;
|
||||||
case JGE_BTN_DOWN :
|
case JGE_BTN_DOWN :
|
||||||
last_user_activity = 0;
|
last_user_activity = 0;
|
||||||
mStage = STAGE_TRANSITION_DOWN;
|
mStage = STAGE_TRANSITION_DOWN;
|
||||||
useFilter[myD]--;
|
useFilter--;
|
||||||
if(useFilter[myD] < 0)
|
if(useFilter < 0)
|
||||||
useFilter[myD] = MAX_SAVED_FILTERS-1;
|
useFilter = MAX_SAVED_FILTERS-1;
|
||||||
break;
|
break;
|
||||||
case JGE_BTN_CANCEL:
|
case JGE_BTN_CANCEL:
|
||||||
options[Options::DISABLECARDS].number = !options[Options::DISABLECARDS].number;
|
options[Options::DISABLECARDS].number = !options[Options::DISABLECARDS].number;
|
||||||
@@ -446,7 +419,7 @@ void GameStateDeckViewer::Update(float dt)
|
|||||||
if (displayed_deck == myDeck) {
|
if (displayed_deck == myDeck) {
|
||||||
if (filterDeck) {
|
if (filterDeck) {
|
||||||
if (key == JGE_BTN_CTRL) {
|
if (key == JGE_BTN_CTRL) {
|
||||||
useFilter[(displayed_deck == myDeck)] = 0;
|
useFilter = 0;
|
||||||
filterDeck->Finish();
|
filterDeck->Finish();
|
||||||
filterDeck->Update(dt);
|
filterDeck->Update(dt);
|
||||||
loadIndexes();
|
loadIndexes();
|
||||||
@@ -463,7 +436,7 @@ void GameStateDeckViewer::Update(float dt)
|
|||||||
} else {
|
} else {
|
||||||
if (filterCollection) {
|
if (filterCollection) {
|
||||||
if (key == JGE_BTN_CTRL) {
|
if (key == JGE_BTN_CTRL) {
|
||||||
useFilter[(displayed_deck == myDeck)] = 0;
|
useFilter = 0;
|
||||||
filterCollection->Finish();
|
filterCollection->Finish();
|
||||||
filterCollection->Update(dt);
|
filterCollection->Update(dt);
|
||||||
loadIndexes();
|
loadIndexes();
|
||||||
@@ -501,8 +474,8 @@ void GameStateDeckViewer::renderOnScreenBasicInfo(){
|
|||||||
float w = mFont->GetStringWidth(buffer);
|
float w = mFont->GetStringWidth(buffer);
|
||||||
JRenderer::GetInstance()->FillRoundRect(SCREEN_WIDTH-(w+27),y-5,w+10,15,5,ARGB(128,0,0,0));
|
JRenderer::GetInstance()->FillRoundRect(SCREEN_WIDTH-(w+27),y-5,w+10,15,5,ARGB(128,0,0,0));
|
||||||
mFont->DrawString(buffer, SCREEN_WIDTH-22, y+5,JGETEXT_RIGHT);
|
mFont->DrawString(buffer, SCREEN_WIDTH-22, y+5,JGETEXT_RIGHT);
|
||||||
if (useFilter[myD] != 0)
|
if (useFilter != 0)
|
||||||
JRenderer::GetInstance()->RenderQuad(mIcons[useFilter[myD]-1], SCREEN_WIDTH-10 , y + 10 , 0.0f,0.5,0.5);
|
JRenderer::GetInstance()->RenderQuad(mIcons[useFilter-1], SCREEN_WIDTH-10 , y + 10 , 0.0f,0.5,0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1326,12 +1326,18 @@ bool WGuiFilters::Finish(){
|
|||||||
string src;
|
string src;
|
||||||
if(source){
|
if(source){
|
||||||
src = getCode();
|
src = getCode();
|
||||||
if(priorFilter == src)
|
if(priorFilter == src && recolorTo == priorRecolor)
|
||||||
return false;
|
return false;
|
||||||
source->clearFilters();
|
source->clearFilters();
|
||||||
if(src.size()){
|
if(src.size()){
|
||||||
WCFilterFactory * wc = WCFilterFactory::GetInstance();
|
WCFilterFactory * wc = WCFilterFactory::GetInstance();
|
||||||
source->addFilter(wc->Construct(src));
|
WCardFilter * f = wc->Construct(src);
|
||||||
|
if(recolorTo > -1 && recolorTo < Constants::MTG_NB_COLORS){
|
||||||
|
if(!f->filtersColor())
|
||||||
|
f = NEW WCFilterAND(f,NEW WCFilterColor(recolorTo));
|
||||||
|
f->recolor(recolorTo);
|
||||||
|
}
|
||||||
|
source->addFilter(f);
|
||||||
}
|
}
|
||||||
if(!source->Size()){
|
if(!source->Size()){
|
||||||
source->clearFilters(); //TODO: Pop a "No results found" warning
|
source->clearFilters(); //TODO: Pop a "No results found" warning
|
||||||
@@ -1375,8 +1381,14 @@ void WGuiFilters::buildList(){
|
|||||||
WGuiFilters::WGuiFilters(string header, WSrcCards * src) : WGuiItem(header) {
|
WGuiFilters::WGuiFilters(string header, WSrcCards * src) : WGuiItem(header) {
|
||||||
bFinished = false;
|
bFinished = false;
|
||||||
source = src;
|
source = src;
|
||||||
|
recolorTo = -1;
|
||||||
|
priorRecolor = -1;
|
||||||
buildList();
|
buildList();
|
||||||
}
|
}
|
||||||
|
void WGuiFilters::recolorFilter(int color){
|
||||||
|
priorRecolor = recolorTo;
|
||||||
|
recolorTo = color;
|
||||||
|
}
|
||||||
string WGuiFilters::getCode(){
|
string WGuiFilters::getCode(){
|
||||||
if(!list)
|
if(!list)
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
Reference in New Issue
Block a user