mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
merge ChangeZoneEffect.java hidden part to make it invariant of player types (step 1)
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
@@ -620,14 +598,15 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user