From cf85a224926a460c5b8fcebc2b7a9d9ff551d600 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 4 May 2014 04:41:45 +0000 Subject: [PATCH] Support using FDeckViewer to show deck list for Gui player from match screens of mobile and desktop games --- .../screens/match/controllers/CDock.java | 66 ++----------------- .../src/forge/screens/match/FControl.java | 10 +-- .../forge/screens/match/views/VGameMenu.java | 7 ++ .../src/forge/toolbox/ListChooser.java | 31 +++++++++ .../java/forge/player/GamePlayerUtil.java | 14 ++++ 5 files changed, 64 insertions(+), 64 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java index 7738cd58d38..150cee8782d 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java @@ -22,7 +22,7 @@ import forge.UiCommand; import forge.FThreads; import forge.Singletons; import forge.assets.FSkinProp; -import forge.deck.Deck; +import forge.deckchooser.FDeckViewer; import forge.game.Game; import forge.game.card.Card; import forge.game.card.CardLists; @@ -32,28 +32,24 @@ import forge.game.combat.CombatUtil; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; +import forge.game.player.RegisteredPlayer; import forge.game.zone.ZoneType; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; import forge.gui.framework.SLayoutIO; -import forge.item.PaperCard; import forge.model.FModel; +import forge.player.GamePlayerUtil; import forge.properties.FileLocation; import forge.properties.ForgePreferences.FPref; import forge.screens.match.CMatchUI; import forge.screens.match.views.VDock; -import forge.toolbox.FOptionPane; import forge.toolbox.FSkin; import forge.toolbox.SaveOpenDialog; import forge.toolbox.SaveOpenDialog.Filetypes; import forge.view.FView; -import java.awt.*; -import java.awt.datatransfer.StringSelection; import java.io.File; import java.util.List; -import java.util.Map.Entry; -import java.util.TreeMap; /** * Controls the dock panel in the match UI. @@ -140,7 +136,10 @@ public enum CDock implements ICDoc { * View deck list. */ public void viewDeckList() { - showDeck(game.getMatch().getPlayers().get(0).getDeck()); + RegisteredPlayer player = GamePlayerUtil.getGuiRegisteredPlayer(game); + if (player != null) { + FDeckViewer.show(player.getDeck()); + } } /** @@ -218,57 +217,6 @@ public enum CDock implements ICDoc { arcState = state; } - /** - * Receives click and programmatic requests for viewing a player's library - * (typically used in dev mode). Allows copy of the cardlist to clipboard. - * - * @param targetDeck {@link forge.deck.Deck} - */ - private void showDeck(Deck targetDeck) { - if (null == targetDeck) { - return; - } - - final TreeMap deckMap = new TreeMap(); - - for (final Entry s : targetDeck.getMain()) { - deckMap.put(s.getKey().getName(), s.getValue()); - } - - final String nl = System.getProperty("line.separator"); - final StringBuilder deckList = new StringBuilder(); - String dName = targetDeck.getName(); - - if (dName != null) { - deckList.append(dName + nl); - } - - for (final Entry s : deckMap.entrySet()) { - deckList.append(s.getValue() + " x " + s.getKey() + nl); - } - - String ttl = "Decklist"; - if (dName != null) { - ttl += " - " + dName; - } - - final StringBuilder msg = new StringBuilder(); - if (deckMap.keySet().size() <= 32) { - msg.append(deckList.toString() + nl); - } - else { - msg.append("Decklist too long for dialog." + nl + nl); - } - - msg.append("Copy Decklist to Clipboard?"); - - if (FOptionPane.showConfirmDialog(msg.toString(), ttl, "OK", "Cancel")) { - final StringSelection ss = new StringSelection(deckList.toString()); - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); - } - } - // End DeckListAction - /* (non-Javadoc) * @see forge.gui.framework.ICDoc#getCommandOnSelect() */ diff --git a/forge-gui-mobile/src/forge/screens/match/FControl.java b/forge-gui-mobile/src/forge/screens/match/FControl.java index 992c83353fd..6591f243971 100644 --- a/forge-gui-mobile/src/forge/screens/match/FControl.java +++ b/forge-gui-mobile/src/forge/screens/match/FControl.java @@ -56,6 +56,7 @@ import forge.model.FModel; import forge.player.LobbyPlayerHuman; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; +import forge.quest.QuestController; import forge.screens.match.views.VAssignDamage; import forge.screens.match.views.VCardDisplayArea.CardAreaPanel; import forge.screens.match.views.VPhaseIndicator; @@ -115,19 +116,19 @@ public class FControl { game = match.createGame(); - /*if (game.getRules().getGameType() == GameType.Quest) { - QuestController qc = Singletons.getModel().getQuest(); + if (game.getRules().getGameType() == GameType.Quest) { + QuestController qc = FModel.getQuest(); // Reset new list when the Match round starts, not when each game starts if (game.getMatch().getPlayedGames().isEmpty()) { qc.getCards().resetNewList(); } game.subscribeToEvents(qc); // this one listens to player's mulligans ATM - }*/ + } inputQueue = new InputQueue(); inputProxy = new InputProxy(); - //game.subscribeToEvents(Singletons.getControl().getSoundSystem()); + //game.subscribeToEvents(FControl.getSoundSystem()); LobbyPlayer humanLobbyPlayer = game.getRegisteredPlayers().get(0).getLobbyPlayer(); //FServer.instance.getLobby().getGuiPlayer(); // The UI controls should use these game data as models @@ -798,5 +799,4 @@ public class FControl { public final static LobbyPlayer getGuiPlayer() { return guiPlayer; } - } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java b/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java index 4d8255a0fde..7bcf208d0d0 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VGameMenu.java @@ -2,8 +2,11 @@ package forge.screens.match.views; import forge.Forge; import forge.assets.FSkinImage; +import forge.deck.FDeckViewer; +import forge.game.player.RegisteredPlayer; import forge.menu.FDropDownMenu; import forge.menu.FMenuItem; +import forge.player.GamePlayerUtil; import forge.screens.match.FControl; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; @@ -38,6 +41,10 @@ public class VGameMenu extends FDropDownMenu { addItem(new FMenuItem("Deck List", FSkinImage.DECKLIST, new FEventHandler() { @Override public void handleEvent(FEvent e) { + RegisteredPlayer player = GamePlayerUtil.getGuiRegisteredPlayer(FControl.getGame()); + if (player != null) { + FDeckViewer.show(player.getDeck()); + } } })); addItem(new FMenuItem("Settings", FSkinImage.SETTINGS, new FEventHandler() { diff --git a/forge-gui-mobile/src/forge/toolbox/ListChooser.java b/forge-gui-mobile/src/forge/toolbox/ListChooser.java index 51c87b8a9c9..1ef0e1f530f 100644 --- a/forge-gui-mobile/src/forge/toolbox/ListChooser.java +++ b/forge-gui-mobile/src/forge/toolbox/ListChooser.java @@ -23,12 +23,15 @@ import com.google.common.base.Function; import forge.FThreads; import forge.Forge.Graphics; +import forge.assets.FSkin; import forge.assets.FSkinColor; import forge.assets.FSkinFont; import forge.assets.FSkinColor.Colors; import forge.card.CardRenderer; import forge.game.card.Card; +import forge.game.player.Player; import forge.item.PaperCard; +import forge.screens.match.views.VAvatar; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FList; @@ -279,6 +282,31 @@ public class ListChooser extends FContainer { CardRenderer.drawCardListItem(g, font, foreColor, (Card)value, 0, x, y, w, h); } } + private class PlayerItemRenderer extends ItemRenderer { + @Override + public int getDefaultFontSize() { + return 18; + } + + @Override + public float getItemHeight() { + return VAvatar.HEIGHT; + } + + @Override + public boolean tap(T value, float x, float y, int count) { + return false; + } + + @Override + public void drawValue(Graphics g, T value, FSkinFont font, FSkinColor foreColor, boolean pressed, float x, float y, float w, float h) { + Player player = (Player)value; + g.drawImage(FSkin.getAvatars().get(player.getLobbyPlayer().getAvatarIndex()), x - FList.PADDING, y - FList.PADDING, VAvatar.WIDTH, VAvatar.HEIGHT); + x += VAvatar.WIDTH; + w -= VAvatar.WIDTH; + g.drawText(player.getName() + " (" + player.getLife() + ")", font, foreColor, x, y, w, h, false, HAlignment.LEFT, true); + } + } private class ChoiceList extends FList { private boolean allowMultipleSelections; @@ -296,6 +324,9 @@ public class ListChooser extends FContainer { else if (item instanceof Card) { renderer = new CardItemRenderer(); } + else if (item instanceof Player) { + renderer = new PlayerItemRenderer(); + } else { renderer = new DefaultItemRenderer(); } diff --git a/forge-gui/src/main/java/forge/player/GamePlayerUtil.java b/forge-gui/src/main/java/forge/player/GamePlayerUtil.java index 436f7e2c11e..431a4472286 100644 --- a/forge-gui/src/main/java/forge/player/GamePlayerUtil.java +++ b/forge-gui/src/main/java/forge/player/GamePlayerUtil.java @@ -1,5 +1,9 @@ package forge.player; +import forge.GuiBase; +import forge.LobbyPlayer; +import forge.game.Game; +import forge.game.player.RegisteredPlayer; import forge.model.FModel; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; @@ -64,4 +68,14 @@ public final class GamePlayerUtil { } return newName; } + + public static RegisteredPlayer getGuiRegisteredPlayer(Game game) { + LobbyPlayer guiPlayer = GuiBase.getInterface().getGuiPlayer(); + for (RegisteredPlayer player : game.getMatch().getPlayers()) { + if (player.getPlayer() == guiPlayer) { + return player; + } + } + return null; + } }