AF: Draw used even a different target player picking priority.

This commit is contained in:
Maxmtg
2012-11-06 21:20:39 +00:00
parent 60801516a1
commit 657928c5ec
2 changed files with 17 additions and 7 deletions

View File

@@ -83,19 +83,29 @@ import forge.game.player.Player;
}
protected List<Player> getTargetPlayers(SpellAbility sa, final Map<String, String> params) {
return getTargetPlayers(sa, params, false);
return getTargetPlayers(sa, params, false, true);
}
protected List<Player> getTargetPlayersEmptyAsDefault(SpellAbility sa, final Map<String, String> params) {
return getTargetPlayers(sa, params, true);
return getTargetPlayers(sa, params, true, true);
}
protected List<Player> getDefinedPlayersBeforeTargetOnes(SpellAbility sa, final Map<String, String> 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<Player> emptyPlayerList = Collections.unmodifiableList(new ArrayList<Player>());
private List<Player> getTargetPlayers(SpellAbility sa, final Map<String, String> params, final boolean wantEmptyAsDefault) {
private List<Player> getTargetPlayers(SpellAbility sa, final Map<String, String> 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);
}

View File

@@ -24,7 +24,7 @@ public class DrawEffect extends SpellEffect {
sb.append(conditionDesc).append(" ");
}
final List<Player> tgtPlayers = getTargetPlayers(sa, params);
final List<Player> 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()) {