From 3e1b0f5fce820e210b3154895b8cf3bf15278eef Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 22 Jun 2013 01:57:21 +0200 Subject: [PATCH] Added a mode to allow TargetCardInExile in all exile zones. --- .../mage/target/common/TargetCardInExile.java | 49 +++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/Mage/src/mage/target/common/TargetCardInExile.java b/Mage/src/mage/target/common/TargetCardInExile.java index 4322d0dd586..c6835dcb43d 100644 --- a/Mage/src/mage/target/common/TargetCardInExile.java +++ b/Mage/src/mage/target/common/TargetCardInExile.java @@ -27,15 +27,17 @@ */ package mage.target.common; -import mage.constants.Zone; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; import mage.abilities.Ability; import mage.cards.Card; +import mage.constants.Zone; import mage.filter.FilterCard; import mage.game.ExileZone; import mage.game.Game; import mage.target.TargetCard; -import java.util.UUID; /** * @@ -44,26 +46,67 @@ import java.util.UUID; public class TargetCardInExile extends TargetCard { private UUID zoneId; + private boolean allExileZones; public TargetCardInExile(FilterCard filter, UUID zoneId) { this(1, 1, filter, zoneId); } public TargetCardInExile(int minNumTargets, int maxNumTargets, FilterCard filter, UUID zoneId) { + this(minNumTargets, maxNumTargets, filter, zoneId, false); + } + + public TargetCardInExile(int minNumTargets, int maxNumTargets, FilterCard filter, UUID zoneId, boolean allExileZones) { super(minNumTargets, maxNumTargets, Zone.EXILED, filter); this.zoneId = zoneId; + this.allExileZones = allExileZones; this.targetName = filter.getMessage(); } public TargetCardInExile(final TargetCardInExile target) { super(target); this.zoneId = target.zoneId; + this.allExileZones = target.allExileZones; } - @Override + @Override + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + if (allExileZones) { + Set possibleTargets = new HashSet(); + for (Card card : game.getExile().getAllCards(game)) { + if (filter.match(card, sourceControllerId, game)) { + possibleTargets.add(card.getId()); + } + } + return possibleTargets; + } else { + return super.possibleTargets(sourceId, sourceControllerId, game); + } + } + + @Override + public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { + if (allExileZones) { + int numberTargets = 0; + for(ExileZone exileZone : game.getExile().getExileZones()) { + numberTargets += exileZone.count(filter, sourceId, sourceControllerId, game); + if (numberTargets >= this.minNumberOfTargets) { + return true; + } + } + return false; + } else { + return super.canChoose(sourceControllerId, game); + } + } + + @Override public boolean canTarget(UUID id, Ability source, Game game) { Card card = game.getCard(id); if (card != null && game.getState().getZone(card.getId()) == Zone.EXILED) { + if (allExileZones) { + return filter.match(card, source.getControllerId(), game); + } ExileZone exile; if (zoneId != null) { exile = game.getExile().getExileZone(zoneId);