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.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<? 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
public void showCardList(final String title, final String message, final List<PaperCard> 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.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<? 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
public void showBugReportDialog(String title, String text, boolean showExitAppBtn) {
BugReportDialog.show(title, text, showExitAppBtn);

View File

@@ -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 {
<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);
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);
File getSaveFile(File defaultFile);
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>();
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) {
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<GameEntity>) optionList, false)) : SGuiChoose.one(getGui(), title, gameView.getGameEntityViews((Iterable<GameEntity>) 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);
}

View File

@@ -323,7 +323,7 @@ public abstract class LocalGameView implements IGameView {
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>();
for (GameEntity e : entities) {
views.add(getGameEntityView(e, forceUpdate));