- 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

View File

@@ -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

View File

@@ -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

View File

@@ -252,13 +252,17 @@ class TriggerNextPhase:public TriggerAtPhase{
class GenericTriggeredAbility:public TriggeredAbility, public NestedAbility{
public:
TriggeredAbility * t;
queue<Targetable *> 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();

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<TriggerTargetChooser *>(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<NestedAbility *>(a);
if (na) setTriggerTargets(e,na->ability);
if (na) return getTriggerTarget(e,na->ability);
MultiAbility * ma = dynamic_cast<MultiAbility *>(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<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(){
if (targets.size()) {
setTriggerTargets(targets.front() ,ability);
targets.pop();
}
if (ability->oneShot) return ability->resolve();
MTGAbility * clone = ability->clone();
clone->addToGame();

View File

@@ -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);

View File

@@ -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;
}