From 657928c5ecf40b49cadb02da69a822dac6b0d5b8 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Tue, 6 Nov 2012 21:20:39 +0000 Subject: [PATCH] AF: Draw used even a different target player picking priority. --- .../card/abilityfactory/SpellEffect.java | 20 ++++++++++++++----- .../abilityfactory/effects/DrawEffect.java | 4 ++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/forge/card/abilityfactory/SpellEffect.java b/src/main/java/forge/card/abilityfactory/SpellEffect.java index 32758998f91..7e87fb04c66 100644 --- a/src/main/java/forge/card/abilityfactory/SpellEffect.java +++ b/src/main/java/forge/card/abilityfactory/SpellEffect.java @@ -83,19 +83,29 @@ import forge.game.player.Player; } protected List getTargetPlayers(SpellAbility sa, final Map params) { - return getTargetPlayers(sa, params, false); + return getTargetPlayers(sa, params, false, true); } protected List getTargetPlayersEmptyAsDefault(SpellAbility sa, final Map params) { - return getTargetPlayers(sa, params, true); + return getTargetPlayers(sa, params, true, true); + } + + protected List getDefinedPlayersBeforeTargetOnes(SpellAbility sa, final Map params) { + return getTargetPlayers(sa, params, false, false); } + // Each AF used its own preference in choosing target players: + // Some checked target first and params["Defined"] then - @see targetIsPreferred + // Some wanted empty list when params["Defined"] was not set - @see wantEmptyAsDefault + // Poor me had to gather it all in a single place private final static List emptyPlayerList = Collections.unmodifiableList(new ArrayList()); - private List getTargetPlayers(SpellAbility sa, final Map params, final boolean wantEmptyAsDefault) { + private List getTargetPlayers(SpellAbility sa, final Map params, final boolean wantEmptyAsDefault, final boolean targetIsPreferred) { final Target tgt = sa.getTarget(); final String defined = params.get("Defined"); - if ( tgt != null ) return tgt.getTargetPlayers(); - if ( StringUtils.isEmpty(defined) && wantEmptyAsDefault ) return emptyPlayerList; + if ( tgt != null && ( targetIsPreferred || ( StringUtils.isEmpty(defined) && !wantEmptyAsDefault ) ) ) + return tgt.getTargetPlayers(); + if ( StringUtils.isEmpty(defined) && wantEmptyAsDefault ) + return emptyPlayerList; return AbilityFactory.getDefinedPlayers(sa.getSourceCard(), defined, sa); } diff --git a/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java b/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java index f21f9e17ed8..917bf17e089 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java @@ -24,7 +24,7 @@ public class DrawEffect extends SpellEffect { sb.append(conditionDesc).append(" "); } - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getDefinedPlayersBeforeTargetOnes(sa, params); if (!tgtPlayers.isEmpty()) { @@ -68,7 +68,7 @@ public class DrawEffect extends SpellEffect { final boolean optional = params.containsKey("OptionalDecider"); final boolean slowDraw = params.containsKey("NextUpkeep"); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getDefinedPlayersBeforeTargetOnes(sa, params)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { if (optional) { if (p.isComputer()) {