- Added a variant of the Targeting AI SVar.

This commit is contained in:
Sloth
2013-06-10 20:13:59 +00:00
parent e52369f66d
commit d071f4df6b
10 changed files with 27 additions and 32 deletions

View File

@@ -22,6 +22,7 @@ import forge.card.cost.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.staticability.StaticAbility;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCost;
import forge.game.ai.ComputerUtilMana;
@@ -814,12 +815,7 @@ public class AttachAi extends SpellAbilityAi {
}
// Don't pump cards that will die.
prefList = CardLists.filter(prefList, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return !c.getSVar("Targeting").equals("Dies");
}
});
prefList = ComputerUtil.getSafeTargets(ai, sa, prefList);
if (attachSource.isAura() && !attachSource.getName().equals("Daybreak Coronet")) {
// TODO For Auras like Rancor, that aren't as likely to lead to

View File

@@ -722,12 +722,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
List<Card> aiPermanents = CardLists.filterControlledBy(list, ai);
// Don't blink cards that will die.
aiPermanents = CardLists.filter(aiPermanents, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return !c.getSVar("Targeting").equals("Dies");
}
});
aiPermanents = ComputerUtil.getSafeTargets(ai, sa, aiPermanents);
// if it's blink or bounce, try to save my about to die stuff
if ((destination.equals(ZoneType.Hand) || (destination.equals(ZoneType.Exile)

View File

@@ -10,6 +10,7 @@ import forge.CardLists;
import forge.card.ability.SpellAbilityAi;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCombat;
import forge.game.player.Player;
import forge.util.MyRandom;
@@ -26,12 +27,7 @@ public class FightAi extends SpellAbilityAi {
List<Card> aiCreatures = ai.getCreaturesInPlay();
aiCreatures = CardLists.getTargetableCards(aiCreatures, sa);
aiCreatures = CardLists.filter(aiCreatures, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return !c.getSVar("Targeting").equals("Dies");
}
});
aiCreatures = ComputerUtil.getSafeTargets(ai, sa, aiCreatures);
List<Card> humCreatures = ai.getOpponent().getCreaturesInPlay();
humCreatures = CardLists.getTargetableCards(humCreatures, sa);

View File

@@ -14,6 +14,7 @@ import forge.card.cost.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.Game;
import forge.game.ai.ComputerUtil;
import forge.game.ai.ComputerUtilCard;
import forge.game.ai.ComputerUtilCombat;
import forge.game.ai.ComputerUtilCost;
@@ -215,13 +216,7 @@ public class ProtectAi extends SpellAbilityAi {
}
// Don't target cards that will die.
list = CardLists.filter(list, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
System.out.println("Not Protecting");
return !c.getSVar("Targeting").equals("Dies");
}
});
list = ComputerUtil.getSafeTargets(ai, sa, list);
while (tgt.getNumTargeted() < tgt.getMaxTargets(source, sa)) {
Card t = null;

View File

@@ -250,12 +250,7 @@ public class PumpAi extends PumpAiBase {
if (!sa.isCurse()) {
// Don't target cards that will die.
list = CardLists.filter(list, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
return !c.getSVar("Targeting").equals("Dies");
}
});
list = ComputerUtil.getSafeTargets(ai, sa, list);
}
while (tgt.getNumTargeted() < tgt.getMaxTargets(sa.getSourceCard(), sa)) {

View File

@@ -1663,4 +1663,19 @@ public class ComputerUtil {
GuiChoose.one("Computer picked: ", new String[]{chosen});
return chosen;
}
public static List<Card> getSafeTargets(final Player ai, SpellAbility sa, List<Card> validCards) {
List<Card> safeCards = new ArrayList<Card>(validCards);
safeCards = CardLists.filter(safeCards, new Predicate<Card>() {
@Override
public boolean apply(final Card c) {
if (c.getController() == ai) {
if (c.getSVar("Targeting").equals("Dies") || c.getSVar("Targeting").equals("Counter"))
return false;
}
return true;
}
});
return safeCards;
}
}