From f3598fd4db844c959f0ecd6ff535c9035713d03a Mon Sep 17 00:00:00 2001 From: magenoxx Date: Thu, 24 May 2012 18:22:12 +0400 Subject: [PATCH] Enhanced TargetSource class --- Mage/src/mage/game/Exile.java | 19 ++++++++++------ Mage/src/mage/target/TargetSource.java | 31 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/Mage/src/mage/game/Exile.java b/Mage/src/mage/game/Exile.java index 6473d615ebc..d6a00ea17e1 100644 --- a/Mage/src/mage/game/Exile.java +++ b/Mage/src/mage/game/Exile.java @@ -28,16 +28,13 @@ package mage.game; -import java.io.Serializable; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; import mage.cards.Card; -import mage.game.events.GameEvent; import mage.util.Copyable; +import java.io.Serializable; +import java.util.*; +import java.util.Map.Entry; + /** * * @author BetaSteward_at_googlemail.com @@ -97,6 +94,14 @@ public class Exile implements Serializable, Copyable { } return null; } + + public List getAllCards(Game game) { + List cards = new ArrayList(); + for (ExileZone exile: exileZones.values()) { + cards.addAll(exile.getCards(game)); + } + return cards; + } public void removeCard(Card card, Game game) { for (ExileZone exile: exileZones.values()) { diff --git a/Mage/src/mage/target/TargetSource.java b/Mage/src/mage/target/TargetSource.java index 32eb0c7cda5..61d5fdc7a80 100644 --- a/Mage/src/mage/target/TargetSource.java +++ b/Mage/src/mage/target/TargetSource.java @@ -31,10 +31,12 @@ package mage.target; import mage.Constants.Zone; import mage.MageObject; import mage.abilities.Ability; +import mage.cards.Card; import mage.filter.FilterObject; import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.stack.StackObject; +import mage.players.Player; import java.util.HashSet; import java.util.Set; @@ -71,6 +73,7 @@ public class TargetSource extends TargetObject { public TargetSource(final TargetSource target) { super(target); this.filter = target.filter.copy(); + setNotTarget(true); } @Override @@ -120,6 +123,22 @@ public class TargetSource extends TargetObject { return true; } } + for (Player player : game.getPlayers().values()) { + for (Card card : player.getGraveyard().getCards(game)) { + if (filter.match(card, game)) { + count++; + if (count >= this.minNumberOfTargets) + return true; + } + } + } + for (Card card : game.getExile().getAllCards(game)) { + if (filter.match(card, game)) { + count++; + if (count >= this.minNumberOfTargets) + return true; + } + } return false; } @@ -141,6 +160,18 @@ public class TargetSource extends TargetObject { possibleTargets.add(permanent.getId()); } } + for (Player player : game.getPlayers().values()) { + for (Card card : player.getGraveyard().getCards(game)) { + if (filter.match(card, game)) { + possibleTargets.add(card.getId()); + } + } + } + for (Card card : game.getExile().getAllCards(game)) { + if (filter.match(card, game)) { + possibleTargets.add(card.getId()); + } + } return possibleTargets; }