Support using FDeckViewer to show deck list for Gui player from match screens of mobile and desktop games

This commit is contained in:
drdev
2014-05-04 04:41:45 +00:00
parent 056c8d0438
commit cf85a22492
5 changed files with 64 additions and 64 deletions

View File

@@ -22,7 +22,7 @@ import forge.UiCommand;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.assets.FSkinProp; import forge.assets.FSkinProp;
import forge.deck.Deck; import forge.deckchooser.FDeckViewer;
import forge.game.Game; import forge.game.Game;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardLists; import forge.game.card.CardLists;
@@ -32,28 +32,24 @@ import forge.game.combat.CombatUtil;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.RegisteredPlayer;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.framework.SLayoutIO; import forge.gui.framework.SLayoutIO;
import forge.item.PaperCard;
import forge.model.FModel; import forge.model.FModel;
import forge.player.GamePlayerUtil;
import forge.properties.FileLocation; import forge.properties.FileLocation;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.screens.match.CMatchUI; import forge.screens.match.CMatchUI;
import forge.screens.match.views.VDock; import forge.screens.match.views.VDock;
import forge.toolbox.FOptionPane;
import forge.toolbox.FSkin; import forge.toolbox.FSkin;
import forge.toolbox.SaveOpenDialog; import forge.toolbox.SaveOpenDialog;
import forge.toolbox.SaveOpenDialog.Filetypes; import forge.toolbox.SaveOpenDialog.Filetypes;
import forge.view.FView; import forge.view.FView;
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
import java.util.Map.Entry;
import java.util.TreeMap;
/** /**
* Controls the dock panel in the match UI. * Controls the dock panel in the match UI.
@@ -140,7 +136,10 @@ public enum CDock implements ICDoc {
* View deck list. * View deck list.
*/ */
public void viewDeckList() { 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; 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<String, Integer> deckMap = new TreeMap<String, Integer>();
for (final Entry<PaperCard, Integer> 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<String, Integer> 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) /* (non-Javadoc)
* @see forge.gui.framework.ICDoc#getCommandOnSelect() * @see forge.gui.framework.ICDoc#getCommandOnSelect()
*/ */

View File

@@ -56,6 +56,7 @@ import forge.model.FModel;
import forge.player.LobbyPlayerHuman; import forge.player.LobbyPlayerHuman;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.quest.QuestController;
import forge.screens.match.views.VAssignDamage; import forge.screens.match.views.VAssignDamage;
import forge.screens.match.views.VCardDisplayArea.CardAreaPanel; import forge.screens.match.views.VCardDisplayArea.CardAreaPanel;
import forge.screens.match.views.VPhaseIndicator; import forge.screens.match.views.VPhaseIndicator;
@@ -115,19 +116,19 @@ public class FControl {
game = match.createGame(); game = match.createGame();
/*if (game.getRules().getGameType() == GameType.Quest) { if (game.getRules().getGameType() == GameType.Quest) {
QuestController qc = Singletons.getModel().getQuest(); QuestController qc = FModel.getQuest();
// Reset new list when the Match round starts, not when each game starts // Reset new list when the Match round starts, not when each game starts
if (game.getMatch().getPlayedGames().isEmpty()) { if (game.getMatch().getPlayedGames().isEmpty()) {
qc.getCards().resetNewList(); qc.getCards().resetNewList();
} }
game.subscribeToEvents(qc); // this one listens to player's mulligans ATM game.subscribeToEvents(qc); // this one listens to player's mulligans ATM
}*/ }
inputQueue = new InputQueue(); inputQueue = new InputQueue();
inputProxy = new InputProxy(); inputProxy = new InputProxy();
//game.subscribeToEvents(Singletons.getControl().getSoundSystem()); //game.subscribeToEvents(FControl.getSoundSystem());
LobbyPlayer humanLobbyPlayer = game.getRegisteredPlayers().get(0).getLobbyPlayer(); //FServer.instance.getLobby().getGuiPlayer(); LobbyPlayer humanLobbyPlayer = game.getRegisteredPlayers().get(0).getLobbyPlayer(); //FServer.instance.getLobby().getGuiPlayer();
// The UI controls should use these game data as models // The UI controls should use these game data as models
@@ -798,5 +799,4 @@ public class FControl {
public final static LobbyPlayer getGuiPlayer() { public final static LobbyPlayer getGuiPlayer() {
return guiPlayer; return guiPlayer;
} }
} }

View File

@@ -2,8 +2,11 @@ package forge.screens.match.views;
import forge.Forge; import forge.Forge;
import forge.assets.FSkinImage; import forge.assets.FSkinImage;
import forge.deck.FDeckViewer;
import forge.game.player.RegisteredPlayer;
import forge.menu.FDropDownMenu; import forge.menu.FDropDownMenu;
import forge.menu.FMenuItem; import forge.menu.FMenuItem;
import forge.player.GamePlayerUtil;
import forge.screens.match.FControl; import forge.screens.match.FControl;
import forge.toolbox.FEvent; import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
@@ -38,6 +41,10 @@ public class VGameMenu extends FDropDownMenu {
addItem(new FMenuItem("Deck List", FSkinImage.DECKLIST, new FEventHandler() { addItem(new FMenuItem("Deck List", FSkinImage.DECKLIST, new FEventHandler() {
@Override @Override
public void handleEvent(FEvent e) { 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() { addItem(new FMenuItem("Settings", FSkinImage.SETTINGS, new FEventHandler() {

View File

@@ -23,12 +23,15 @@ import com.google.common.base.Function;
import forge.FThreads; import forge.FThreads;
import forge.Forge.Graphics; import forge.Forge.Graphics;
import forge.assets.FSkin;
import forge.assets.FSkinColor; import forge.assets.FSkinColor;
import forge.assets.FSkinFont; import forge.assets.FSkinFont;
import forge.assets.FSkinColor.Colors; import forge.assets.FSkinColor.Colors;
import forge.card.CardRenderer; import forge.card.CardRenderer;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.player.Player;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.screens.match.views.VAvatar;
import forge.toolbox.FEvent; import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FList; import forge.toolbox.FList;
@@ -279,6 +282,31 @@ public class ListChooser<T> extends FContainer {
CardRenderer.drawCardListItem(g, font, foreColor, (Card)value, 0, x, y, w, h); 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<T> { private class ChoiceList extends FList<T> {
private boolean allowMultipleSelections; private boolean allowMultipleSelections;
@@ -296,6 +324,9 @@ public class ListChooser<T> extends FContainer {
else if (item instanceof Card) { else if (item instanceof Card) {
renderer = new CardItemRenderer(); renderer = new CardItemRenderer();
} }
else if (item instanceof Player) {
renderer = new PlayerItemRenderer();
}
else { else {
renderer = new DefaultItemRenderer(); renderer = new DefaultItemRenderer();
} }

View File

@@ -1,5 +1,9 @@
package forge.player; package forge.player;
import forge.GuiBase;
import forge.LobbyPlayer;
import forge.game.Game;
import forge.game.player.RegisteredPlayer;
import forge.model.FModel; import forge.model.FModel;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
@@ -64,4 +68,14 @@ public final class GamePlayerUtil {
} }
return newName; 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;
}
} }