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

View File

@@ -556,7 +556,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
* @param sa
* a {@link forge.game.spellability.SpellAbility} object.
*/
private static void changeHiddenOriginResolve(final SpellAbility sa) {
private void changeHiddenOriginResolve(final SpellAbility sa) {
List<Player> fetchers;
if (sa.hasParam("DefinedPlayer")) {
@@ -585,33 +585,11 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
if (decider == null) {
decider = player;
}
if (decider.isHuman()) {
changeHiddenOriginResolveHuman(decider, sa, player);
} else {
ChangeZoneAi.hiddenOriginResolveAI(decider, sa, player);
}
changeZonePlayerInvariant(decider, sa, 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();
private void changeZonePlayerInvariant(Player decider, SpellAbility sa, Player player) {
final TargetRestrictions tgt = sa.getTargetRestrictions();
if (tgt != null) {
final List<Player> players = Lists.newArrayList(sa.getTargets().getTargetPlayers());
@@ -621,13 +599,14 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
}
}
List<ZoneType> origin = new ArrayList<ZoneType>();
if (sa.hasParam("Origin")) {
origin = ZoneType.listValueOf(sa.getParam("Origin"));
}
ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination"));
final Card source = sa.getSourceCard();
// this needs to be zero indexed. Top = 0, Third = 2
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"),
sa) : 1;
final boolean defined = sa.hasParam("Defined");
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 + "?"))
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;
boolean shuffleMandatory = true;