diff --git a/forge-gui/src/main/java/forge/game/ability/effects/FlipCoinEffect.java b/forge-gui/src/main/java/forge/game/ability/effects/FlipCoinEffect.java index 5efeccc40b6..dc06f1b3750 100644 --- a/forge-gui/src/main/java/forge/game/ability/effects/FlipCoinEffect.java +++ b/forge-gui/src/main/java/forge/game/ability/effects/FlipCoinEffect.java @@ -9,6 +9,7 @@ import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.event.GameEventFlipCoin; import forge.game.player.Player; +import forge.game.player.PlayerController; import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; import forge.game.trigger.TriggerType; @@ -153,7 +154,7 @@ public class FlipCoinEffect extends SpellAbilityEffect { public static boolean flipCoinCall(final Player caller, final SpellAbility sa, final int multiplier) { boolean [] results = new boolean [multiplier]; for (int i = 0; i < multiplier; i++) { - final boolean choice = caller.getController().chooseBinary(sa, sa.getSourceCard().getName() + " - Call coin flip", true); + final boolean choice = caller.getController().chooseBinary(sa, sa.getSourceCard().getName() + " - Call coin flip", PlayerController.BinaryChoiceType.HeadsOrTails); // Play the Flip A Coin sound caller.getGame().fireEvent(new GameEventFlipCoin()); final boolean flip = MyRandom.getRandom().nextBoolean(); diff --git a/forge-gui/src/main/java/forge/game/ability/effects/TapOrUntapAllEffect.java b/forge-gui/src/main/java/forge/game/ability/effects/TapOrUntapAllEffect.java index 64bd55bff6d..58d0ab2163d 100644 --- a/forge-gui/src/main/java/forge/game/ability/effects/TapOrUntapAllEffect.java +++ b/forge-gui/src/main/java/forge/game/ability/effects/TapOrUntapAllEffect.java @@ -10,9 +10,9 @@ import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.card.CardLists; import forge.game.player.Player; +import forge.game.player.PlayerController; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; -import forge.gui.GuiChoose; /** * TODO: Write javadoc for this type. @@ -20,10 +20,6 @@ import forge.gui.GuiChoose; */ public class TapOrUntapAllEffect extends SpellAbilityEffect { - private static enum TapOrUntap { - TAP, UNTAP - } - @Override protected String getStackDescription(SpellAbility sa) { // when getStackDesc is called, just build exactly what is happening @@ -60,24 +56,22 @@ public class TapOrUntapAllEffect extends SpellAbilityEffect { } // Default to tapping for AI - TapOrUntap toTap = TapOrUntap.TAP; - if (sa.getActivatingPlayer().isHuman()) { - StringBuilder sb = new StringBuilder("Tap or Untap "); - if (sa.hasParam("ValidMessage")) { - sb.append(sa.getParam("ValidMessage")); - } else { - sb.append("Permanents"); - } - sb.append("?"); + boolean toTap = true; - final String[] tapOrUntap = new String[] { "Tap", "Untap" }; - final Object z = GuiChoose.one(sb.toString(), tapOrUntap); - toTap = (z.equals("Tap")) ? TapOrUntap.TAP : TapOrUntap.UNTAP; + StringBuilder sb = new StringBuilder("Tap or Untap "); + if (sa.hasParam("ValidMessage")) { + sb.append(sa.getParam("ValidMessage")); + } else { + sb.append("Permanents"); } + sb.append("?"); + + toTap = sa.getActivatingPlayer().getController().chooseBinary(sa, sb.toString(), PlayerController.BinaryChoiceType.TapOrUntap); + for (final Card cad : validCards) { if (cad.isInPlay()) { - if (toTap.equals(TapOrUntap.TAP)) { + if (toTap) { cad.tap(); } else { cad.untap(); diff --git a/forge-gui/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-gui/src/main/java/forge/game/card/CardFactoryUtil.java index f0c2c670438..1c71c58eb11 100644 --- a/forge-gui/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-gui/src/main/java/forge/game/card/CardFactoryUtil.java @@ -65,7 +65,6 @@ import forge.game.trigger.Trigger; import forge.game.trigger.TriggerHandler; import forge.game.zone.Zone; import forge.game.zone.ZoneType; -import forge.gui.GuiChoose; import forge.gui.input.InputSelectCards; import forge.gui.input.InputSelectCardsFromList; import forge.util.Aggregates; @@ -353,7 +352,7 @@ public class CardFactoryUtil { return; } - final Card c1 = GuiChoose.oneOrNone("Select a card", sameCost); + final Card c1 = sourceCard.getController().getController().chooseSingleCardForEffect(sameCost, this, "Select a card", true); if (c1 != null) { // ability.setTargetCard((Card)o); diff --git a/forge-gui/src/main/java/forge/game/cost/Cost.java b/forge-gui/src/main/java/forge/game/cost/Cost.java index 518e6b75996..724f8ebf4d7 100644 --- a/forge-gui/src/main/java/forge/game/cost/Cost.java +++ b/forge-gui/src/main/java/forge/game/cost/Cost.java @@ -28,7 +28,6 @@ import forge.game.card.CounterType; import forge.game.mana.ManaCostBeingPaid; import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; -import forge.gui.GuiChoose; import forge.util.TextUtil; /** @@ -726,11 +725,7 @@ public class Cost { return AbilityFactory.calculateAmount(card, "ChosenX", null); }*/ - final Integer[] choiceArray = new Integer[maxValue + 1]; - for (int i = 0; i < choiceArray.length; i++) { - choiceArray[i] = i; - } - final Integer chosenX = GuiChoose.one(card.toString() + " - Choose a Value for X", choiceArray); + int chosenX = sa.getActivatingPlayer().getController().chooseNumber(sa, card.toString() + " - Choose a Value for X", 0, maxValue); sa.setSVar("ChosenX", Integer.toString(chosenX)); card.setSVar("ChosenX", Integer.toString(chosenX)); return chosenX; diff --git a/forge-gui/src/main/java/forge/game/player/PlayerController.java b/forge-gui/src/main/java/forge/game/player/PlayerController.java index 76164f06df0..d649ea78996 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerController.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerController.java @@ -48,6 +48,13 @@ public abstract class PlayerController { CumulativeUpkeep; } + public static enum BinaryChoiceType { + HeadsOrTails, // coin + TapOrUntap, + PlayOrDraw, + OddsOrEvens + } + protected final Game game; private PhaseType autoPassUntil = null; @@ -168,7 +175,7 @@ public abstract class PlayerController { public abstract int chooseNumber(SpellAbility sa, String title, int min, int max); - public abstract boolean chooseBinary(SpellAbility sa, String question, boolean isCoin); + public abstract boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice); public abstract boolean chooseFlipResult(SpellAbility sa, Player flipper, boolean[] results, boolean call); public abstract Card chooseProtectionShield(GameEntity entityBeingDamaged, List options, Map choiceMap); diff --git a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java index 5aeb65657e8..329aa993e91 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerControllerAi.java @@ -434,7 +434,8 @@ public class PlayerControllerAi extends PlayerController { } @Override - public boolean chooseBinary(SpellAbility sa, String question, boolean isCoin) { + public boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice) { + if(kindOfChoice == BinaryChoiceType.TapOrUntap) return true; return MyRandom.getRandom().nextBoolean(); } diff --git a/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java index c9ac4f93a8c..216e4fc98ac 100644 --- a/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/game/player/PlayerControllerHuman.java @@ -731,8 +731,14 @@ public class PlayerControllerHuman extends PlayerController { * @see forge.game.player.PlayerController#chooseBinary(java.lang.String, boolean) */ @Override - public boolean chooseBinary(SpellAbility sa, String question, boolean isCoin) { - String[] labels = isCoin ? new String[]{"Heads", "Tails"} : new String[]{"Odds", "Evens"}; + public boolean chooseBinary(SpellAbility sa, String question, BinaryChoiceType kindOfChoice) { + String[] labels = new String[]{"Option1", "Option2"}; + switch(kindOfChoice) { + case HeadsOrTails: labels = new String[]{"Heads", "Tails"}; break; + case TapOrUntap: labels = new String[]{"Tap", "Untap"}; break; + case OddsOrEvens: labels = new String[]{"Odds", "Evens"}; break; + case PlayOrDraw: labels = new String[]{"Play", "Draw"}; break; + } return GuiDialog.confirm(sa.getSourceCard(), question, labels); } diff --git a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index de9f865696b..8e9d728460f 100644 --- a/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -391,7 +391,7 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public boolean chooseBinary( SpellAbility sa, String question, boolean isCoin ) { + public boolean chooseBinary( SpellAbility sa, String question, BinaryChoiceType kindOfChoice ) { return true; }