Now it's possible to use toughness target filtering even for planeswalkers and battles, added some new primitives from MOM set.

This commit is contained in:
Vittorio Alfieri
2023-05-15 23:04:24 +02:00
parent 546c755185
commit 0a0c541f07
2 changed files with 48 additions and 5 deletions

View File

@@ -181,8 +181,18 @@ MTGCardInstance * CardDescriptor::match_or(MTGCardInstance * card)
return NULL;
if (powerComparisonMode && !valueInRange(powerComparisonMode, card->getPower(), power))
return NULL;
if (toughnessComparisonMode && !valueInRange(toughnessComparisonMode, card->getToughness(), toughness))
return NULL;
if (toughnessComparisonMode){ // Toughness has different meaning for creatures, planeswalkers and battles
if(card->isCreature() && !valueInRange(toughnessComparisonMode, card->getToughness(), toughness))
return NULL;
else if(card->counters && (card->hasType(Subtypes::TYPE_PLANESWALKER) || card->hasType(Subtypes::TYPE_BATTLE))){
for(size_t i = 0; i < card->counters->counters.size(); ++i){
if((card->counters->counters[i]->name == "loyalty" && card->hasType(Subtypes::TYPE_PLANESWALKER)) || (card->counters->counters[i]->name == "defense" && card->hasType(Subtypes::TYPE_BATTLE))){
if(!valueInRange(toughnessComparisonMode, card->counters->counters[i]->nb, toughness))
return NULL;
}
}
}
}
if (manacostComparisonMode && !valueInRange(manacostComparisonMode, card->myconvertedcost, convertedManacost))
return NULL;
if (zposComparisonMode && !valueInRange(zposComparisonMode, card->zpos, zposition))
@@ -229,8 +239,18 @@ MTGCardInstance * CardDescriptor::match_and(MTGCardInstance * card)
match = NULL;
if (powerComparisonMode && !valueInRange(powerComparisonMode, card->getPower(), power))
match = NULL;
if (toughnessComparisonMode && !valueInRange(toughnessComparisonMode, card->getToughness(), toughness))
match = NULL;
if (toughnessComparisonMode){ // Toughness has different meaning for creatures, planeswalkers and battles
if(card->isCreature() && !valueInRange(toughnessComparisonMode, card->getToughness(), toughness))
return NULL;
else if(card->counters && (card->hasType(Subtypes::TYPE_PLANESWALKER) || card->hasType(Subtypes::TYPE_BATTLE))){
for(size_t i = 0; i < card->counters->counters.size(); ++i){
if((card->counters->counters[i]->name == "loyalty" && card->hasType(Subtypes::TYPE_PLANESWALKER)) || (card->counters->counters[i]->name == "defense" && card->hasType(Subtypes::TYPE_BATTLE))){
if(!valueInRange(toughnessComparisonMode, card->counters->counters[i]->nb, toughness))
return NULL;
}
}
}
}
if (manacostComparisonMode && !valueInRange(manacostComparisonMode, card->myconvertedcost, convertedManacost))
match = NULL;
if (zposComparisonMode && !valueInRange(zposComparisonMode, card->zpos, zposition))