From 02cbd370a8055b6e1db08a6e5025d7962db61a22 Mon Sep 17 00:00:00 2001 From: drdev Date: Tue, 11 Mar 2014 05:11:25 +0000 Subject: [PATCH] Prevent showing unplayable options in zoom Prevent showing duplicate cards on field when zoomed --- .../forge/player/PlayerControllerHuman.java | 26 +++---------------- .../forge/screens/match/input/InputBase.java | 16 +++++++++++- .../match/input/InputPassPriority.java | 2 +- .../src/forge/screens/match/views/VField.java | 2 ++ .../screens/match/views/VZoneDisplay.java | 6 ++++- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/forge-m-base/src/forge/player/PlayerControllerHuman.java b/forge-m-base/src/forge/player/PlayerControllerHuman.java index 8a962f3bcdb..c654c3ef1dd 100644 --- a/forge-m-base/src/forge/player/PlayerControllerHuman.java +++ b/forge-m-base/src/forge/player/PlayerControllerHuman.java @@ -87,33 +87,13 @@ public class PlayerControllerHuman extends PlayerController { * Uses GUI to learn which spell the player (human in our case) would like to play */ public SpellAbility getAbilityToPlay(List abilities, MouseEvent triggerEvent) { - if (triggerEvent == null) { - if (abilities.isEmpty()) { - return null; - } - if (abilities.size() == 1) { - return abilities.get(0); - } - return GuiChoose.oneOrNone("Choose ability to play", abilities); - } - if (abilities.isEmpty()) { return null; } - if (abilities.size() == 1 && !abilities.get(0).promptIfOnlyPossibleAbility()) { - if (abilities.get(0).canPlay()) { - return abilities.get(0); //only return ability if it's playable, otherwise return null - } - return null; + if (abilities.size() == 1) { + return abilities.get(0); } - - for (final SpellAbility ab : abilities) { - if (ab.canPlay()) { - FControl.getInputProxy().selectAbility(ab); - return ab; - } - } - return null; //TODO: delay ability until choice made + return GuiChoose.oneOrNone("Choose ability to play", abilities); } /* (non-Javadoc) diff --git a/forge-m-base/src/forge/screens/match/input/InputBase.java b/forge-m-base/src/forge/screens/match/input/InputBase.java index 14fe55e0336..20d604d3493 100644 --- a/forge-m-base/src/forge/screens/match/input/InputBase.java +++ b/forge-m-base/src/forge/screens/match/input/InputBase.java @@ -25,6 +25,7 @@ import forge.game.phase.PhaseHandler; import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.screens.match.FControl; +import forge.toolbox.VCardZoom.ZoomController; /** *

@@ -77,7 +78,20 @@ public abstract class InputBase implements java.io.Serializable, Input { onCardSelected(card, orderedCardOptions); } - protected void onCardSelected(final Card card, final List orderedCardOptions) {} + protected void onCardSelected(final Card card, final List orderedCardOptions) { + FControl.getView().getCardZoom().show("", card, orderedCardOptions, new ZoomController() { + @Override + public List getOptions(Card card) { + return null; + } + + @Override + public boolean selectOption(Card card, SpellAbility option) { + return true; + } + }); + } + protected void onPlayerSelected(final Player p) {} protected void onCancel() {} protected void onOk() {} diff --git a/forge-m-base/src/forge/screens/match/input/InputPassPriority.java b/forge-m-base/src/forge/screens/match/input/InputPassPriority.java index 7ee0a0b2976..8b4cb128879 100644 --- a/forge-m-base/src/forge/screens/match/input/InputPassPriority.java +++ b/forge-m-base/src/forge/screens/match/input/InputPassPriority.java @@ -66,7 +66,7 @@ public class InputPassPriority extends InputSyncronizedBase { FControl.getView().getCardZoom().show("Select a spell/ability", card, orderedCardOptions, new ZoomController() { @Override public List getOptions(Card card) { - return card.getAllPossibleAbilities(player, false); + return card.getAllPossibleAbilities(player, true); } @Override diff --git a/forge-m-base/src/forge/screens/match/views/VField.java b/forge-m-base/src/forge/screens/match/views/VField.java index 6de3dc2b12e..16b49caf3d5 100644 --- a/forge-m-base/src/forge/screens/match/views/VField.java +++ b/forge-m-base/src/forge/screens/match/views/VField.java @@ -99,6 +99,8 @@ public class VField extends VZoneDisplay { @Override protected void doLayout(float width, float height) { + startLayout(); + List creatures = new ArrayList(); List lands = new ArrayList(); List otherPermanents = new ArrayList(); diff --git a/forge-m-base/src/forge/screens/match/views/VZoneDisplay.java b/forge-m-base/src/forge/screens/match/views/VZoneDisplay.java index b0ff86e02cc..c71c4714cc0 100644 --- a/forge-m-base/src/forge/screens/match/views/VZoneDisplay.java +++ b/forge-m-base/src/forge/screens/match/views/VZoneDisplay.java @@ -89,6 +89,10 @@ public class VZoneDisplay extends FScrollPane { cardPanels.clear(); } + protected void startLayout() { + orderedCards.clear(); + } + protected final float layoutCardPanel(FCardPanel cardPanel, float x, float y, float cardWidth, float cardHeight) { int count = addCards(cardPanel, x, y, cardWidth, cardHeight); return cardWidth + (count - 1) * cardWidth * CARD_STACK_OFFSET; @@ -110,7 +114,7 @@ public class VZoneDisplay extends FScrollPane { @Override protected void doLayout(float width, float height) { - orderedCards.clear(); + startLayout(); float x = 0; float y = 0;