mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Support using FDeckViewer to show deck list for Gui player from match screens of mobile and desktop games
This commit is contained in:
@@ -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()
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user