- fix for issue 467 (simultaneous triggers + "trigger" keyword)
- MootPoint's patch for some string parsing
- some random int/float compilation warning fixes
This commit is contained in:
wagic.the.homebrew@gmail.com
2010-10-01 16:33:07 +00:00
parent f4e87b7daf
commit 508040b3a7
9 changed files with 56 additions and 48 deletions
+1
View File
@@ -424,6 +424,7 @@ seismic_assault.txt
seismic_spike_i191.txt seismic_spike_i191.txt
selesnya_guildmage.txt selesnya_guildmage.txt
shard_volley.txt shard_volley.txt
sigil_captain_i467.txt
silver_seraph_i300.txt silver_seraph_i300.txt
skullcage0_i239.txt skullcage0_i239.txt
skullcage1_i239.txt skullcage1_i239.txt
+1 -1
View File
@@ -71,7 +71,7 @@ enum DECK_VIEWER_MENU_ITEMS
#define ROTATE_RIGHT 0; #define ROTATE_RIGHT 0;
#define HIGH_SPEED 15.0 #define HIGH_SPEED 15.0
#define MED_SPEED 5.0 #define MED_SPEED 5.0f
#define LOW_SPEED 1.5 #define LOW_SPEED 1.5
#define MAX_SAVED_FILTERS 8 #define MAX_SAVED_FILTERS 8
+5 -1
View File
@@ -252,13 +252,17 @@ class TriggerNextPhase:public TriggerAtPhase{
class GenericTriggeredAbility:public TriggeredAbility, public NestedAbility{ class GenericTriggeredAbility:public TriggeredAbility, public NestedAbility{
public: public:
TriggeredAbility * t; TriggeredAbility * t;
queue<Targetable *> targets;
MTGAbility * destroyCondition; MTGAbility * destroyCondition;
GenericTriggeredAbility(int id, MTGCardInstance * _source, TriggeredAbility * _t, MTGAbility * a,MTGAbility * dc = NULL, Targetable * _target = NULL); GenericTriggeredAbility(int id, MTGCardInstance * _source, TriggeredAbility * _t, MTGAbility * a,MTGAbility * dc = NULL, Targetable * _target = NULL);
virtual int trigger(); virtual int trigger();
virtual int triggerOnEvent(WEvent * e); virtual int triggerOnEvent(WEvent * e);
virtual int resolve(); virtual int resolve();
virtual int testDestroy(); 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); void Update(float dt);
virtual GenericTriggeredAbility* clone() const; virtual GenericTriggeredAbility* clone() const;
const char * getMenuText(); const char * getMenuText();
+9 -5
View File
@@ -843,19 +843,23 @@ bool GameOptionAward::read(string input){
tvals[i] = 0; tvals[i] = 0;
string buf; string buf;
for(size_t t=0,i=0;;t++){ for (size_t t=0,i=0; t < input.size();t++)
if(!isdigit(input[t])){ {
if(!isspace(input[t]) && buf.size()){ if(!isdigit(input[t]))
{
if(!isspace(input[t]) && buf.size())
{
tvals[i] = atoi(buf.c_str()); tvals[i] = atoi(buf.c_str());
if(tvals[i] < 0) if(tvals[i] < 0)
tvals[i] = 0; tvals[i] = 0;
buf.clear(); buf.clear();
i++; //Advance through input. i++; //Advance through input.
} }
}else }
else
buf+= input[t]; buf+= input[t];
if(t >= input.size() || i >= 5) if (i >= 5)
break; break;
} }
+1 -1
View File
@@ -957,7 +957,7 @@ void GameStateDeckViewer::renderOnScreenMenu(){
sprintf(buffer, ((*countPerCostAndColor)[i][j]>0)?_("%i").c_str():".", (*countPerCostAndColor)[i][j]); sprintf(buffer, ((*countPerCostAndColor)[i][j]>0)?_("%i").c_str():".", (*countPerCostAndColor)[i][j]);
font->DrawString(buffer, 64 + leftTransition + j*15, posY); 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; posY += 10;
} }
+30 -9
View File
@@ -2626,27 +2626,44 @@ int GenericTriggeredAbility::trigger(){
int GenericTriggeredAbility::triggerOnEvent(WEvent * e){ int GenericTriggeredAbility::triggerOnEvent(WEvent * e){
if (t->triggerOnEvent(e)) { if (t->triggerOnEvent(e)) {
targets.push(getTriggerTarget(e,ability));
setTriggerTargets(e,ability);
return 1; return 1;
} }
return 0; return 0;
} }
void GenericTriggeredAbility::setTriggerTargets(WEvent * e,MTGAbility * a){ Targetable * GenericTriggeredAbility::getTriggerTarget(WEvent * e,MTGAbility * a){
TriggerTargetChooser * ttc = dynamic_cast<TriggerTargetChooser *>(a->tc); TriggerTargetChooser * ttc = dynamic_cast<TriggerTargetChooser *>(a->tc);
if (ttc) { if (ttc)
a->target = e->getTarget(ttc->triggerTarget); return e->getTarget(ttc->triggerTarget);
ttc->target = e->getTarget(ttc->triggerTarget);
}
NestedAbility * na = dynamic_cast<NestedAbility *>(a); NestedAbility * na = dynamic_cast<NestedAbility *>(a);
if (na) setTriggerTargets(e,na->ability); if (na) return getTriggerTarget(e,na->ability);
MultiAbility * ma = dynamic_cast<MultiAbility *>(a); MultiAbility * ma = dynamic_cast<MultiAbility *>(a);
if (ma) { if (ma) {
for (size_t i = 0; i < ma->abilities.size(); i++) { 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<TriggerTargetChooser *>(a->tc);
if (ttc) {
a->target = ta;
ttc->target = ta;
}
NestedAbility * na = dynamic_cast<NestedAbility *>(a);
if (na) setTriggerTargets(ta,na->ability);
MultiAbility * ma = dynamic_cast<MultiAbility *>(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(){ int GenericTriggeredAbility::resolve(){
if (targets.size()) {
setTriggerTargets(targets.front() ,ability);
targets.pop();
}
if (ability->oneShot) return ability->resolve(); if (ability->oneShot) return ability->resolve();
MTGAbility * clone = ability->clone(); MTGAbility * clone = ability->clone();
clone->addToGame(); clone->addToGame();
+1 -1
View File
@@ -482,7 +482,7 @@ void TaskList::Render() {
sprintf(buffer, "%s", (*it)->getShortDesc().c_str()); sprintf(buffer, "%s", (*it)->getShortDesc().c_str());
f2->DrawString(buffer, posX, posY); f2->DrawString(buffer, posX, posY);
if(mBgTex){ if(mBgTex){
f->SetScale(.8); f->SetScale(.8f);
} }
sprintf(buffer, _("Days left: %i").c_str(), (*it)->getExpiration()); sprintf(buffer, _("Days left: %i").c_str(), (*it)->getExpiration());
f->DrawString(buffer, SCREEN_WIDTH - 190, posY); f->DrawString(buffer, SCREEN_WIDTH - 190, posY);
+5 -27
View File
@@ -182,44 +182,22 @@ u32 ramAvailable (void)
} }
string& trim(string &str) string& trim(string &str)
{ {
int i,j,start,end; str = ltrim(str);
str = rtrim(str);
//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; return str;
} }
string& ltrim(string &str) string& ltrim(string &str)
{ {
int i,start; str.erase(0, str.find_first_not_of(" \t"));
for (i=0; (str[i]!=0 && str[i]<=32); )
i++;
start=i;
str = str.substr(start,str.length()-start);
return str; return str;
} }
string& rtrim(string &str) string& rtrim(string &str)
{ {
int i,j,end; str.resize(str.find_last_not_of(" \t") + 1);
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; return str;
} }