Split up choose entity between desktop and mobile to allow varying implementations for search and reveal combo dialog

This commit is contained in:
drdev
2014-10-03 13:49:14 +00:00
parent 9f25b55cfb
commit 82bf43a519
5 changed files with 52 additions and 12 deletions

View File

@@ -24,7 +24,9 @@ import forge.assets.ISkinImage;
import forge.control.GuiTimer; import forge.control.GuiTimer;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.error.BugReportDialog; import forge.error.BugReportDialog;
import forge.game.GameEntity;
import forge.game.GameObject; import forge.game.GameObject;
import forge.game.player.DelayedReveal;
import forge.game.player.IHasIcon; import forge.game.player.IHasIcon;
import forge.gui.BoxedProductCardListViewer; import forge.gui.BoxedProductCardListViewer;
import forge.gui.CardListViewer; import forge.gui.CardListViewer;
@@ -34,6 +36,7 @@ import forge.interfaces.IGuiBase;
import forge.interfaces.IGuiTimer; import forge.interfaces.IGuiTimer;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.model.FModel; import forge.model.FModel;
import forge.player.PlayerControllerHuman;
import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.deckeditor.CDeckEditorUI;
import forge.screens.deckeditor.controllers.CEditorQuestCardShop; import forge.screens.deckeditor.controllers.CEditorQuestCardShop;
import forge.screens.match.CMatchUI; import forge.screens.match.CMatchUI;
@@ -47,7 +50,9 @@ import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinImage; import forge.toolbox.FSkin.SkinImage;
import forge.util.BuildInfo; import forge.util.BuildInfo;
import forge.util.FileUtil; import forge.util.FileUtil;
import forge.util.gui.SGuiChoose;
import forge.view.CardView; import forge.view.CardView;
import forge.view.GameEntityView;
public class GuiDesktop implements IGuiBase { public class GuiDesktop implements IGuiBase {
@Override @Override
@@ -183,6 +188,19 @@ public class GuiDesktop implements IGuiBase {
return GuiChoose.sideboard(sideboard.toFlatList(), main.toFlatList()); return GuiChoose.sideboard(sideboard.toFlatList(), main.toFlatList());
} }
@Override
public GameEntityView chooseSingleEntityForEffect(String title, Collection<? extends GameEntity> optionList, DelayedReveal delayedReveal, boolean isOptional, PlayerControllerHuman controller) {
if (delayedReveal != null) {
delayedReveal.reveal(controller); //TODO: Merge this into search dialog
}
controller.tempShow(optionList);
List<GameEntityView> gameEntityViews = controller.getGameView().getGameEntityViews(optionList, false);
if (isOptional) {
return SGuiChoose.oneOrNone(this, title, gameEntityViews);
}
return SGuiChoose.one(this, title, gameEntityViews);
}
@Override @Override
public void showCardList(final String title, final String message, final List<PaperCard> list) { public void showCardList(final String title, final String message, final List<PaperCard> list) {
final CardListViewer cardView = new CardListViewer(title, message, list); final CardListViewer cardView = new CardListViewer(title, message, list);

View File

@@ -23,10 +23,13 @@ import forge.deck.Deck;
import forge.deck.FDeckViewer; import forge.deck.FDeckViewer;
import forge.deck.FSideboardDialog; import forge.deck.FSideboardDialog;
import forge.error.BugReportDialog; import forge.error.BugReportDialog;
import forge.game.GameEntity;
import forge.game.player.DelayedReveal;
import forge.game.player.IHasIcon; import forge.game.player.IHasIcon;
import forge.interfaces.IGuiBase; import forge.interfaces.IGuiBase;
import forge.interfaces.IGuiTimer; import forge.interfaces.IGuiTimer;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.player.PlayerControllerHuman;
import forge.properties.ForgeConstants; import forge.properties.ForgeConstants;
import forge.screens.match.MatchController; import forge.screens.match.MatchController;
import forge.screens.quest.QuestMenu; import forge.screens.quest.QuestMenu;
@@ -40,7 +43,9 @@ import forge.util.FileUtil;
import forge.util.ThreadUtil; import forge.util.ThreadUtil;
import forge.util.WaitCallback; import forge.util.WaitCallback;
import forge.util.WaitRunnable; import forge.util.WaitRunnable;
import forge.util.gui.SGuiChoose;
import forge.view.CardView; import forge.view.CardView;
import forge.view.GameEntityView;
public class GuiMobile implements IGuiBase { public class GuiMobile implements IGuiBase {
private final String assetsDir; private final String assetsDir;
@@ -202,6 +207,19 @@ public class GuiMobile implements IGuiBase {
}.invokeAndWait(); }.invokeAndWait();
} }
@Override
public GameEntityView chooseSingleEntityForEffect(String title, Collection<? extends GameEntity> optionList, DelayedReveal delayedReveal, boolean isOptional, PlayerControllerHuman controller) {
if (delayedReveal != null) {
delayedReveal.reveal(controller); //TODO: Merge this into search dialog
}
controller.tempShow(optionList);
List<GameEntityView> gameEntityViews = controller.getGameView().getGameEntityViews(optionList, false);
if (isOptional) {
return SGuiChoose.oneOrNone(this, title, gameEntityViews);
}
return SGuiChoose.one(this, title, gameEntityViews);
}
@Override @Override
public void showBugReportDialog(String title, String text, boolean showExitAppBtn) { public void showBugReportDialog(String title, String text, boolean showExitAppBtn) {
BugReportDialog.show(title, text, showExitAppBtn); BugReportDialog.show(title, text, showExitAppBtn);

View File

@@ -10,11 +10,15 @@ import forge.LobbyPlayer;
import forge.assets.FSkinProp; import forge.assets.FSkinProp;
import forge.assets.ISkinImage; import forge.assets.ISkinImage;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.game.GameEntity;
import forge.game.player.DelayedReveal;
import forge.game.player.IHasIcon; import forge.game.player.IHasIcon;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.player.PlayerControllerHuman;
import forge.sound.IAudioClip; import forge.sound.IAudioClip;
import forge.sound.IAudioMusic; import forge.sound.IAudioMusic;
import forge.view.CardView; import forge.view.CardView;
import forge.view.GameEntityView;
public interface IGuiBase { public interface IGuiBase {
boolean isRunningOnDesktop(); boolean isRunningOnDesktop();
@@ -36,6 +40,7 @@ public interface IGuiBase {
<T> List<T> order(final String title, final String top, final int remainingObjectsMin, final int remainingObjectsMax, <T> List<T> order(final String title, final String top, final int remainingObjectsMin, final int remainingObjectsMax,
final List<T> sourceChoices, final List<T> destChoices, final CardView referenceCard, final boolean sideboardingMode); final List<T> sourceChoices, final List<T> destChoices, final CardView referenceCard, final boolean sideboardingMode);
List<PaperCard> sideboard(CardPool sideboard, CardPool main); List<PaperCard> sideboard(CardPool sideboard, CardPool main);
GameEntityView chooseSingleEntityForEffect(String title, Collection<? extends GameEntity> optionList, DelayedReveal delayedReveal, boolean isOptional, PlayerControllerHuman controller);
String showFileDialog(String title, String defaultDir); String showFileDialog(String title, String defaultDir);
File getSaveFile(File defaultFile); File getSaveFile(File defaultFile);
void showCardList(final String title, final String message, final List<PaperCard> list); void showCardList(final String title, final String message, final List<PaperCard> list);

View File

@@ -159,6 +159,14 @@ public class PlayerControllerHuman extends PlayerController {
} }
private final HashSet<Card> tempShownCards = new HashSet<Card>(); private final HashSet<Card> tempShownCards = new HashSet<Card>();
public <T> void tempShow(Iterable<T> 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) { private void tempShowCard(Card c) {
CardView cv = MatchUtil.cards.get(c.getId()); CardView cv = MatchUtil.cards.get(c.getId());
if (!cv.mayBeShown()) { if (!cv.mayBeShown()) {
@@ -423,17 +431,8 @@ public class PlayerControllerHuman extends PlayerController {
return Iterables.getFirst(input.getSelected(), null); return Iterables.getFirst(input.getSelected(), null);
} }
if (delayedReveal != null) { final GameEntityView result = getGui().chooseSingleEntityForEffect(title, optionList, delayedReveal, isOptional, this);
delayedReveal.reveal(this); //TODO: Merge this into search dialog endTempShowCards(); //assume tempShow called by getGui().chooseSingleEntityForEffect
}
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<GameEntity>) optionList, false)) : SGuiChoose.one(getGui(), title, gameView.getGameEntityViews((Iterable<GameEntity>) optionList, false));
endTempShowCards();
return (T) gameView.getGameEntity(result); return (T) gameView.getGameEntity(result);
} }

View File

@@ -323,7 +323,7 @@ public abstract class LocalGameView implements IGameView {
return null; return null;
} }
public final List<GameEntityView> getGameEntityViews(final Iterable<GameEntity> entities, final boolean forceUpdate) { public final List<GameEntityView> getGameEntityViews(final Iterable<? extends GameEntity> entities, final boolean forceUpdate) {
List<GameEntityView> views = new ArrayList<GameEntityView>(); List<GameEntityView> views = new ArrayList<GameEntityView>();
for (GameEntity e : entities) { for (GameEntity e : entities) {
views.add(getGameEntityView(e, forceUpdate)); views.add(getGameEntityView(e, forceUpdate));