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.
|
* 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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user