diff --git a/projects/mtg/bin/Res/test/_tests.txt b/projects/mtg/bin/Res/test/_tests.txt index d32e5cd3e..5a48101c2 100644 --- a/projects/mtg/bin/Res/test/_tests.txt +++ b/projects/mtg/bin/Res/test/_tests.txt @@ -424,6 +424,7 @@ seismic_assault.txt seismic_spike_i191.txt selesnya_guildmage.txt shard_volley.txt +sigil_captain_i467.txt silver_seraph_i300.txt skullcage0_i239.txt skullcage1_i239.txt diff --git a/projects/mtg/bin/Res/test/bugs/sigil_captain_i467.txt b/projects/mtg/bin/Res/test/sigil_captain_i467.txt similarity index 100% rename from projects/mtg/bin/Res/test/bugs/sigil_captain_i467.txt rename to projects/mtg/bin/Res/test/sigil_captain_i467.txt diff --git a/projects/mtg/include/GameStateDeckViewer.h b/projects/mtg/include/GameStateDeckViewer.h index c0894afd7..a0b0e2454 100644 --- a/projects/mtg/include/GameStateDeckViewer.h +++ b/projects/mtg/include/GameStateDeckViewer.h @@ -71,7 +71,7 @@ enum DECK_VIEWER_MENU_ITEMS #define ROTATE_RIGHT 0; #define HIGH_SPEED 15.0 -#define MED_SPEED 5.0 +#define MED_SPEED 5.0f #define LOW_SPEED 1.5 #define MAX_SAVED_FILTERS 8 diff --git a/projects/mtg/include/MTGAbility.h b/projects/mtg/include/MTGAbility.h index 48c060d0a..db2f8e28e 100644 --- a/projects/mtg/include/MTGAbility.h +++ b/projects/mtg/include/MTGAbility.h @@ -252,13 +252,17 @@ class TriggerNextPhase:public TriggerAtPhase{ class GenericTriggeredAbility:public TriggeredAbility, public NestedAbility{ public: TriggeredAbility * t; + queue targets; MTGAbility * destroyCondition; GenericTriggeredAbility(int id, MTGCardInstance * _source, TriggeredAbility * _t, MTGAbility * a,MTGAbility * dc = NULL, Targetable * _target = NULL); virtual int trigger(); virtual int triggerOnEvent(WEvent * e); virtual int resolve(); virtual int testDestroy(); - void setTriggerTargets(WEvent * e, MTGAbility * a); + + Targetable * getTriggerTarget(WEvent * e, MTGAbility * a); + void setTriggerTargets(Targetable * ta, MTGAbility * a); + void Update(float dt); virtual GenericTriggeredAbility* clone() const; const char * getMenuText(); diff --git a/projects/mtg/src/GameOptions.cpp b/projects/mtg/src/GameOptions.cpp index ea5bcfe12..4d100e8aa 100644 --- a/projects/mtg/src/GameOptions.cpp +++ b/projects/mtg/src/GameOptions.cpp @@ -843,19 +843,23 @@ bool GameOptionAward::read(string input){ tvals[i] = 0; string buf; - for(size_t t=0,i=0;;t++){ - if(!isdigit(input[t])){ - if(!isspace(input[t]) && buf.size()){ + for (size_t t=0,i=0; t < input.size();t++) + { + if(!isdigit(input[t])) + { + if(!isspace(input[t]) && buf.size()) + { tvals[i] = atoi(buf.c_str()); if(tvals[i] < 0) tvals[i] = 0; buf.clear(); i++; //Advance through input. } - }else + } + else buf+= input[t]; - if(t >= input.size() || i >= 5) + if (i >= 5) break; } diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index ebda3c7a0..91bd7a13c 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -957,7 +957,7 @@ void GameStateDeckViewer::renderOnScreenMenu(){ sprintf(buffer, ((*countPerCostAndColor)[i][j]>0)?_("%i").c_str():".", (*countPerCostAndColor)[i][j]); font->DrawString(buffer, 64 + leftTransition + j*15, posY); } - r->FillRect((float)77 + leftTransition + (Constants::MTG_NB_COLORS-2)*15, posY + 2, (*countPerCost)[i]*5, 8, graphColor); + r->FillRect(77.f + leftTransition + (Constants::MTG_NB_COLORS-2)*15, posY + 2, (*countPerCost)[i]*5, 8, graphColor); posY += 10; } diff --git a/projects/mtg/src/MTGAbility.cpp b/projects/mtg/src/MTGAbility.cpp index 964497fdd..0e2a12846 100644 --- a/projects/mtg/src/MTGAbility.cpp +++ b/projects/mtg/src/MTGAbility.cpp @@ -2626,27 +2626,44 @@ int GenericTriggeredAbility::trigger(){ int GenericTriggeredAbility::triggerOnEvent(WEvent * e){ if (t->triggerOnEvent(e)) { - - setTriggerTargets(e,ability); + targets.push(getTriggerTarget(e,ability)); return 1; } return 0; } -void GenericTriggeredAbility::setTriggerTargets(WEvent * e,MTGAbility * a){ +Targetable * GenericTriggeredAbility::getTriggerTarget(WEvent * e,MTGAbility * a){ TriggerTargetChooser * ttc = dynamic_cast(a->tc); - if (ttc) { - a->target = e->getTarget(ttc->triggerTarget); - ttc->target = e->getTarget(ttc->triggerTarget); - } + if (ttc) + return e->getTarget(ttc->triggerTarget); NestedAbility * na = dynamic_cast(a); - if (na) setTriggerTargets(e,na->ability); + if (na) return getTriggerTarget(e,na->ability); MultiAbility * ma = dynamic_cast(a); if (ma) { for (size_t i = 0; i < ma->abilities.size(); i++) { - setTriggerTargets(e,ma->abilities[i]); + return getTriggerTarget(e,ma->abilities[i]); + } + } + + return NULL; +} + +void GenericTriggeredAbility::setTriggerTargets(Targetable * ta ,MTGAbility * a){ + TriggerTargetChooser * ttc = dynamic_cast(a->tc); + if (ttc) { + a->target = ta; + ttc->target = ta; + } + + NestedAbility * na = dynamic_cast(a); + if (na) setTriggerTargets(ta,na->ability); + + MultiAbility * ma = dynamic_cast(a); + if (ma) { + for (size_t i = 0; i < ma->abilities.size(); i++) { + setTriggerTargets(ta,ma->abilities[i]); } } } @@ -2660,6 +2677,10 @@ void GenericTriggeredAbility::Update(float dt){ } int GenericTriggeredAbility::resolve(){ + if (targets.size()) { + setTriggerTargets(targets.front() ,ability); + targets.pop(); + } if (ability->oneShot) return ability->resolve(); MTGAbility * clone = ability->clone(); clone->addToGame(); diff --git a/projects/mtg/src/Tasks.cpp b/projects/mtg/src/Tasks.cpp index 3a0245e25..2bf66f046 100644 --- a/projects/mtg/src/Tasks.cpp +++ b/projects/mtg/src/Tasks.cpp @@ -482,7 +482,7 @@ void TaskList::Render() { sprintf(buffer, "%s", (*it)->getShortDesc().c_str()); f2->DrawString(buffer, posX, posY); if(mBgTex){ - f->SetScale(.8); + f->SetScale(.8f); } sprintf(buffer, _("Days left: %i").c_str(), (*it)->getExpiration()); f->DrawString(buffer, SCREEN_WIDTH - 190, posY); diff --git a/projects/mtg/src/utils.cpp b/projects/mtg/src/utils.cpp index 285a2e2ee..7f2647d42 100644 --- a/projects/mtg/src/utils.cpp +++ b/projects/mtg/src/utils.cpp @@ -182,44 +182,22 @@ u32 ramAvailable (void) } - string& trim(string &str) { - int i,j,start,end; - - //ltrim - for (i=0; (str[i]!=0 && str[i]<=32); ) - i++; - start=i; - - //rtrim - for(i=0,j=0; str[i]!=0; i++) - j = ((str[i]<=32)? j+1 : 0); - end=i-j; - str = str.substr(start,end-start); - return str; + str = ltrim(str); + str = rtrim(str); + return str; } string& ltrim(string &str) { - int i,start; - - for (i=0; (str[i]!=0 && str[i]<=32); ) - i++; - start=i; - - str = str.substr(start,str.length()-start); - return str; + str.erase(0, str.find_first_not_of(" \t")); + return str; } + string& rtrim(string &str) { - int i,j,end; - - for(i=0,j=0; str[i]!=0; i++) - j = ((str[i]<=32)? j+1 : 0); - end=i-j; - - str = str.substr(0,end); - return str; + str.resize(str.find_last_not_of(" \t") + 1); + return str; }