diff --git a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java index 24d8996fcc8..5fd1b9f02ba 100644 --- a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java +++ b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java @@ -24,7 +24,9 @@ import forge.assets.ISkinImage; import forge.control.GuiTimer; import forge.deck.CardPool; import forge.error.BugReportDialog; +import forge.game.GameEntity; import forge.game.GameObject; +import forge.game.player.DelayedReveal; import forge.game.player.IHasIcon; import forge.gui.BoxedProductCardListViewer; import forge.gui.CardListViewer; @@ -34,6 +36,7 @@ import forge.interfaces.IGuiBase; import forge.interfaces.IGuiTimer; import forge.item.PaperCard; import forge.model.FModel; +import forge.player.PlayerControllerHuman; import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.deckeditor.controllers.CEditorQuestCardShop; import forge.screens.match.CMatchUI; @@ -47,7 +50,9 @@ import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinImage; import forge.util.BuildInfo; import forge.util.FileUtil; +import forge.util.gui.SGuiChoose; import forge.view.CardView; +import forge.view.GameEntityView; public class GuiDesktop implements IGuiBase { @Override @@ -183,6 +188,19 @@ public class GuiDesktop implements IGuiBase { return GuiChoose.sideboard(sideboard.toFlatList(), main.toFlatList()); } + @Override + public GameEntityView chooseSingleEntityForEffect(String title, Collection optionList, DelayedReveal delayedReveal, boolean isOptional, PlayerControllerHuman controller) { + if (delayedReveal != null) { + delayedReveal.reveal(controller); //TODO: Merge this into search dialog + } + controller.tempShow(optionList); + List gameEntityViews = controller.getGameView().getGameEntityViews(optionList, false); + if (isOptional) { + return SGuiChoose.oneOrNone(this, title, gameEntityViews); + } + return SGuiChoose.one(this, title, gameEntityViews); + } + @Override public void showCardList(final String title, final String message, final List list) { final CardListViewer cardView = new CardListViewer(title, message, list); diff --git a/forge-gui-mobile/src/forge/GuiMobile.java b/forge-gui-mobile/src/forge/GuiMobile.java index 9806618705c..7abbd27907f 100644 --- a/forge-gui-mobile/src/forge/GuiMobile.java +++ b/forge-gui-mobile/src/forge/GuiMobile.java @@ -23,10 +23,13 @@ import forge.deck.Deck; import forge.deck.FDeckViewer; import forge.deck.FSideboardDialog; import forge.error.BugReportDialog; +import forge.game.GameEntity; +import forge.game.player.DelayedReveal; import forge.game.player.IHasIcon; import forge.interfaces.IGuiBase; import forge.interfaces.IGuiTimer; import forge.item.PaperCard; +import forge.player.PlayerControllerHuman; import forge.properties.ForgeConstants; import forge.screens.match.MatchController; import forge.screens.quest.QuestMenu; @@ -40,7 +43,9 @@ import forge.util.FileUtil; import forge.util.ThreadUtil; import forge.util.WaitCallback; import forge.util.WaitRunnable; +import forge.util.gui.SGuiChoose; import forge.view.CardView; +import forge.view.GameEntityView; public class GuiMobile implements IGuiBase { private final String assetsDir; @@ -202,6 +207,19 @@ public class GuiMobile implements IGuiBase { }.invokeAndWait(); } + @Override + public GameEntityView chooseSingleEntityForEffect(String title, Collection optionList, DelayedReveal delayedReveal, boolean isOptional, PlayerControllerHuman controller) { + if (delayedReveal != null) { + delayedReveal.reveal(controller); //TODO: Merge this into search dialog + } + controller.tempShow(optionList); + List gameEntityViews = controller.getGameView().getGameEntityViews(optionList, false); + if (isOptional) { + return SGuiChoose.oneOrNone(this, title, gameEntityViews); + } + return SGuiChoose.one(this, title, gameEntityViews); + } + @Override public void showBugReportDialog(String title, String text, boolean showExitAppBtn) { BugReportDialog.show(title, text, showExitAppBtn); diff --git a/forge-gui/src/main/java/forge/interfaces/IGuiBase.java b/forge-gui/src/main/java/forge/interfaces/IGuiBase.java index cea5dec746b..ea78e1ab515 100644 --- a/forge-gui/src/main/java/forge/interfaces/IGuiBase.java +++ b/forge-gui/src/main/java/forge/interfaces/IGuiBase.java @@ -10,11 +10,15 @@ import forge.LobbyPlayer; import forge.assets.FSkinProp; import forge.assets.ISkinImage; import forge.deck.CardPool; +import forge.game.GameEntity; +import forge.game.player.DelayedReveal; import forge.game.player.IHasIcon; import forge.item.PaperCard; +import forge.player.PlayerControllerHuman; import forge.sound.IAudioClip; import forge.sound.IAudioMusic; import forge.view.CardView; +import forge.view.GameEntityView; public interface IGuiBase { boolean isRunningOnDesktop(); @@ -36,6 +40,7 @@ public interface IGuiBase { List order(final String title, final String top, final int remainingObjectsMin, final int remainingObjectsMax, final List sourceChoices, final List destChoices, final CardView referenceCard, final boolean sideboardingMode); List sideboard(CardPool sideboard, CardPool main); + GameEntityView chooseSingleEntityForEffect(String title, Collection optionList, DelayedReveal delayedReveal, boolean isOptional, PlayerControllerHuman controller); String showFileDialog(String title, String defaultDir); File getSaveFile(File defaultFile); void showCardList(final String title, final String message, final List list); diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 4f1257b3070..6428e9d5a7e 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -159,6 +159,14 @@ public class PlayerControllerHuman extends PlayerController { } private final HashSet tempShownCards = new HashSet(); + public void tempShow(Iterable objects) { + for (final T t : objects) { + if (t instanceof Card) { + // assume you may see any card passed through here + tempShowCard((Card) t); + } + } + } private void tempShowCard(Card c) { CardView cv = MatchUtil.cards.get(c.getId()); if (!cv.mayBeShown()) { @@ -423,17 +431,8 @@ public class PlayerControllerHuman extends PlayerController { return Iterables.getFirst(input.getSelected(), null); } - if (delayedReveal != null) { - delayedReveal.reveal(this); //TODO: Merge this into search dialog - } - for (final T t : optionList) { - if (t instanceof Card) { - // assume you may see any card passed through here - tempShowCard((Card) t); - } - } - final GameEntityView result = isOptional ? SGuiChoose.oneOrNone(getGui(), title, gameView.getGameEntityViews((Iterable) optionList, false)) : SGuiChoose.one(getGui(), title, gameView.getGameEntityViews((Iterable) optionList, false)); - endTempShowCards(); + final GameEntityView result = getGui().chooseSingleEntityForEffect(title, optionList, delayedReveal, isOptional, this); + endTempShowCards(); //assume tempShow called by getGui().chooseSingleEntityForEffect return (T) gameView.getGameEntity(result); } diff --git a/forge-gui/src/main/java/forge/view/LocalGameView.java b/forge-gui/src/main/java/forge/view/LocalGameView.java index c6f82b045cd..6c1981a8fcb 100644 --- a/forge-gui/src/main/java/forge/view/LocalGameView.java +++ b/forge-gui/src/main/java/forge/view/LocalGameView.java @@ -323,7 +323,7 @@ public abstract class LocalGameView implements IGameView { return null; } - public final List getGameEntityViews(final Iterable entities, final boolean forceUpdate) { + public final List getGameEntityViews(final Iterable entities, final boolean forceUpdate) { List views = new ArrayList(); for (GameEntity e : entities) { views.add(getGameEntityView(e, forceUpdate));