Erwan
- 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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user