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