From 2cd86bfe1e3abc3beef1b1ed1469da01758bd6a6 Mon Sep 17 00:00:00 2001 From: "Peter F. Patel-Schneider" Date: Tue, 15 Jan 2019 22:01:58 -0500 Subject: [PATCH] put yellow border on selectable cards --- .../src/main/java/forge/gui/GuiChoose.java | 3 +++ .../src/main/java/forge/view/arcane/CardPanel.java | 6 +++++- .../src/main/java/forge/interfaces/IGuiGame.java | 2 ++ .../src/main/java/forge/match/AbstractGuiGame.java | 11 +++++++++++ .../match/input/InputSelectEntitiesFromList.java | 13 ++++++++++++- 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java index 86534fdc4a4..15546d96175 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java +++ b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java @@ -287,6 +287,8 @@ public class GuiChoose { public static List manipulateCardList(final CMatchUI gui, final String title, final Iterable cards, final Iterable manipulable, final boolean toTop, final boolean toBottom, final boolean toAnywhere) { + System.out.print("MCL "); System.out.println(manipulable); + gui.setSelectables(manipulable); final Callable> callable = new Callable>() { @Override public List call() throws Exception { @@ -299,6 +301,7 @@ public class GuiChoose { }; final FutureTask> ft = new FutureTask>(callable); FThreads.invokeInEdtAndWait(ft); + gui.clearSelectables(); try { List result = ft.get(); return result; diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java index e8f606962b1..c18d6cff758 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/CardPanel.java @@ -273,7 +273,11 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl g2d.setColor(Color.magenta); final int n2 = Math.max(1, Math.round(2 * cardWidth * CardPanel.SELECTED_BORDER_SIZE)); g2d.fillRoundRect(cardXOffset - n2, (cardYOffset - n2) + offset, cardWidth + (n2 * 2), cardHeight + (n2 * 2), cornerSize + n2, cornerSize + n2); - } + } else if (matchUI.isSelectable(getCard())) { // Yellow outline for selectable cards + g2d.setColor(Color.yellow); + final int n2 = Math.max(1, Math.round(2 * cardWidth * CardPanel.SELECTED_BORDER_SIZE)); + g2d.fillRoundRect(cardXOffset - n2, (cardYOffset - n2) + offset, cardWidth + (n2 * 2), cardHeight + (n2 * 2), cornerSize + n2, cornerSize + n2); + } // Green outline for hover if (isSelected) { diff --git a/forge-gui/src/main/java/forge/interfaces/IGuiGame.java b/forge-gui/src/main/java/forge/interfaces/IGuiGame.java index 5d16196db30..7ddb89d9428 100644 --- a/forge-gui/src/main/java/forge/interfaces/IGuiGame.java +++ b/forge-gui/src/main/java/forge/interfaces/IGuiGame.java @@ -157,6 +157,8 @@ public interface IGuiGame { void restoreOldZones(Map playersToRestoreZonesFor); void setHighlighted(PlayerView pv, boolean b); void setUsedToPay(CardView card, boolean value); + void setSelectables(final List cards); + void clearSelectables(); void awaitNextInput(); void cancelAwaitNextInput(); diff --git a/forge-gui/src/main/java/forge/match/AbstractGuiGame.java b/forge-gui/src/main/java/forge/match/AbstractGuiGame.java index 95b7e944787..90df99b9560 100644 --- a/forge-gui/src/main/java/forge/match/AbstractGuiGame.java +++ b/forge-gui/src/main/java/forge/match/AbstractGuiGame.java @@ -220,6 +220,17 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { return highlightedCards.contains(card); } + private final Set selectableCards = Sets.newHashSet(); + public void setSelectables(final List cards) { + selectableCards.addAll(cards); + } + public void clearSelectables() { + selectableCards.clear(); + } + public boolean isSelectable(final CardView card) { + return selectableCards.contains(card); + } + /** Concede game, bring up WinLose UI. */ public boolean concede() { if (gameView.isGameOver()) { diff --git a/forge-gui/src/main/java/forge/match/input/InputSelectEntitiesFromList.java b/forge-gui/src/main/java/forge/match/input/InputSelectEntitiesFromList.java index 1d018a02394..eaf575e9d4a 100644 --- a/forge-gui/src/main/java/forge/match/input/InputSelectEntitiesFromList.java +++ b/forge-gui/src/main/java/forge/match/input/InputSelectEntitiesFromList.java @@ -2,9 +2,12 @@ package forge.match.input; import java.util.Collection; import java.util.List; +import java.util.ArrayList; import forge.game.GameEntity; import forge.game.card.Card; +import forge.game.card.CardView; + import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.player.PlayerControllerHuman; @@ -31,7 +34,6 @@ public class InputSelectEntitiesFromList extends InputSele super(controller, Math.min(min, validChoices0.size()), Math.min(max, validChoices0.size()),sa0); validChoices = validChoices0; if (min > validChoices.size()) { - System.out.println(String.format("Trying to choose at least %d things from a list with only %d things!", min, validChoices.size())); } final PlayerZoneUpdates zonesToUpdate = new PlayerZoneUpdates(); for (final GameEntity c : validChoices) { @@ -44,6 +46,14 @@ public class InputSelectEntitiesFromList extends InputSele zonesShown = controller.getGui().tempShowZones(controller.getPlayer().getView(),zonesToUpdate); } }); + ArrayList vCards = new ArrayList(); + for ( T c : validChoices0 ) { + if ( c instanceof Card ) { + vCards.add(((Card)c).getView()) ; + } + } + controller.getGui().setSelectables(vCards); + System.out.print("InputSelectEntitiesFromList "); System.out.println(vCards); } @Override @@ -113,6 +123,7 @@ public class InputSelectEntitiesFromList extends InputSele @Override protected void onStop() { getController().getGui().hideZones(getController().getPlayer().getView(),zonesShown); + getController().getGui().clearSelectables(); super.onStop(); } }