diff --git a/src/main/java/forge/CardPredicates.java b/src/main/java/forge/CardPredicates.java index 2559d5da898..4e37ab69285 100644 --- a/src/main/java/forge/CardPredicates.java +++ b/src/main/java/forge/CardPredicates.java @@ -167,6 +167,13 @@ public final class CardPredicates { } }; + public static final Predicate FACE_DOWN = new Predicate() { + @Override + public boolean apply(Card c) { + return c.isFaceDown(); + } + }; + /** * a Predicate to get all cards that are untapped. */ diff --git a/src/main/java/forge/card/ability/ai/FlipACoinAi.java b/src/main/java/forge/card/ability/ai/FlipACoinAi.java index aa5ab2a9981..862ca248a55 100644 --- a/src/main/java/forge/card/ability/ai/FlipACoinAi.java +++ b/src/main/java/forge/card/ability/ai/FlipACoinAi.java @@ -1,14 +1,8 @@ package forge.card.ability.ai; -import java.util.List; - -import forge.Card; -import forge.CardLists; import forge.card.ability.SpellAbilityAi; import forge.card.spellability.SpellAbility; -import forge.card.spellability.Target; import forge.game.player.AIPlayer; -import forge.game.zone.ZoneType; public class FlipACoinAi extends SpellAbilityAi { diff --git a/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java b/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java index a4ac0ed13bd..a8f5151b7a0 100644 --- a/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java +++ b/src/main/java/forge/card/ability/effects/ChangeZoneEffect.java @@ -10,6 +10,7 @@ import forge.Card; import forge.CardCharacteristicName; import forge.CardLists; import forge.CardPredicates; +import forge.FThreads; import forge.GameEntity; import forge.card.ability.AbilityUtils; import forge.card.ability.SpellAbilityEffect; @@ -19,6 +20,7 @@ import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbilityStackInstance; import forge.card.spellability.Target; import forge.card.trigger.TriggerType; +import forge.control.input.InputSelectCardsFromList; import forge.game.GameState; import forge.game.ai.ComputerUtilCard; import forge.game.player.AIPlayer; @@ -693,17 +695,14 @@ public class ChangeZoneEffect extends SpellAbilityEffect { if (!defined) { if (origin.contains(ZoneType.Library) && !defined && !sa.hasParam("NoLooking")) { final int fetchNum = Math.min(player.getCardsIn(ZoneType.Library).size(), 4); + List shown = !decider.hasKeyword("LimitSearchLibrary") ? player.getCardsIn(ZoneType.Library) : player.getCardsIn(ZoneType.Library, fetchNum); // Look at whole library before moving onto choosing a card - GuiChoose.oneOrNone(sa.getSourceCard().getName() + " - Looking at Library", - !decider.hasKeyword("LimitSearchLibrary") - ? player.getCardsIn(ZoneType.Library) - : player.getCardsIn(ZoneType.Library, fetchNum)); + decider.getController().reveal(sa.getSourceCard().getName() + " - Looking at library", shown, ZoneType.Library, player); } // Look at opponents hand before moving onto choosing a card if (origin.contains(ZoneType.Hand) && player.isOpponentOf(decider)) { - GuiChoose.oneOrNone(sa.getSourceCard().getName() + " - Looking at Opponent's Hand", player - .getCardsIn(ZoneType.Hand)); + decider.getController().reveal(sa.getSourceCard().getName() + " - Looking at Opponent's Hand", player.getCardsIn(ZoneType.Hand), ZoneType.Hand, player); } fetchList = AbilityUtils.filterListByType(fetchList, sa.getParam("ChangeType"), sa); } @@ -712,7 +711,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { final boolean champion = sa.hasParam("Champion"); final String forget = sa.getParam("ForgetChanged"); final String imprint = sa.getParam("Imprint"); - final String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : "Select a card"; + final String selectPrompt = sa.hasParam("SelectPrompt") ? sa.getParam("SelectPrompt") : "Select a card from " + origin; final String totalcmc = sa.getParam("WithTotalCMC"); int totcmc = AbilityUtils.calculateAmount(card, totalcmc, sa); @@ -735,15 +734,25 @@ public class ChangeZoneEffect extends SpellAbilityEffect { break; } + // card has to be on battlefield or in own hand + boolean canUseInputToSelectCard = origin.size() == 1 && ( origin.get(0) == ZoneType.Battlefield || origin.get(0) == ZoneType.Hand && player == decider); + Object o; if (sa.hasParam("AtRandom")) { o = Aggregates.random(fetchList); - } else if (sa.hasParam("Mandatory")) { - o = GuiChoose.one(selectPrompt, fetchList); } else if (sa.hasParam("Defined")) { o = fetchList.get(0); } else { - o = GuiChoose.oneOrNone(selectPrompt, fetchList); + boolean mustChoose = sa.hasParam("Mandatory"); + if( canUseInputToSelectCard ) { + InputSelectCardsFromList inp = new InputSelectCardsFromList(1, 1, fetchList); + inp.setCancelAllowed(!mustChoose); + inp.setMessage(selectPrompt); + FThreads.setInputAndWait(inp); + o = inp.getSelected().get(0); + } + else + o = GuiChoose.getChoices(selectPrompt, 0, mustChoose ? 1 : 0, fetchList); } if (o != null) { @@ -887,7 +896,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { } } if (sa.hasParam("Reveal") && !movedCards.isEmpty()) { - GuiChoose.one(card + " - Revealed card: ", movedCards); + decider.getController().reveal(card + " - Revealed card: ", movedCards, origin.get(0), player); } if ((origin.contains(ZoneType.Library) && !destination.equals(ZoneType.Library) && !defined) diff --git a/src/main/java/forge/card/staticability/StaticAbilityMayLookAt.java b/src/main/java/forge/card/staticability/StaticAbilityMayLookAt.java index 3bf40743499..39b44066d79 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityMayLookAt.java +++ b/src/main/java/forge/card/staticability/StaticAbilityMayLookAt.java @@ -20,7 +20,6 @@ package forge.card.staticability; import java.util.HashMap; import forge.Card; -import forge.game.GameState; import forge.game.player.Player; import forge.game.zone.ZoneType; diff --git a/src/main/java/forge/gui/match/nonsingleton/ZoneAction.java b/src/main/java/forge/gui/match/nonsingleton/ZoneAction.java index d2c3986c625..ae4c1f39f1b 100644 --- a/src/main/java/forge/gui/match/nonsingleton/ZoneAction.java +++ b/src/main/java/forge/gui/match/nonsingleton/ZoneAction.java @@ -54,7 +54,7 @@ class ZoneAction extends ForgeAction { for (Card crd : choices) { Card toAdd = crd; if (crd.isFaceDown()) { - if (crd.canBeSeenBy(Singletons.getControl().getLobby().getGuiPlayer().getPlayer(crd.getGame()))) { + if (crd.canBeSeenBy(Singletons.getControl().getPlayer())) { toAdd = CardFactory.copyCard(crd); toAdd.setState(CardCharacteristicName.Original); } else {