merge ChangeZoneEffect.java hidden part to make it invariant of player types (step 1)

This commit is contained in:
Maxmtg
2014-01-27 07:52:13 +00:00
parent 1f947d5781
commit 7fd201d5e3
2 changed files with 38 additions and 52 deletions

View File

@@ -1099,35 +1099,23 @@ public class ChangeZoneAi extends SpellAbilityAi {
* a {@link forge.game.spellability.SpellAbility} object. * a {@link forge.game.spellability.SpellAbility} object.
* @param player * @param player
* a {@link forge.game.player.Player} object. * a {@link forge.game.player.Player} object.
* @param changeNum2
* @param destination
* @param libraryPos2
* @param origin2
*/ */
public static void hiddenOriginResolveAI(final Player ai, final SpellAbility sa, Player player) { public static void hiddenOriginResolveAI(final Player ai, final SpellAbility sa, Player player, int changeNum, List<ZoneType> origin, ZoneType destination, int libraryPos2) {
final TargetRestrictions tgt = sa.getTargetRestrictions();
final Card source = sa.getSourceCard(); final Card source = sa.getSourceCard();
final boolean defined = sa.hasParam("Defined"); final boolean defined = sa.hasParam("Defined");
final Player activator = sa.getActivatingPlayer();
final Game game = ai.getGame(); final Game game = ai.getGame();
if (tgt != null) {
if (sa.getTargets().isTargetingAnyPlayer()) {
player = sa.hasParam("DefinedPlayer") ? player : sa.getTargets().getFirstTargetedPlayer();
if (!player.canBeTargetedBy(sa)) {
return;
}
}
}
List<ZoneType> origin = new ArrayList<ZoneType>();
if (sa.hasParam("Origin")) {
origin = ZoneType.listValueOf(sa.getParam("Origin"));
}
String type = sa.getParam("ChangeType"); String type = sa.getParam("ChangeType");
if (type == null) { if (type == null) {
type = "Card"; type = "Card";
} }
int changeNum = sa.hasParam("ChangeNum") ? AbilityUtils.calculateAmount(source, sa.getParam("ChangeNum"),
sa) : 1;
List<Card> fetchList; List<Card> fetchList;
boolean shuffleMandatory = true; boolean shuffleMandatory = true;
@@ -1170,7 +1158,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
if (sa.hasParam("NoShuffle")) { if (sa.hasParam("NoShuffle")) {
shuffleMandatory = false; shuffleMandatory = false;
} }
final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination"));
final List<Card> fetched = new ArrayList<Card>(); final List<Card> fetched = new ArrayList<Card>();
final boolean remember = sa.hasParam("RememberChanged"); final boolean remember = sa.hasParam("RememberChanged");
final boolean forget = sa.hasParam("ForgetChanged"); final boolean forget = sa.hasParam("ForgetChanged");
@@ -1205,6 +1193,8 @@ public class ChangeZoneAi extends SpellAbilityAi {
} else if (defined) { } else if (defined) {
c = fetchList.get(0); c = fetchList.get(0);
} else { } else {
final Player activator = sa.getActivatingPlayer();
CardLists.shuffle(fetchList); CardLists.shuffle(fetchList);
// Save a card as a default, in case we can't find anything suitable. // Save a card as a default, in case we can't find anything suitable.
Card first = fetchList.get(0); Card first = fetchList.get(0);
@@ -1350,9 +1340,12 @@ public class ChangeZoneAi extends SpellAbilityAi {
} }
if (sa.hasParam("Attacking")) { if (sa.hasParam("Attacking")) {
List<GameEntity> defenders = game.getCombat().getDefenders(); final Combat combat = game.getCombat();
if ( !defenders.isEmpty() ) if ( null != combat ) {
game.getCombat().addAttacker(c, defenders.get(0)); final List<GameEntity> e = combat.getDefenders();
final GameEntity defender = player.getController().chooseSingleEntityForEffect(e, sa, "Declare " + c);
combat.addAttacker(c, defender);
}
} }
if (sa.hasParam("Blocking")) { if (sa.hasParam("Blocking")) {
final Combat combat = game.getCombat(); final Combat combat = game.getCombat();

View File

@@ -556,7 +556,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
* @param sa * @param sa
* a {@link forge.game.spellability.SpellAbility} object. * a {@link forge.game.spellability.SpellAbility} object.
*/ */
private static void changeHiddenOriginResolve(final SpellAbility sa) { private void changeHiddenOriginResolve(final SpellAbility sa) {
List<Player> fetchers; List<Player> fetchers;
if (sa.hasParam("DefinedPlayer")) { if (sa.hasParam("DefinedPlayer")) {
@@ -585,33 +585,11 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (decider == null) { if (decider == null) {
decider = player; decider = player;
} }
if (decider.isHuman()) { changeZonePlayerInvariant(decider, sa, player);
changeHiddenOriginResolveHuman(decider, sa, player);
} else {
ChangeZoneAi.hiddenOriginResolveAI(decider, sa, player);
}
} }
} }
/** private void changeZonePlayerInvariant(Player decider, SpellAbility sa, Player player) {
* <p>
* changeHiddenOriginResolveHuman.
* </p>
*
* @param af
* a {@link forge.game.ability.AbilityFactory} object.
* @param sa
* a {@link forge.game.spellability.SpellAbility} object.
* @param player
* a {@link forge.game.player.Player} object.
*/
private static void changeHiddenOriginResolveHuman(final Player decider, final SpellAbility sa, Player player) {
final Card source = sa.getSourceCard();
final List<Card> movedCards = new ArrayList<Card>();
final boolean defined = sa.hasParam("Defined");
final boolean optional = sa.hasParam("Optional");
final Game game = player.getGame();
final TargetRestrictions tgt = sa.getTargetRestrictions(); final TargetRestrictions tgt = sa.getTargetRestrictions();
if (tgt != null) { if (tgt != null) {
final List<Player> players = Lists.newArrayList(sa.getTargets().getTargetPlayers()); final List<Player> players = Lists.newArrayList(sa.getTargets().getTargetPlayers());
@@ -621,13 +599,14 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
} }
} }
List<ZoneType> origin = new ArrayList<ZoneType>(); List<ZoneType> origin = new ArrayList<ZoneType>();
if (sa.hasParam("Origin")) { if (sa.hasParam("Origin")) {
origin = ZoneType.listValueOf(sa.getParam("Origin")); origin = ZoneType.listValueOf(sa.getParam("Origin"));
} }
ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination")); ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination"));
final Card source = sa.getSourceCard();
// this needs to be zero indexed. Top = 0, Third = 2 // this needs to be zero indexed. Top = 0, Third = 2
int libraryPos = sa.hasParam("LibraryPosition") ? AbilityUtils.calculateAmount(source, sa.getParam("LibraryPosition"), sa) : 0; int libraryPos = sa.hasParam("LibraryPosition") ? AbilityUtils.calculateAmount(source, sa.getParam("LibraryPosition"), sa) : 0;
@@ -658,12 +637,26 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
} }
} }
int changeNum = sa.hasParam("ChangeNum") ? AbilityUtils.calculateAmount(source, sa.getParam("ChangeNum"), final boolean defined = sa.hasParam("Defined");
sa) : 1; int changeNum = sa.hasParam("ChangeNum") ? AbilityUtils.calculateAmount(source, sa.getParam("ChangeNum"), sa) : 1;
final boolean optional = sa.hasParam("Optional");
if( optional && !decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, defined ? "Put that card from " + origin + "to " + destination : "Search " + origin + "?")) if( optional && !decider.getController().confirmAction(sa, PlayerActionConfirmMode.ChangeZoneGeneral, defined ? "Put that card from " + origin + "to " + destination : "Search " + origin + "?"))
return; return;
if (decider.isHuman()) {
changeHiddenOriginResolveHuman(decider, sa, player, changeNum, origin, destination, libraryPos);
} else {
ChangeZoneAi.hiddenOriginResolveAI(decider, sa, player, changeNum, origin, destination, libraryPos);
}
}
private static void changeHiddenOriginResolveHuman(final Player decider, final SpellAbility sa, Player player, int changeNum, List<ZoneType> origin, ZoneType destination, int libraryPos) {
final Card source = sa.getSourceCard();
final boolean defined = sa.hasParam("Defined");
final Game game = player.getGame();
final List<Card> movedCards = new ArrayList<Card>();
List<Card> fetchList; List<Card> fetchList;
boolean shuffleMandatory = true; boolean shuffleMandatory = true;