Swap out old GameView structure for new one

This commit is contained in:
drdev
2014-10-10 05:52:18 +00:00
parent 42e3778778
commit 3538823e11
151 changed files with 1763 additions and 5291 deletions

View File

@@ -25,7 +25,9 @@ import forge.control.GuiTimer;
import forge.deck.CardPool;
import forge.error.BugReportDialog;
import forge.game.GameEntity;
import forge.game.GameEntityView;
import forge.game.GameObject;
import forge.game.card.CardView;
import forge.game.player.DelayedReveal;
import forge.game.player.IHasIcon;
import forge.gui.BoxedProductCardListViewer;
@@ -51,8 +53,6 @@ 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
@@ -194,7 +194,7 @@ public class GuiDesktop implements IGuiBase {
delayedReveal.reveal(controller); //TODO: Merge this into search dialog
}
controller.tempShow(optionList);
List<GameEntityView> gameEntityViews = controller.getGameView().getGameEntityViews(optionList, false);
List<GameEntityView> gameEntityViews = GameEntityView.getEntityCollection(optionList);
if (isOptional) {
return SGuiChoose.oneOrNone(title, gameEntityViews);
}

View File

@@ -34,11 +34,11 @@ import com.mortennobel.imagescaling.ResampleOp;
import forge.assets.FSkinProp;
import forge.assets.ImageUtil;
import forge.game.card.CardView;
import forge.item.InventoryItem;
import forge.properties.ForgeConstants;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinIcon;
import forge.view.CardView;
/**
* This class stores ALL card images in a cache with soft values. this means

View File

@@ -17,6 +17,7 @@ import net.miginfocom.swing.MigLayout;
import forge.deck.CardPool;
import forge.deck.Deck;
import forge.deck.DeckSection;
import forge.game.card.CardView;
import forge.gui.CardDetailPanel;
import forge.gui.CardPicturePanel;
import forge.item.IPaperCard;
@@ -28,9 +29,7 @@ import forge.itemmanager.ItemManagerModel;
import forge.itemmanager.views.ImageView;
import forge.toolbox.FButton;
import forge.toolbox.FOptionPane;
import forge.view.CardView;
import forge.view.FDialog;
import forge.view.ViewUtil;
@SuppressWarnings("serial")
public class FDeckViewer extends FDialog {
@@ -62,7 +61,7 @@ public class FDeckViewer extends FDialog {
return new ImageView<PaperCard>(this, model0) {
@Override
protected void showHoveredItem(PaperCard item) {
final CardView card = ViewUtil.getCardForUi(item);
final CardView card = CardView.getCardForUi(item);
if (card == null) { return; }
cardDetail.setCard(card);
@@ -78,7 +77,7 @@ public class FDeckViewer extends FDialog {
final IPaperCard paperCard = cardManager.getSelectedItem();
if (paperCard == null) { return; }
final CardView card = ViewUtil.getCardForUi(paperCard);
final CardView card = CardView.getCardForUi(paperCard);
if (card == null) { return; }
cardDetail.setCard(card);

View File

@@ -31,6 +31,7 @@ import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import forge.game.card.CardView;
import forge.item.PaperCard;
import forge.model.FModel;
import forge.properties.ForgePreferences.FPref;
@@ -38,7 +39,6 @@ import forge.toolbox.FButton;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.view.FDialog;
import forge.view.ViewUtil;
/**
* A simple class that shows a list of cards in a dialog with preview in its
@@ -189,7 +189,7 @@ public class BoxedProductCardListViewer extends FDialog {
// (String) jList.getSelectedValue();
if ((row >= 0) && (row < BoxedProductCardListViewer.this.list.size())) {
final PaperCard cp = BoxedProductCardListViewer.this.list.get(row);
BoxedProductCardListViewer.this.detail.setCard(ViewUtil.getCardForUi(cp));
BoxedProductCardListViewer.this.detail.setCard(CardView.getCardForUi(cp));
BoxedProductCardListViewer.this.picture.setCard(cp);
}
}

View File

@@ -18,7 +18,8 @@
package forge.gui;
import forge.view.CardView;
import forge.game.card.CardView;
/**
* The class CardContainer. A card container is an object that references a
@@ -28,23 +29,6 @@ import forge.view.CardView;
* @version V0.0 17.02.2010
*/
public interface CardContainer {
/**
* <p>
* setCard.
* </p>
*
* @param card
* a {@link CardView} object.
*/
void setCard(CardView card);
/**
* <p>
* getCard.
* </p>
*
* @return a {@link CardView} object.
*/
CardView getCard();
void setCard(CardView card);
}

View File

@@ -33,6 +33,9 @@ import org.apache.commons.lang3.StringUtils;
import forge.card.CardDetailUtil;
import forge.card.CardDetailUtil.DetailColors;
import forge.card.CardEdition;
import forge.game.card.Card;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.item.IPaperCard;
import forge.item.InventoryItemFromSet;
import forge.model.FModel;
@@ -41,9 +44,6 @@ import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.view.CardView;
import forge.view.CardView.CardStateView;
import forge.view.ViewUtil;
/**
* The class CardDetailPanel. Shows the details of a card.
@@ -130,7 +130,7 @@ public class CardDetailPanel extends SkinnedPanel {
powerToughnessLabel.setVisible(false);
idLabel.setText("");
cdArea.setText(CardDetailUtil.getItemDescription(item));
this.updateBorder(item instanceof IPaperCard ? ViewUtil.getCardForUi((IPaperCard)item).getOriginal() : null);
this.updateBorder(item instanceof IPaperCard ? Card.getCardForUi((IPaperCard)item).getView().getOriginal() : null);
String set = item.getEdition();
setInfoLabel.setText(set);
@@ -185,7 +185,7 @@ public class CardDetailPanel extends SkinnedPanel {
this.nameCostLabel.setText(CardDetailUtil.formatCardName(state));
} else {
final String manaCost;
if (card.isSplitCard() && card.hasAltState()) {
if (card.isSplitCard() && card.getAlternate() != null) {
manaCost = card.getOriginal().getManaCost() + " // " + card.getAlternate().getManaCost();
} else {
manaCost = state.getManaCost().toString();

View File

@@ -18,6 +18,7 @@
package forge.gui;
import forge.game.card.CardView;
import forge.item.PaperCard;
import forge.model.FModel;
import forge.properties.ForgePreferences.FPref;
@@ -26,7 +27,6 @@ import forge.toolbox.FLabel;
import forge.toolbox.FOptionPane;
import forge.toolbox.FScrollPane;
import forge.view.FDialog;
import forge.view.ViewUtil;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
@@ -173,7 +173,7 @@ public class CardListChooser extends FDialog {
final int row = CardListChooser.this.jList.getSelectedIndex();
if ((row >= 0) && (row < CardListChooser.this.list.size())) {
final PaperCard cp = CardListChooser.this.list.get(row);
CardListChooser.this.detail.setCard(ViewUtil.getCardForUi(cp));
CardListChooser.this.detail.setCard(CardView.getCardForUi(cp));
CardListChooser.this.picture.setCard(cp);
}
}

View File

@@ -31,6 +31,7 @@ import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import forge.game.card.CardView;
import forge.item.PaperCard;
import forge.model.FModel;
import forge.properties.ForgePreferences.FPref;
@@ -38,7 +39,6 @@ import forge.toolbox.FButton;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.view.FDialog;
import forge.view.ViewUtil;
/**
* A simple class that shows a list of cards in a dialog with preview in its
@@ -172,7 +172,7 @@ public class CardListViewer extends FDialog {
// (String) jList.getSelectedValue();
if ((row >= 0) && (row < CardListViewer.this.list.size())) {
final PaperCard cp = CardListViewer.this.list.get(row);
CardListViewer.this.detail.setCard(ViewUtil.getCardForUi(cp));
CardListViewer.this.detail.setCard(CardView.getCardForUi(cp));
CardListViewer.this.picture.setCard(cp);
}
}

View File

@@ -25,13 +25,13 @@ import javax.swing.JPanel;
import forge.ImageCache;
import forge.ImageKeys;
import forge.game.card.CardView.CardStateView;
import forge.item.InventoryItem;
import forge.model.FModel;
import forge.properties.ForgePreferences.FPref;
import forge.toolbox.imaging.FImagePanel;
import forge.toolbox.imaging.FImagePanel.AutoSizeImageMode;
import forge.toolbox.imaging.FImageUtil;
import forge.view.CardView.CardStateView;
/**
* Displays image associated with a card or inventory item.

View File

@@ -21,6 +21,10 @@ import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import forge.game.card.Card;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.game.spellability.SpellAbilityView;
import forge.item.IPaperCard;
import forge.item.PaperCard;
import forge.screens.match.CMatchUI;
@@ -29,11 +33,7 @@ import forge.toolbox.FLabel;
import forge.toolbox.FList;
import forge.toolbox.FPanel;
import forge.toolbox.FScrollPane;
import forge.view.CardView;
import forge.view.CardView.CardStateView;
import forge.view.FDialog;
import forge.view.SpellAbilityView;
import forge.view.ViewUtil;
// An input box for handling the order of choices.
// Left box has the original choices
@@ -334,7 +334,7 @@ public class DualListBox<T> extends FDialog {
} else if (obj instanceof SpellAbilityView) {
card = ((SpellAbilityView) obj).getHostCard();
} else if (obj instanceof PaperCard) {
card = ViewUtil.getCardForUi((IPaperCard) obj);
card = Card.getCardForUi((IPaperCard) obj).getView();
}
GuiUtils.clearPanelSelections();

View File

@@ -20,16 +20,13 @@ import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import forge.FThreads;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.item.InventoryItem;
import forge.screens.match.CMatchUI;
import forge.toolbox.FOptionPane;
import forge.view.CardView;
import forge.view.CardView.CardStateView;
/**
* TODO: Write javadoc for this type.
*
*/
public class GuiChoose {
/**
@@ -210,9 +207,11 @@ public class GuiChoose {
final CardView card;
if (sel instanceof CardStateView) {
card = ((CardStateView) sel).getCard();
} else if (sel instanceof CardView) {
}
else if (sel instanceof CardView) {
card = (CardView) sel;
} else {
}
else {
card = null;
}
if (card != null) {

View File

@@ -8,9 +8,9 @@ import javax.swing.UIManager;
import org.apache.commons.lang3.StringUtils;
import forge.FThreads;
import forge.game.card.CardView;
import forge.screens.match.CMatchUI;
import forge.toolbox.FOptionPane;
import forge.view.CardView;
/**
* Holds player interactions using standard windows

View File

@@ -32,9 +32,9 @@ import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.KeyStroke;
import forge.game.card.CardView;
import forge.screens.match.VMatchUI;
import forge.screens.match.views.VField;
import forge.view.CardView;
import forge.view.arcane.CardPanel;
/**

View File

@@ -4,6 +4,7 @@ import forge.ImageCache;
import forge.assets.FSkinProp;
import forge.deck.DeckProxy;
import forge.game.card.Card;
import forge.game.card.CardView;
import forge.gui.framework.ILocalRepaint;
import forge.item.IPaperCard;
import forge.item.InventoryItem;
@@ -20,8 +21,6 @@ import forge.toolbox.FSkin.SkinColor;
import forge.toolbox.FSkin.SkinFont;
import forge.toolbox.FSkin.SkinImage;
import forge.toolbox.special.CardZoomer;
import forge.view.CardView;
import forge.view.ViewUtil;
import forge.view.arcane.CardPanel;
import javax.swing.*;
@@ -234,7 +233,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
ItemInfo item = getItemAtPoint(e.getPoint());
if (item != null && item.item instanceof IPaperCard) {
setLockHoveredItem(true); //lock hoveredItem while zoomer open
final CardView card = ViewUtil.getCardForUi((IPaperCard) item.item);
final CardView card = CardView.getCardForUi((IPaperCard) item.item);
CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(card);
}
}
@@ -1101,14 +1100,14 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
if (item instanceof IPaperCard) {
IPaperCard paperCard = (IPaperCard)item;
if (paperCard.isFoil()) {
final CardView card = ViewUtil.getCardForUi(paperCard);
final CardView card = CardView.getCardForUi(paperCard);
if (card.getOriginal().getFoilIndex() == 0) { //if foil finish not yet established, assign a random one
// FIXME should assign a random foil here in all cases
// (currently assigns 1 for the deck editors where foils "flicker" otherwise)
if (item instanceof Card) {
card.getOriginal().setRandomFoil();
card.getOriginal().setFoilIndexOverride(-1); //-1 to set random foil
} else if (item instanceof IPaperCard) {
card.getOriginal().setFoilIndex(1);
card.getOriginal().setFoilIndexOverride(1);
}
}
CardPanel.drawFoilEffect(g, card, bounds.x, bounds.y, bounds.width, bounds.height, borderSize);

View File

@@ -40,6 +40,7 @@ import forge.deckchooser.DecksComboBoxEvent;
import forge.deckchooser.FDeckChooser;
import forge.deckchooser.IDecksComboBoxListener;
import forge.game.GameType;
import forge.game.card.CardView;
import forge.gui.CardDetailPanel;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
@@ -75,7 +76,6 @@ import forge.toolbox.FTextField;
import forge.util.Lang;
import forge.util.MyRandom;
import forge.util.NameGenerator;
import forge.view.ViewUtil;
/**
* Assembles Swing components of constructed submenu singleton.
@@ -1243,7 +1243,7 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
if (obj instanceof PaperCard) {
pp.setVanguardButtonText(((PaperCard) obj).getName());
cdp.setCard(ViewUtil.getCardForUi((PaperCard) obj));
cdp.setCard(CardView.getCardForUi((PaperCard) obj));
cdp.setVisible(true);
refreshPanels(false, true);
}

View File

@@ -16,6 +16,7 @@ import java.awt.event.MouseMotionListener;
import forge.achievement.Achievement;
import forge.achievement.AchievementCollection;
import forge.assets.FSkinProp;
import forge.game.card.CardView;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
import forge.gui.framework.EDocID;
@@ -30,7 +31,6 @@ import forge.toolbox.FSkin.SkinColor;
import forge.toolbox.FSkin.SkinFont;
import forge.toolbox.FSkin.SkinImage;
import forge.toolbox.special.CardZoomer;
import forge.view.ViewUtil;
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
@@ -104,7 +104,7 @@ public enum VSubmenuAchievements implements IVSubmenu<CSubmenuAchievements> {
IPaperCard pc = achievement.getPaperCard();
if (pc != null) {
preventMouseOut = true;
CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(ViewUtil.getCardForUi(pc));
CardZoomer.SINGLETON_INSTANCE.doMouseButtonZoom(CardView.getCardForUi(pc));
}
}
}

View File

@@ -39,9 +39,15 @@ import forge.ImageCache;
import forge.LobbyPlayer;
import forge.Singletons;
import forge.UiCommand;
import forge.game.GameEntityView;
import forge.game.GameView;
import forge.game.Match;
import forge.game.card.CardView;
import forge.game.combat.CombatView;
import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.game.player.PlayerView;
import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType;
import forge.gui.FNetOverlay;
import forge.gui.GuiChoose;
@@ -82,13 +88,6 @@ import forge.toolbox.FSkin.SkinImage;
import forge.toolbox.special.PhaseIndicator;
import forge.toolbox.special.PhaseLabel;
import forge.util.ITriggerEvent;
import forge.view.CardView;
import forge.view.CombatView;
import forge.view.GameEntityView;
import forge.view.LocalGameView;
import forge.view.PlayerView;
import forge.view.SpellAbilityView;
import forge.view.ViewUtil;
import forge.view.arcane.CardPanel;
import forge.view.arcane.PlayArea;
@@ -169,7 +168,7 @@ public enum CMatchUI implements ICDoc, IMenuProvider, IMatchController {
int i = 0;
for (final PlayerView p : sortedPlayers) {
if (allHands || p.getLobbyPlayer() instanceof LobbyPlayerHuman || ViewUtil.mayViewAny(p.getHandCards())) {
if (allHands || p.getLobbyPlayer() instanceof LobbyPlayerHuman || CardView.mayViewAny(p.getHand())) {
VHand newHand = new VHand(EDocID.Hands[i], p);
newHand.getLayoutControl().initialize();
hands.add(newHand);
@@ -247,7 +246,9 @@ public enum CMatchUI implements ICDoc, IMenuProvider, IMatchController {
return sortedPlayers.indexOf(player);
}
public void showCombat(final CombatView combat) {
@Override
public void showCombat() {
CombatView combat = MatchUtil.getGameView().getCombat();
if (combat != null && combat.getNumAttackers() > 0 && MatchUtil.getGameView().peekStack() == null) {
if (selectedDocBeforeCombat == null) {
IVDoc<? extends ICDoc> combatDoc = EDocID.REPORT_COMBAT.getDoc();
@@ -427,7 +428,7 @@ public enum CMatchUI implements ICDoc, IMenuProvider, IMatchController {
@Override
public void updatePhase() {
LocalGameView gameView = MatchUtil.getGameView();
GameView gameView = MatchUtil.getGameView();
final PlayerView p = gameView.getPlayerTurn();
final PhaseType ph = gameView.getPhase();
final CMatchUI matchUi = CMatchUI.SINGLETON_INSTANCE;
@@ -486,26 +487,25 @@ public enum CMatchUI implements ICDoc, IMenuProvider, IMatchController {
}
@Override
public int getAbilityToPlay(List<SpellAbilityView> abilities, ITriggerEvent triggerEvent) {
public SpellAbility getAbilityToPlay(List<SpellAbility> abilities, ITriggerEvent triggerEvent) {
if (triggerEvent == null) {
if (abilities.isEmpty()) {
return -1;
return null;
}
if (abilities.size() == 1) {
return abilities.get(0).getId();
return abilities.get(0);
}
final SpellAbilityView choice = GuiChoose.oneOrNone("Choose ability to play", abilities);
return choice == null ? -1 : choice.getId();
return GuiChoose.oneOrNone("Choose ability to play", abilities);
}
if (abilities.isEmpty()) {
return -1;
return null;
}
if (abilities.size() == 1 && !abilities.get(0).isPromptIfOnlyPossibleAbility()) {
if (abilities.size() == 1 && !abilities.get(0).promptIfOnlyPossibleAbility()) {
if (abilities.get(0).canPlay()) {
return abilities.get(0).getId(); //only return ability if it's playable, otherwise return null
return abilities.get(0); //only return ability if it's playable, otherwise return null
}
return -1;
return null;
}
//show menu if mouse was trigger for ability
@@ -514,7 +514,7 @@ public enum CMatchUI implements ICDoc, IMenuProvider, IMatchController {
boolean enabled;
boolean hasEnabled = false;
int shortcut = KeyEvent.VK_1; //use number keys as shortcuts for abilities 1-9
for (final SpellAbilityView ab : abilities) {
for (final SpellAbility ab : abilities) {
enabled = ab.canPlay();
if (enabled) {
hasEnabled = true;
@@ -544,7 +544,7 @@ public enum CMatchUI implements ICDoc, IMenuProvider, IMatchController {
menu.show(mouseEvent.getComponent(), mouseEvent.getX(), mouseEvent.getY());
}
return -1; //delay ability until choice made
return null; //delay ability until choice made
}
@Override
@@ -615,7 +615,7 @@ public enum CMatchUI implements ICDoc, IMenuProvider, IMatchController {
public void openView(List<Player> sortedPlayers) {
List<PlayerView> sortedPlayerViews = new ArrayList<PlayerView>();
for (Player p : sortedPlayers) {
sortedPlayerViews.add(MatchUtil.getGameView().getPlayerView(p, false));
sortedPlayerViews.add(PlayerView.get(p));
}
CMatchUI.SINGLETON_INSTANCE.initMatch(sortedPlayerViews, MatchUtil.getHumanCount() != 1);

View File

@@ -6,10 +6,10 @@ import java.awt.event.ActionListener;
import javax.swing.JButton;
import forge.Singletons;
import forge.game.GameView;
import forge.gui.SOverlayUtils;
import forge.gui.framework.FScreen;
import forge.match.MatchUtil;
import forge.view.IGameView;
/**
* Default controller for a ViewWinLose object. This class can
@@ -19,11 +19,11 @@ import forge.view.IGameView;
*/
public class ControlWinLose {
private final ViewWinLose view;
protected final IGameView lastGame;
protected final GameView lastGame;
/** @param v &emsp; ViewWinLose
* @param match */
public ControlWinLose(final ViewWinLose v, final IGameView game0) {
public ControlWinLose(final ViewWinLose v, final GameView game0) {
this.view = v;
this.lastGame = game0;
addListeners();

View File

@@ -26,11 +26,11 @@ import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import forge.assets.FSkinProp;
import forge.game.GameView;
import forge.gauntlet.GauntletWinLoseController;
import forge.toolbox.FLabel;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.view.IGameView;
/**
* The Win/Lose handler for 'gauntlet' type tournament
@@ -45,7 +45,7 @@ public class GauntletWinLose extends ControlWinLose {
* @param view0 ViewWinLose object
* @param match
*/
public GauntletWinLose(final ViewWinLose view0, final IGameView game0) {
public GauntletWinLose(final ViewWinLose view0, final GameView game0) {
super(view0, game0);
controller = new GauntletWinLoseController(view0, game0) {
@Override

View File

@@ -21,12 +21,12 @@ import java.awt.Dimension;
import javax.swing.SwingConstants;
import forge.game.GameView;
import forge.limited.LimitedWinLoseController;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.Colors;
import forge.toolbox.FSkin.SkinColor;
import forge.toolbox.FSkin.SkinnedLabel;
import forge.view.IGameView;
/**
* The Win/Lose handler for 'gauntlet' type tournament
@@ -46,7 +46,7 @@ public class LimitedWinLose extends ControlWinLose {
* @param view0 {@link forge.screens.match.ViewWinLose}
* @param match {@link forge.game.Match}
*/
public LimitedWinLose(final ViewWinLose view0, final IGameView game0) {
public LimitedWinLose(final ViewWinLose view0, final GameView game0) {
super(view0, game0);
controller = new LimitedWinLoseController(view0, game0) {
@Override

View File

@@ -18,11 +18,11 @@ package forge.screens.match;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import forge.LobbyPlayer;
import forge.Singletons;
import forge.assets.FSkinProp;
import forge.game.GameView;
import forge.game.player.PlayerView;
import forge.gui.SOverlayUtils;
import forge.gui.framework.FScreen;
import forge.match.MatchUtil;
@@ -36,8 +36,6 @@ import forge.screens.home.quest.CSubmenuQuestDraft;
import forge.screens.home.quest.VSubmenuQuestDraft;
import forge.toolbox.FOptionPane;
import forge.toolbox.FSkin;
import forge.view.IGameView;
import forge.view.PlayerView;
/**
* <p>
@@ -59,7 +57,7 @@ public class QuestDraftWinLose extends ControlWinLose {
* @param view0 ViewWinLose object
* @param match2
*/
public QuestDraftWinLose(final ViewWinLose view0, final IGameView game0) {
public QuestDraftWinLose(final ViewWinLose view0, final GameView game0) {
super(view0, game0);
this.view = view0;
qData = FModel.getQuest();
@@ -79,7 +77,7 @@ public class QuestDraftWinLose extends ControlWinLose {
QuestController quest = FModel.getQuest();
final LobbyPlayer questLobbyPlayer = GamePlayerUtil.getQuestPlayer();
final List<PlayerView> players = lastGame.getPlayers();
final Iterable<PlayerView> players = lastGame.getPlayers();
boolean gameHadHumanPlayer = false;
for (final PlayerView p : players) {
if (p.getLobbyPlayer().equals(questLobbyPlayer)) {
@@ -87,33 +85,30 @@ public class QuestDraftWinLose extends ControlWinLose {
break;
}
}
if (lastGame.isMatchOver()) {
if (lastGame.isMatchOver()) {
String winner = lastGame.getWinningPlayer().getName();
quest.getAchievements().getCurrentDraft().setWinner(winner);
quest.save();
}
if (!gameHadHumanPlayer) {
if (lastGame.isMatchOver()) {
this.actionOnQuitMatch();
QuestDraftUtils.matchInProgress = false;
QuestDraftUtils.update();
} else {
}
else {
this.actionOnContinue();
QuestDraftUtils.update();
}
return false;
}
view.getBtnRestart().setEnabled(false);
view.getBtnRestart().setVisible(false);
if (lastGame.isMatchOver()) {
view.getBtnQuit().setEnabled(true);
view.getBtnContinue().setEnabled(false);
@@ -129,7 +124,8 @@ public class QuestDraftWinLose extends ControlWinLose {
QuestDraftUtils.continueMatches();
}
});
} else {
}
else {
view.getBtnQuit().setEnabled(true);
for (ActionListener listener : view.getBtnQuit().getActionListeners()) {
view.getBtnQuit().removeActionListener(listener);
@@ -146,13 +142,13 @@ public class QuestDraftWinLose extends ControlWinLose {
}
});
}
CSubmenuQuestDraft.SINGLETON_INSTANCE.update();
VSubmenuQuestDraft.SINGLETON_INSTANCE.populate();
return false; //We're not awarding anything, so never display the custom panel.
}
public final void actionOnQuitMatch() {
CSubmenuDuels.SINGLETON_INSTANCE.update();
CSubmenuChallenges.SINGLETON_INSTANCE.update();

View File

@@ -22,6 +22,7 @@ import java.util.List;
import javax.swing.SwingConstants;
import forge.assets.FSkinProp;
import forge.game.GameView;
import forge.item.PaperCard;
import forge.model.FModel;
import forge.properties.ForgePreferences.FPref;
@@ -33,7 +34,6 @@ import forge.toolbox.FSkin.Colors;
import forge.toolbox.FSkin.SkinColor;
import forge.toolbox.FSkin.SkinIcon;
import forge.toolbox.FSkin.SkinnedLabel;
import forge.view.IGameView;
/**
* <p>
@@ -61,7 +61,7 @@ public class QuestWinLose extends ControlWinLose {
* @param view0 ViewWinLose object
* @param match2
*/
public QuestWinLose(final ViewWinLose view0, final IGameView game0) {
public QuestWinLose(final ViewWinLose view0, final GameView game0) {
super(view0, game0);
view = view0;
controller = new QuestWinLoseController(game0) {

View File

@@ -26,6 +26,7 @@ import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import net.miginfocom.swing.MigLayout;
import forge.game.card.CardView;
import forge.gui.CardDetailPanel;
import forge.gui.CardPicturePanel;
import forge.item.PaperCard;
@@ -35,7 +36,6 @@ import forge.toolbox.FList;
import forge.toolbox.FPanel;
import forge.toolbox.FScrollPane;
import forge.toolbox.FSkin;
import forge.view.ViewUtil;
/**
* A simple JPanel that shows three columns: card list, pic, and description..
@@ -112,10 +112,9 @@ public class QuestWinLoseCardViewer extends FPanel {
// (String) jList.getSelectedValue();
if ((row >= 0) && (row < QuestWinLoseCardViewer.this.list.size())) {
final PaperCard cp = QuestWinLoseCardViewer.this.list.get(row);
QuestWinLoseCardViewer.this.detail.setCard(ViewUtil.getCardForUi(cp));
QuestWinLoseCardViewer.this.detail.setCard(CardView.getCardForUi(cp));
QuestWinLoseCardViewer.this.picture.setCard(cp);
}
}
}
}

View File

@@ -35,24 +35,23 @@ import javax.swing.JPanel;
import com.google.common.collect.Lists;
import forge.Singletons;
import forge.game.GameEntityView;
import forge.game.GameView;
import forge.game.card.CardView;
import forge.game.combat.CombatView;
import forge.gui.framework.FScreen;
import forge.match.MatchUtil;
import forge.screens.match.controllers.CDock;
import forge.screens.match.views.VField;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.view.CardView;
import forge.view.CombatView;
import forge.view.FView;
import forge.view.GameEntityView;
import forge.view.IGameView;
import forge.view.arcane.CardPanel;
/**
* Semi-transparent overlay panel. Should be used with layered panes.
*
*/
@SuppressWarnings("serial")
public enum TargetingOverlay {
/** */
@@ -365,7 +364,7 @@ public enum TargetingOverlay {
if (overlaystate == 0) { return; }
// Arc drawing
final IGameView gameView = MatchUtil.getGameView();
final GameView gameView = MatchUtil.getGameView();
if (gameView != null) {
assembleArcs(gameView.getCombat());
}

View File

@@ -37,6 +37,9 @@ import net.miginfocom.swing.MigLayout;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import forge.game.GameEntityView;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.gui.SOverlayUtils;
import forge.match.MatchUtil;
import forge.toolbox.FButton;
@@ -44,10 +47,7 @@ import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.view.CardView;
import forge.view.FDialog;
import forge.view.GameEntityView;
import forge.view.PlayerView;
import forge.view.arcane.CardPanel;
/**
@@ -145,16 +145,16 @@ public class VAssignDamage {
* @param overrideOrder override combatant order
*/
public VAssignDamage(final CardView attacker, final List<CardView> blockers, final int damage0, final GameEntityView defender, boolean overrideOrder) {
public VAssignDamage(final CardView attacker, final List<CardView> blockers, final int damage0, final GameEntityView defender0, boolean overrideOrder) {
dlg.setTitle("Assign damage dealt by " + attacker);
// Set damage storage vars
this.totalDamageToAssign = damage0;
this.defender = defender;
this.attackerHasDeathtouch = attacker.getOriginal().hasDeathtouch();
this.attackerHasInfect = attacker.getOriginal().hasInfect();
this.attackerHasTrample = defender != null && attacker.getOriginal().hasTrample();
this.overrideCombatantOrder = overrideOrder;
totalDamageToAssign = damage0;
defender = defender0;
attackerHasDeathtouch = attacker.getOriginal().hasDeathtouch();
attackerHasInfect = attacker.getOriginal().hasInfect();
attackerHasTrample = defender != null && attacker.getOriginal().hasTrample();
overrideCombatantOrder = overrideOrder;
// Top-level UI stuff
final JPanel overlay = SOverlayUtils.genericOverlay();
@@ -184,28 +184,23 @@ public class VAssignDamage {
// Top row of cards...
for (final CardView c : blockers) {
DamageTarget dt = new DamageTarget(c, new FLabel.Builder().text("0").fontSize(18).fontAlign(SwingConstants.CENTER).build());
this.damage.put(c, dt);
this.defenders.add(dt);
damage.put(c, dt);
defenders.add(dt);
addPanelForDefender(pnlDefenders, c);
}
if (attackerHasTrample) {
DamageTarget dt = new DamageTarget(null, new FLabel.Builder().text("0").fontSize(18).fontAlign(SwingConstants.CENTER).build());
this.damage.put(null, dt);
this.defenders.add(dt);
damage.put(null, dt);
defenders.add(dt);
CardView fakeCard = null;
if (defender instanceof CardView) {
fakeCard = (CardView)defender;
}
else if (defender instanceof PlayerView) {
fakeCard = new CardView(-1);
fakeCard.getOriginal().setName(this.defender.toString());
final PlayerView p = (PlayerView)defender;
fakeCard.setOwner(p);
fakeCard.setController(p);
fakeCard.getOriginal().setImageKey(CMatchUI.SINGLETON_INSTANCE.avatarImages.get(p.getLobbyPlayer()));
fakeCard = new CardView(-1, defender.toString(), p, CMatchUI.SINGLETON_INSTANCE.avatarImages.get(p.getLobbyPlayer()));
}
addPanelForDefender(pnlDefenders, fakeCard);
}
@@ -251,12 +246,12 @@ public class VAssignDamage {
initialAssignDamage(false);
SOverlayUtils.showOverlay();
this.dlg.setUndecorated(true);
this.dlg.setContentPane(pnlMain);
this.dlg.setSize(new Dimension(wDlg, hDlg));
this.dlg.setLocation((overlay.getWidth() - wDlg) / 2, (overlay.getHeight() - hDlg) / 2);
this.dlg.setModalityType(ModalityType.APPLICATION_MODAL);
this.dlg.setVisible(true);
dlg.setUndecorated(true);
dlg.setContentPane(pnlMain);
dlg.setSize(new Dimension(wDlg, hDlg));
dlg.setLocation((overlay.getWidth() - wDlg) / 2, (overlay.getHeight() - hDlg) / 2);
dlg.setModalityType(ModalityType.APPLICATION_MODAL);
dlg.setVisible(true);
}
/**
@@ -284,7 +279,7 @@ public class VAssignDamage {
// If trying to assign to the defender, follow the normal assignment rules
// No need to check for "active" creature assignee when overiding combatant order
if ((source == null || source == this.defender || !this.overrideCombatantOrder) && isAdding &&
if ((source == null || source == defender || !overrideCombatantOrder) && isAdding &&
!VAssignDamage.this.canAssignTo(source)) {
return;
}
@@ -312,7 +307,7 @@ public class VAssignDamage {
// cannot assign first blocker less than lethal damage except when overriding order
boolean isFirstBlocker = defenders.get(0).card == source;
if (!this.overrideCombatantOrder && isFirstBlocker && damageToAdd + damageItHad < lethalDamage )
if (!overrideCombatantOrder && isFirstBlocker && damageToAdd + damageItHad < lethalDamage )
return;
if ( 0 == damageToAdd || damageToAdd + damageItHad < 0)
@@ -331,7 +326,7 @@ public class VAssignDamage {
int damage = dt.damage;
// If overriding combatant order, make sure everything has lethal if defender has damage assigned to it
// Otherwise, follow normal combatant order
if ( hasAliveEnemy && (!this.overrideCombatantOrder || dt.card == null || dt.card == this.defender))
if ( hasAliveEnemy && (!overrideCombatantOrder || dt.card == null || dt.card == defender))
dt.damage = 0;
else
hasAliveEnemy |= damage < lethal;
@@ -340,7 +335,7 @@ public class VAssignDamage {
// will assign all damage to defenders and rest to player, if present
private void initialAssignDamage(boolean toAllBlockers) {
if (!toAllBlockers && this.overrideCombatantOrder) {
if (!toAllBlockers && overrideCombatantOrder) {
// Don't auto assign the first damage when overriding combatant order
updateLabels();
return;
@@ -420,7 +415,7 @@ public class VAssignDamage {
dt.label.setText(sb.toString());
}
this.lblTotalDamage.setText(String.format("Available damage points: %d (of %d)", damageLeft, this.totalDamageToAssign));
lblTotalDamage.setText(String.format("Available damage points: %d (of %d)", damageLeft, totalDamageToAssign));
btnOK.setEnabled(damageLeft == 0);
lblAssignRemaining.setVisible(allHaveLethal && damageLeft > 0);
}
@@ -435,23 +430,20 @@ public class VAssignDamage {
dlg.dispose();
SOverlayUtils.hideOverlay();
}
/**
* TODO: Write javadoc for this method.
* @param card
* @return
*/
private int getDamageToKill(final CardView card) {
int lethalDamage = 0;
if (card == null) {
if (defender instanceof PlayerView) {
final PlayerView p = (PlayerView)defender;
lethalDamage = attackerHasInfect ? MatchUtil.getGameView().getPoisonCountersToLose() - p.getPoisonCounters() : p.getLife();
} else if (defender instanceof CardView) { // planeswalker
}
else if (defender instanceof CardView) { // planeswalker
final CardView pw = (CardView)defender;
lethalDamage = pw.getOriginal().getLoyalty();
}
} else {
}
else {
lethalDamage = VAssignDamage.this.attackerHasDeathtouch ? 1 : Math.max(0, card.getLethalDamage());
}
return lethalDamage;

View File

@@ -10,13 +10,13 @@ import javax.swing.event.ChangeListener;
import forge.Singletons;
import forge.UiCommand;
import forge.player.PlayerControllerHuman;
import forge.toolbox.FButton;
import forge.toolbox.FCheckBox;
import forge.toolbox.FList;
import forge.toolbox.FOptionPane;
import forge.toolbox.FScrollPane;
import forge.view.FDialog;
import forge.view.IGameView;
@SuppressWarnings("serial")
public class VAutoYields extends FDialog {
@@ -31,12 +31,12 @@ public class VAutoYields extends FDialog {
private final FCheckBox chkDisableAll;
private final List<String> autoYields;
public VAutoYields(final IGameView game) {
public VAutoYields(final PlayerControllerHuman humanController) {
super(true);
setTitle("Auto-Yields");
autoYields = new ArrayList<String>();
for (final String autoYield : game.getAutoYields()) {
for (final String autoYield : humanController.getAutoYields()) {
autoYields.add(autoYield);
}
lstAutoYields = new FList<String>(new AutoYieldsListModel());
@@ -48,11 +48,11 @@ public class VAutoYields extends FDialog {
listScroller = new FScrollPane(lstAutoYields, true);
chkDisableAll = new FCheckBox("Disable All Auto Yields", game.getDisableAutoYields());
chkDisableAll = new FCheckBox("Disable All Auto Yields", humanController.getDisableAutoYields());
chkDisableAll.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
game.setDisableAutoYields(chkDisableAll.isSelected());
humanController.setDisableAutoYields(chkDisableAll.isSelected());
}
});
@@ -71,7 +71,7 @@ public class VAutoYields extends FDialog {
if (selected != null) {
autoYields.remove(selected);
btnRemove.setEnabled(autoYields.size() > 0);
game.setShouldAutoYield(selected, false);
humanController.setShouldAutoYield(selected, false);
VAutoYields.this.revalidate();
lstAutoYields.repaint();
}

View File

@@ -1,5 +1,6 @@
package forge.screens.match;
import forge.game.GameView;
import forge.gui.framework.*;
import forge.match.MatchUtil;
import forge.properties.ForgePreferences;
@@ -8,7 +9,6 @@ import forge.sound.MusicPlaylist;
import forge.sound.SoundSystem;
import forge.toolbox.FButton;
import forge.view.FView;
import forge.view.IGameView;
import javax.swing.*;
@@ -23,7 +23,6 @@ import java.util.List;
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
*/
public enum VMatchUI implements IVTopLevelUI {
/** */
SINGLETON_INSTANCE;
private List<VCommand> lstCommands = new ArrayList<VCommand>();
@@ -45,12 +44,10 @@ public enum VMatchUI implements IVTopLevelUI {
for (int i = 0; i < 8; i++) EDocID.Hands[i].setDoc(new VEmptyDoc(EDocID.Hands[i]));
}
/** */
@Override
public void instantiate() {
}
/** */
@Override
public void populate() {
// Dev mode disabled? Remove from parent cell if exists.
@@ -95,23 +92,12 @@ public enum VMatchUI implements IVTopLevelUI {
}
}
if (MatchUtil.getGameView().isCommandZoneNeeded()) {
// Add extra players alternatively to existing user/AI field panels.
for (int i = 2; i < lstCommands.size(); i++) {
// If already in layout, no need to add again.
VCommand cmdView = lstCommands.get(i);
if (cmdView.getParentCell() == null) {
lstCommands.get(i % 2).getParentCell().addDoc(cmdView);
}
}
}
else {
//If game goesn't need command zone, remove it from existing field panels
for (int i = 0; i < 2; i++) {
VCommand cmdView = lstCommands.get(i);
if (cmdView.getParentCell() != null) {
cmdView.getParentCell().removeDoc(cmdView);
}
// Add extra players alternatively to existing user/AI field panels.
for (int i = 2; i < lstCommands.size(); i++) {
// If already in layout, no need to add again.
VCommand cmdView = lstCommands.get(i);
if (cmdView.getParentCell() == null) {
lstCommands.get(i % 2).getParentCell().addDoc(cmdView);
}
}
@@ -147,24 +133,18 @@ public enum VMatchUI implements IVTopLevelUI {
});
}
//========== Retrieval methods
/** @return {@link forge.screens.match.CMatchUI} */
public CMatchUI getControl() {
return this.control;
}
/** @param lst0 List<VField> */
public void setFieldViews(final List<VField> lst0) {
this.lstFields = lst0;
}
/** @return {@link java.util.List}<{@link forge.screens.match.views.VHand}> */
public List<VField> getFieldViews() {
return lstFields;
}
/** @param lst0 List<VField> */
public void setHandViews(final List<VHand> lst0) {
this.lstHands = lst0;
}
@@ -177,16 +157,10 @@ public enum VMatchUI implements IVTopLevelUI {
return VPrompt.SINGLETON_INSTANCE.getBtnOK();
}
/**
* @return the lstCommands
*/
public List<VCommand> getCommandViews() {
return lstCommands;
}
/**
* @param lstCommands0 the lstCommands to set
*/
public void setCommandViews(List<VCommand> lstCommands0) {
this.lstCommands = lstCommands0;
}
@@ -195,20 +169,14 @@ public enum VMatchUI implements IVTopLevelUI {
return lstHands;
}
/* (non-Javadoc)
* @see forge.gui.framework.IVTopLevelUI#onSwitching(forge.gui.framework.FScreen)
*/
@Override
public boolean onSwitching(FScreen fromScreen, FScreen toScreen) {
return true;
}
/* (non-Javadoc)
* @see forge.gui.framework.IVTopLevelUI#onClosing(forge.control.FControl.Screens)
*/
@Override
public boolean onClosing(FScreen screen) {
final IGameView gameView = MatchUtil.getGameView();
final GameView gameView = MatchUtil.getGameView();
if (gameView != null && !gameView.isGameOver()) {
MatchUtil.concede();
return false; //delay hiding tab even if concede successful

View File

@@ -18,6 +18,7 @@ import forge.LobbyPlayer;
import forge.UiCommand;
import forge.game.GameLogEntry;
import forge.game.GameLogEntryType;
import forge.game.GameView;
import forge.gui.SOverlayUtils;
import forge.interfaces.IWinLoseView;
import forge.model.FModel;
@@ -29,7 +30,6 @@ import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedLabel;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.toolbox.FTextArea;
import forge.view.IGameView;
public class ViewWinLose implements IWinLoseView<FButton> {
private final FButton btnContinue, btnRestart, btnQuit;
@@ -39,10 +39,10 @@ public class ViewWinLose implements IWinLoseView<FButton> {
private final SkinnedLabel lblStats = new SkinnedLabel("WinLoseFrame > lblStats needs updating.");
private final JPanel pnlOutcomes = new JPanel(new MigLayout("wrap, align center"));
private final IGameView game;
private final GameView game;
@SuppressWarnings("serial")
public ViewWinLose(final IGameView game0) {
public ViewWinLose(final GameView game0) {
this.game = game0;
@@ -107,7 +107,7 @@ public class ViewWinLose implements IWinLoseView<FButton> {
// Assemble game log scroller.
final FTextArea txtLog = new FTextArea();
txtLog.setText(StringUtils.join(game.getLogEntries(null), "\r\n").replace("[COMPUTER]", "[AI]"));
txtLog.setText(StringUtils.join(game.getGameLog().getLogEntries(null), "\r\n").replace("[COMPUTER]", "[AI]"));
txtLog.setFont(FSkin.getFont(14));
txtLog.setFocusable(true); // allow highlighting and copying of log
@@ -187,7 +187,7 @@ public class ViewWinLose implements IWinLoseView<FButton> {
}
private String composeTitle(final IGameView game) {
private String composeTitle(final GameView game) {
final LobbyPlayer winner = game.getWinningPlayer();
final int winningTeam = game.getWinningTeam();
if (winner == null) {
@@ -220,12 +220,12 @@ public class ViewWinLose implements IWinLoseView<FButton> {
}
private void showGameOutcomeSummary() {
for (final GameLogEntry o : game.getLogEntriesExact(GameLogEntryType.GAME_OUTCOME))
for (final GameLogEntry o : game.getGameLog().getLogEntriesExact(GameLogEntryType.GAME_OUTCOME))
pnlOutcomes.add(new FLabel.Builder().text(o.message).fontSize(14).build(), "h 20!");
}
private void showPlayerScores() {
for (final GameLogEntry o : game.getLogEntriesExact(GameLogEntryType.MATCH_RESULTS)) {
for (final GameLogEntry o : game.getGameLog().getLogEntriesExact(GameLogEntryType.MATCH_RESULTS)) {
lblStats.setText(removePlayerTypeFromLogMessage(o.message));
}
}

View File

@@ -5,13 +5,13 @@ import java.util.List;
import com.google.common.collect.Lists;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.game.player.PlayerView;
import forge.game.zone.ZoneType;
import forge.gui.ForgeAction;
import forge.gui.GuiChoose;
import forge.match.MatchConstants;
import forge.view.CardView;
import forge.view.CardView.CardStateView;
import forge.view.PlayerView;
/**
* Receives click and programmatic requests for viewing data stacks in the

View File

@@ -5,14 +5,14 @@ import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Iterables;
import forge.UiCommand;
import forge.game.GameEntityView;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.game.combat.CombatView;
import forge.game.player.PlayerView;
import forge.gui.framework.ICDoc;
import forge.screens.match.views.VCombat;
import forge.util.Lang;
import forge.view.CardView;
import forge.view.CardView.CardStateView;
import forge.view.CombatView;
import forge.view.GameEntityView;
import forge.view.PlayerView;
/**
* Controls the combat panel in the match UI.

View File

@@ -18,9 +18,9 @@
package forge.screens.match.controllers;
import forge.UiCommand;
import forge.game.player.PlayerView;
import forge.gui.framework.ICDoc;
import forge.screens.match.views.VCommand;
import forge.view.PlayerView;
/**
* Controls Swing components of a player's command instance.

View File

@@ -20,14 +20,13 @@ package forge.screens.match.controllers;
import java.awt.event.MouseEvent;
import forge.UiCommand;
import forge.game.card.CardView;
import forge.gui.framework.ICDoc;
import forge.item.IPaperCard;
import forge.item.InventoryItem;
import forge.item.InventoryItemFromSet;
import forge.screens.match.views.VDetail;
import forge.toolbox.FMouseAdapter;
import forge.view.CardView;
import forge.view.ViewUtil;
/**
* Controls the card detail area in the match UI.
@@ -58,7 +57,7 @@ public enum CDetail implements ICDoc {
public void showCard(final InventoryItem item) {
if (item instanceof IPaperCard) {
showCard(ViewUtil.getCardForUi((IPaperCard)item));
showCard(CardView.getCardForUi((IPaperCard)item));
} else if (item instanceof InventoryItemFromSet) {
view.getLblFlipcard().setVisible(false);
view.getPnlDetail().setItem((InventoryItemFromSet)item);

View File

@@ -27,7 +27,7 @@ public enum CDev implements ICDoc {
public void togglePlayManyLandsPerTurn() {
boolean newValue = !VDev.SINGLETON_INSTANCE.getLblUnlimitedLands().getToggled();
VDev.SINGLETON_INSTANCE.getLblUnlimitedLands().setToggled(newValue);
MatchUtil.getGameView().cheat().setCanPlayUnlimitedLands(newValue);
MatchUtil.getHumanController().cheat().setCanPlayUnlimitedLands(newValue);
}
private final MouseListener madViewAll = new MouseAdapter() {
@@ -39,7 +39,7 @@ public enum CDev implements ICDoc {
public void toggleViewAllCards() {
boolean newValue = !VDev.SINGLETON_INSTANCE.getLblViewAll().getToggled();
VDev.SINGLETON_INSTANCE.getLblViewAll().setToggled(newValue);
MatchUtil.getGameView().cheat().setViewAllCards(newValue);
MatchUtil.getHumanController().cheat().setViewAllCards(newValue);
}
private final MouseListener madMana = new MouseAdapter() {
@@ -49,7 +49,7 @@ public enum CDev implements ICDoc {
}
};
public void generateMana() {
MatchUtil.getGameView().cheat().generateMana();
MatchUtil.getHumanController().cheat().generateMana();
}
private final MouseListener madSetup = new MouseAdapter() {
@@ -59,7 +59,7 @@ public enum CDev implements ICDoc {
}
};
public void setupGameState() {
MatchUtil.getGameView().cheat().setupGameState();
MatchUtil.getHumanController().cheat().setupGameState();
}
private final MouseListener madTutor = new MouseAdapter() {
@@ -69,7 +69,7 @@ public enum CDev implements ICDoc {
}
};
public void tutorForCard() {
MatchUtil.getGameView().cheat().tutorForCard();
MatchUtil.getHumanController().cheat().tutorForCard();
}
private final MouseListener madCardToHand = new MouseAdapter() {
@@ -79,7 +79,7 @@ public enum CDev implements ICDoc {
}
};
public void addCardToHand() {
MatchUtil.getGameView().cheat().addCardToHand();
MatchUtil.getHumanController().cheat().addCardToHand();
}
private final MouseListener madCounter = new MouseAdapter() {
@@ -89,7 +89,7 @@ public enum CDev implements ICDoc {
}
};
public void addCounterToPermanent() {
MatchUtil.getGameView().cheat().addCountersToPermanent();
MatchUtil.getHumanController().cheat().addCountersToPermanent();
}
private final MouseListener madTap = new MouseAdapter() {
@@ -99,7 +99,7 @@ public enum CDev implements ICDoc {
}
};
public void tapPermanent() {
MatchUtil.getGameView().cheat().tapPermanents();
MatchUtil.getHumanController().cheat().tapPermanents();
}
private final MouseListener madUntap = new MouseAdapter() {
@@ -109,7 +109,7 @@ public enum CDev implements ICDoc {
}
};
public void untapPermanent() {
MatchUtil.getGameView().cheat().untapPermanents();
MatchUtil.getHumanController().cheat().untapPermanents();
}
private final MouseListener madLife = new MouseAdapter() {
@@ -119,7 +119,7 @@ public enum CDev implements ICDoc {
}
};
public void setPlayerLife() {
MatchUtil.getGameView().cheat().setPlayerLife();
MatchUtil.getHumanController().cheat().setPlayerLife();
}
private final MouseListener madWinGame = new MouseAdapter() {
@@ -129,7 +129,7 @@ public enum CDev implements ICDoc {
}
};
public void winGame() {
MatchUtil.getGameView().cheat().winGame();
MatchUtil.getHumanController().cheat().winGame();
}
private final MouseListener madCardToBattlefield = new MouseAdapter() {
@@ -139,7 +139,7 @@ public enum CDev implements ICDoc {
}
};
public void addCardToBattlefield() {
MatchUtil.getGameView().cheat().addCardToBattlefield();
MatchUtil.getHumanController().cheat().addCardToBattlefield();
}
private final MouseListener madRiggedRoll = new MouseAdapter() {
@@ -149,7 +149,7 @@ public enum CDev implements ICDoc {
}
};
public void riggedPlanerRoll() {
MatchUtil.getGameView().cheat().riggedPlanarRoll();
MatchUtil.getHumanController().cheat().riggedPlanarRoll();
}
private final MouseListener madWalkToPlane = new MouseAdapter() {
@@ -159,7 +159,7 @@ public enum CDev implements ICDoc {
}
};
public void planeswalkTo() {
MatchUtil.getGameView().cheat().planeswalkTo();
MatchUtil.getHumanController().cheat().planeswalkTo();
}
//========== End mouse listener inits
@@ -198,7 +198,7 @@ public enum CDev implements ICDoc {
*/
@Override
public void update() {
VDev.SINGLETON_INSTANCE.getLblUnlimitedLands().setToggled(MatchUtil.getGameView().canPlayUnlimitedLands());
VDev.SINGLETON_INSTANCE.getLblViewAll().setToggled(MatchUtil.getGameView().canViewAllCards());
VDev.SINGLETON_INSTANCE.getLblUnlimitedLands().setToggled(MatchUtil.getHumanController().canPlayUnlimitedLands());
VDev.SINGLETON_INSTANCE.getLblViewAll().setToggled(MatchUtil.getHumanController().mayLookAtAllCards());
}
}

View File

@@ -236,7 +236,7 @@ public enum CDock implements ICDoc {
VDock.SINGLETON_INSTANCE.getBtnAlphaStrike().setCommand(new UiCommand() {
@Override
public void run() {
MatchUtil.getGameView().alphaStrike();
MatchUtil.getHumanController().alphaStrike();
}
});
VDock.SINGLETON_INSTANCE.getBtnTargeting().setCommand(new UiCommand() {

View File

@@ -25,6 +25,8 @@ import com.google.common.base.Function;
import forge.Singletons;
import forge.UiCommand;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.game.zone.ZoneType;
import forge.gui.framework.ICDoc;
import forge.match.MatchConstants;
@@ -32,8 +34,6 @@ import forge.match.MatchUtil;
import forge.screens.match.ZoneAction;
import forge.screens.match.views.VField;
import forge.toolbox.MouseTriggerEvent;
import forge.view.CardView;
import forge.view.PlayerView;
/**
* Controls Swing components of a player's field instance.
@@ -79,21 +79,20 @@ public class CField implements ICDoc {
}
@Override
protected Iterable<CardView> getCardsAsIterable() {
return player.getFlashbackCards();
return player.getFlashback();
}
};
Function<Byte, Void> manaAction = new Function<Byte, Void>() {
public Void apply(Byte colorCode) {
if (CField.this.player.getLobbyPlayer() == Singletons.getControl().getGuiPlayer()) {
MatchUtil.getGameView().useMana(colorCode.byteValue());
MatchUtil.getHumanController().useMana(colorCode.byteValue());
}
return null;
}
};
view.getDetailsPanel().setupMouseActions(handAction, libraryAction, exileAction, graveAction, flashBackAction, manaAction);
}
@Override

View File

@@ -33,12 +33,12 @@ import com.google.common.collect.Lists;
import forge.FThreads;
import forge.Singletons;
import forge.UiCommand;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.gui.framework.ICDoc;
import forge.screens.match.CMatchUI;
import forge.screens.match.views.VField;
import forge.screens.match.views.VHand;
import forge.view.CardView;
import forge.view.PlayerView;
import forge.view.arcane.CardPanel;
import forge.view.arcane.HandArea;
import forge.view.arcane.util.Animation;
@@ -46,7 +46,6 @@ import forge.view.arcane.util.CardPanelMouseAdapter;
/**
* Controls Swing components of a player's hand instance.
*
*/
public class CHand implements ICDoc {
private final PlayerView player;
@@ -108,7 +107,7 @@ public class CHand implements ICDoc {
final List<CardView> cards;
synchronized (player) {
cards = ImmutableList.copyOf(player.getHandCards());
cards = ImmutableList.copyOf(player.getHand());
}
synchronized (ordering) {

View File

@@ -25,6 +25,7 @@ import javax.swing.JLabel;
import forge.UiCommand;
import forge.game.card.Card;
import forge.game.card.CardView;
import forge.gui.CardPicturePanel;
import forge.gui.framework.ICDoc;
import forge.item.IPaperCard;
@@ -32,8 +33,6 @@ import forge.item.InventoryItem;
import forge.screens.match.views.VPicture;
import forge.toolbox.FMouseAdapter;
import forge.toolbox.special.CardZoomer;
import forge.view.CardView;
import forge.view.ViewUtil;
/**
* Singleton controller for VPicture.
@@ -83,18 +82,20 @@ public enum CPicture implements ICDoc {
public void showImage(final InventoryItem item) {
if (item instanceof IPaperCard) {
final IPaperCard paperCard = ((IPaperCard)item);
final CardView c = ViewUtil.getCardForUi(paperCard);
final CardView c = CardView.getCardForUi(paperCard);
if (paperCard.isFoil() && c.getOriginal().getFoilIndex() == 0) {
// FIXME should assign a random foil here in all cases
// (currently assigns 1 for the deck editors where foils "flicker" otherwise)
if (item instanceof Card) {
c.getOriginal().setRandomFoil();
} else if (item instanceof IPaperCard) {
c.getOriginal().setFoilIndex(1);
c.getOriginal().setFoilIndexOverride(-1); //-1 to choose random
}
else if (item instanceof IPaperCard) {
c.getOriginal().setFoilIndexOverride(1);
}
}
showCard(c, false);
} else {
}
else {
currentView = null;
isDisplayAlt = false;
flipIndicator.setVisible(false);
@@ -177,5 +178,4 @@ public enum CPicture implements ICDoc {
CDetail.SINGLETON_INSTANCE.showCard(currentView, isDisplayAlt);
}
}
}

View File

@@ -28,16 +28,16 @@ import javax.swing.JButton;
import forge.FThreads;
import forge.UiCommand;
import forge.game.GameView;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.game.spellability.SpellAbility;
import forge.gui.framework.ICDoc;
import forge.gui.framework.SDisplayUtil;
import forge.match.MatchUtil;
import forge.screens.match.views.VPrompt;
import forge.toolbox.FSkin;
import forge.util.ITriggerEvent;
import forge.view.CardView;
import forge.view.IGameView;
import forge.view.PlayerView;
import forge.view.SpellAbilityView;
/**
* Controls the prompt panel in the match UI.
@@ -45,7 +45,6 @@ import forge.view.SpellAbilityView;
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
*/
public enum CPrompt implements ICDoc {
/** */
SINGLETON_INSTANCE;
private Component lastFocusedButton = null;
@@ -89,34 +88,33 @@ public enum CPrompt implements ICDoc {
}
public void selectButtonOk() {
MatchUtil.getGameView().selectButtonOk();
MatchUtil.getHumanController().selectButtonOk();
}
public void selectButtonCancel() {
MatchUtil.getGameView().selectButtonCancel();
MatchUtil.getHumanController().selectButtonCancel();
}
public boolean passPriority() {
return MatchUtil.getGameView().passPriority();
return MatchUtil.getHumanController().passPriority();
}
public boolean passPriorityUntilEndOfTurn() {
return MatchUtil.getGameView().passPriorityUntilEndOfTurn();
return MatchUtil.getHumanController().passPriorityUntilEndOfTurn();
}
public void selectPlayer(final PlayerView player, final ITriggerEvent triggerEvent) {
MatchUtil.getGameView().selectPlayer(player, triggerEvent);
MatchUtil.getHumanController().selectPlayer(player, triggerEvent);
}
public void selectCard(final CardView card, final ITriggerEvent triggerEvent) {
MatchUtil.getGameView().selectCard(card, triggerEvent);
MatchUtil.getHumanController().selectCard(card, triggerEvent);
}
public void selectAbility(final SpellAbilityView sa) {
MatchUtil.getGameView().selectAbility(sa);
public void selectAbility(final SpellAbility sa) {
MatchUtil.getHumanController().selectAbility(sa);
}
/** @param s0 &emsp; {@link java.lang.String} */
public void setMessage(String s0) {
view.getTarMessage().setText(FSkin.encodeSymbols(s0, false));
}
@@ -126,17 +124,11 @@ public enum CPrompt implements ICDoc {
SDisplayUtil.remind(view);
}
/* (non-Javadoc)
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
*/
@Override
public UiCommand getCommandOnSelect() {
return null;
}
/* (non-Javadoc)
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
*/
@Override
public void update() {
// set focus back to button that last had it
@@ -147,9 +139,9 @@ public enum CPrompt implements ICDoc {
public void updateText() {
FThreads.assertExecutedByEdt(true);
final IGameView game = MatchUtil.getGameView();
final String text = String.format("T:%d G:%d/%d [%s]", game.getTurnNumber(), game.getNumPlayedGamesInMatch() + 1, game.getNumGamesInMatch(), game.getGameType());
final GameView game = MatchUtil.getGameView();
final String text = String.format("T:%d G:%d/%d [%s]", game.getTurn(), game.getNumPlayedGamesInMatch() + 1, game.getNumGamesInMatch(), game.getGameType());
view.getLblGames().setText(text);
view.getLblGames().setToolTipText(String.format("%s: Game #%d of %d, turn %d", game.getGameType(), game.getNumPlayedGamesInMatch() + 1, game.getNumGamesInMatch(), game.getTurnNumber()));
view.getLblGames().setToolTipText(String.format("%s: Game #%d of %d, turn %d", game.getGameType(), game.getNumPlayedGamesInMatch() + 1, game.getNumGamesInMatch(), game.getTurn()));
}
}

View File

@@ -67,8 +67,8 @@ public class DevModeMenu implements ActionListener {
menu.add(getMenuItem(DevMenuItem.WIN_GAME));
menu.addSeparator();
menu.add(getMenuItem(DevMenuItem.SETUP_GAME_STATE));
menu.add(getCheckboxMenuItem(DevMenuItem.PLAY_UNLIMITED_LANDS, MatchUtil.getGameView().canPlayUnlimitedLands()));
menu.add(getCheckboxMenuItem(DevMenuItem.VIEW_ALL, MatchUtil.getGameView().canViewAllCards()));
menu.add(getCheckboxMenuItem(DevMenuItem.PLAY_UNLIMITED_LANDS, MatchUtil.getHumanController().canPlayUnlimitedLands()));
menu.add(getCheckboxMenuItem(DevMenuItem.VIEW_ALL, MatchUtil.getHumanController().mayLookAtAllCards()));
menu.add(getMenuItem(DevMenuItem.ADD_COUNTER));
menu.addSeparator();
menu.add(getMenuItem(DevMenuItem.TAP_PERMANENT));

View File

@@ -83,7 +83,7 @@ public final class GameMenu {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
MatchUtil.getGameView().tryUndoLastAction();
MatchUtil.getHumanController().tryUndoLastAction();
}
};
}
@@ -201,7 +201,7 @@ public final class GameMenu {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final VAutoYields autoYields = new VAutoYields(MatchUtil.getGameView());
final VAutoYields autoYields = new VAutoYields(MatchUtil.getHumanController());
autoYields.showAutoYields();
}
};

View File

@@ -25,6 +25,8 @@ import javax.swing.JPanel;
import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.gui.CardPicturePanel;
import forge.gui.WrapLayout;
import forge.gui.framework.DragCell;
@@ -35,8 +37,6 @@ import forge.match.MatchUtil;
import forge.screens.match.controllers.CAntes;
import forge.toolbox.FLabel;
import forge.toolbox.FScrollPane;
import forge.view.CardView;
import forge.view.PlayerView;
/**
* Assembles Swing components of card ante area.
@@ -121,15 +121,15 @@ public enum VAntes implements IVDoc<CAntes> {
pnl.removeAll();
for (final PlayerView p : MatchUtil.getGameView().getPlayers()) {
for (final CardView c : p.getAnteCards()) {
final AntePanel pnlTemp = new AntePanel(c);
allAntes.add(pnlTemp);
Iterable<CardView> ante = p.getAnte();
if (ante != null) {
for (final CardView c : ante) {
final AntePanel pnlTemp = new AntePanel(c);
allAntes.add(pnlTemp);
pnl.add(pnlTemp);
}
}
}
for(AntePanel ap : allAntes) {
pnl.add(ap);
}
}
//========= Private class handling

View File

@@ -20,6 +20,7 @@ package forge.screens.match.views;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import forge.game.player.PlayerView;
import forge.game.zone.ZoneType;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
@@ -28,7 +29,6 @@ import forge.gui.framework.IVDoc;
import forge.screens.match.controllers.CCommand;
import forge.toolbox.FScrollPane;
import forge.toolbox.FSkin;
import forge.view.PlayerView;
import forge.view.arcane.PlayArea;
/**

View File

@@ -28,6 +28,7 @@ import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import net.miginfocom.swing.MigLayout;
import forge.game.player.PlayerView;
import forge.game.zone.ZoneType;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
@@ -41,7 +42,6 @@ import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.toolbox.special.PhaseIndicator;
import forge.toolbox.special.PlayerDetailsPanel;
import forge.view.PlayerView;
import forge.view.arcane.PlayArea;
/**

View File

@@ -20,13 +20,13 @@ package forge.screens.match.views;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;
import forge.game.player.PlayerView;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
import forge.gui.framework.EDocID;
import forge.gui.framework.IVDoc;
import forge.screens.match.controllers.CHand;
import forge.toolbox.FScrollPane;
import forge.view.PlayerView;
import forge.view.arcane.HandArea;
/**

View File

@@ -27,6 +27,7 @@ import com.google.common.collect.Lists;
import forge.game.GameLogEntry;
import forge.game.GameLogEntryType;
import forge.game.GameView;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
import forge.gui.framework.EDocID;
@@ -38,8 +39,6 @@ import forge.screens.match.GameLogPanel;
import forge.screens.match.controllers.CLog;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinFont;
import forge.view.IGameView;
import forge.view.LocalGameView;
/**
* Assembles Swing components of game log report.
@@ -55,7 +54,7 @@ public enum VLog implements IVDoc<CLog> {
private final List<GameLogEntry> displayedLogEntries = Lists.newArrayList();
// Used to determine when a new game has started.
private IGameView gameLogModel = null;
private GameView gameLogModel = null;
// Fields used with interface IVDoc
private DragCell parentCell;
@@ -128,7 +127,7 @@ public enum VLog implements IVDoc<CLog> {
*/
public void updateConsole() {
if (isGameLogConsoleVisible()) {
LocalGameView model = MatchUtil.getGameView();
GameView model = MatchUtil.getGameView();
resetDisplayIfNewGame(model);
displayNewGameLogEntries(model);
// Important : refreshLayout() needs to be called every update.
@@ -140,7 +139,7 @@ public enum VLog implements IVDoc<CLog> {
return parentCell.getSelected().equals(this);
}
private void resetDisplayIfNewGame(final IGameView model) {
private void resetDisplayIfNewGame(final GameView model) {
if (this.gameLogModel != model) {
gameLog.reset();
this.displayedLogEntries.clear();
@@ -167,17 +166,17 @@ public enum VLog implements IVDoc<CLog> {
p.add(gameLog, "w 10:100%, h 100%");
}
private void displayNewGameLogEntries(final IGameView model) {
private void displayNewGameLogEntries(final GameView model) {
List<GameLogEntry> newLogEntries = Lists.reverse(getNewGameLogEntries(model));
if (newLogEntries.size() > 0) {
addNewLogEntriesToJPanel(newLogEntries);
}
}
private List<GameLogEntry> getNewGameLogEntries(final IGameView model) {
private List<GameLogEntry> getNewGameLogEntries(final GameView model) {
String logEntryType = FModel.getPreferences().getPref(FPref.DEV_LOG_ENTRY_TYPE);
GameLogEntryType logVerbosityFilter = GameLogEntryType.valueOf(logEntryType);
List<GameLogEntry> logEntries = model.getLogEntries(logVerbosityFilter);
List<GameLogEntry> logEntries = model.getGameLog().getLogEntries(logVerbosityFilter);
// Set subtraction - remove all log entries from new list which are already displayed.
logEntries.removeAll(this.displayedLogEntries);
return logEntries;

View File

@@ -28,6 +28,8 @@ import javax.swing.ScrollPaneConstants;
import com.google.common.collect.Lists;
import net.miginfocom.swing.MigLayout;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
import forge.gui.framework.EDocID;
@@ -39,8 +41,6 @@ import forge.screens.match.controllers.CPlayers;
import forge.toolbox.FScrollPanel;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedLabel;
import forge.view.CardView;
import forge.view.PlayerView;
/**
* Assembles Swing components of players report.
@@ -165,14 +165,16 @@ public enum VPlayers implements IVDoc<CPlayers> {
temp[5].setText("");
}
if (FModel.getPreferences().getPrefBoolean(FPref.UI_ANTE)) {
final List<CardView> list = p0.getAnteCards();
final Iterable<CardView> list = p0.getAnte();
final StringBuilder sb = new StringBuilder();
sb.append("Ante'd: ");
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
if (i < (list.size() - 1)) {
boolean needDelim = false;
for (CardView cv : list) {
if (needDelim) {
sb.append(", ");
}
else { needDelim = true; }
sb.append(cv);
}
temp[6].setText(sb.toString());
}

View File

@@ -26,8 +26,6 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.List;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.ScrollPaneConstants;
@@ -38,11 +36,16 @@ import net.miginfocom.swing.MigLayout;
import forge.ImageCache;
import forge.card.CardDetailUtil;
import forge.card.CardDetailUtil.DetailColors;
import forge.game.GameView;
import forge.game.card.CardView;
import forge.game.player.PlayerView;
import forge.game.spellability.StackItemView;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
import forge.gui.framework.EDocID;
import forge.gui.framework.IVDoc;
import forge.match.MatchUtil;
import forge.player.PlayerControllerHuman;
import forge.screens.match.CMatchUI;
import forge.screens.match.controllers.CPrompt;
import forge.screens.match.controllers.CStack;
@@ -50,11 +53,7 @@ import forge.toolbox.FMouseAdapter;
import forge.toolbox.FScrollPanel;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedTextArea;
import forge.view.CardView;
import forge.view.IGameView;
import forge.view.LocalGameView;
import forge.view.PlayerView;
import forge.view.StackItemView;
import forge.util.FCollection;
import forge.view.arcane.CardPanel;
/**
@@ -63,7 +62,6 @@ import forge.view.arcane.CardPanel;
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
*/
public enum VStack implements IVDoc<CStack> {
/** */
SINGLETON_INSTANCE;
// Fields used with interface IVDoc
@@ -80,65 +78,40 @@ public enum VStack implements IVDoc<CStack> {
private VStack() {
}
//========= Overridden methods
/* (non-Javadoc)
* @see forge.gui.framework.IVDoc#populate()
*/
@Override
public void populate() {
parentCell.getBody().setLayout(new MigLayout("insets 3px, gap 0"));
parentCell.getBody().add(scroller, "grow, push");
}
/* (non-Javadoc)
* @see forge.gui.framework.IVDoc#setParentCell()
*/
@Override
public void setParentCell(final DragCell cell0) {
this.parentCell = cell0;
parentCell = cell0;
}
/* (non-Javadoc)
* @see forge.gui.framework.IVDoc#getParentCell()
*/
@Override
public DragCell getParentCell() {
return this.parentCell;
return parentCell;
}
/* (non-Javadoc)
* @see forge.gui.framework.IVDoc#getDocumentID()
*/
@Override
public EDocID getDocumentID() {
return EDocID.REPORT_STACK;
}
/* (non-Javadoc)
* @see forge.gui.framework.IVDoc#getTabLabel()
*/
@Override
public DragTab getTabLabel() {
return tab;
}
/* (non-Javadoc)
* @see forge.gui.framework.IVDoc#getLayoutControl()
*/
@Override
public CStack getLayoutControl() {
return CStack.SINGLETON_INSTANCE;
}
//========== Observer update methods
/**
* @param models
* @param viewer */
public void updateStack() {
final LocalGameView model = MatchUtil.getGameView();
final List<StackItemView> items = model.getStack();
final GameView model = MatchUtil.getGameView();
final FCollection<StackItemView>.FCollectionView items = model.getStack();
tab.setText("Stack : " + items.size());
// No need to update the rest unless it's showing
@@ -155,7 +128,7 @@ public enum VStack implements IVDoc<CStack> {
//update the Card Picture/Detail when the spell is added to the stack
if (isFirst) {
isFirst = false;
CMatchUI.SINGLETON_INSTANCE.setCard(item.getSource());
CMatchUI.SINGLETON_INSTANCE.setCard(item.getSourceCard());
}
}
@@ -178,10 +151,10 @@ public enum VStack implements IVDoc<CStack> {
private final CardView sourceCard;
public StackInstanceTextArea(final LocalGameView gameView, final StackItemView item) {
sourceCard = item.getSource();
public StackInstanceTextArea(final GameView gameView, final StackItemView item) {
sourceCard = item.getSourceCard();
final PlayerView localPlayer = gameView.getPlayerView(MatchUtil.getCurrentPlayer(), false);
final PlayerView localPlayer = PlayerView.get(MatchUtil.getCurrentPlayer());
final String txt = (item.isOptionalTrigger() && item.getActivatingPlayer().equals(localPlayer)
? "(OPTIONAL) " : "") + item.getText();
@@ -200,7 +173,7 @@ public enum VStack implements IVDoc<CStack> {
@Override
public void mouseEntered(final MouseEvent e) {
if (!txt.startsWith("Morph ")) {
CMatchUI.SINGLETON_INSTANCE.setCard(item.getSource());
CMatchUI.SINGLETON_INSTANCE.setCard(item.getSourceCard());
}
}
});
@@ -216,13 +189,13 @@ public enum VStack implements IVDoc<CStack> {
onClick(e);
}
private void onClick(MouseEvent e) {
abilityMenu.setStackInstance(gameView, item, localPlayer);
abilityMenu.setStackInstance(MatchUtil.getHumanController(), item, localPlayer);
abilityMenu.show(e.getComponent(), e.getX(), e.getY());
}
});
}
final DetailColors color = CardDetailUtil.getBorderColor(item.getSource().getOriginal());
final DetailColors color = CardDetailUtil.getBorderColor(item.getSourceCard().getOriginal());
setBackground(new Color(color.r, color.g, color.b));
setForeground(FSkin.getHighContrastColor(getBackground()));
}
@@ -248,7 +221,7 @@ public enum VStack implements IVDoc<CStack> {
private final JCheckBoxMenuItem jmiAutoYield;
private final JCheckBoxMenuItem jmiAlwaysYes;
private final JCheckBoxMenuItem jmiAlwaysNo;
private IGameView game;
private PlayerControllerHuman humanController;
private StackItemView item;
private Integer triggerID = 0;
@@ -259,9 +232,9 @@ public enum VStack implements IVDoc<CStack> {
@Override
public void actionPerformed(ActionEvent arg0) {
final String key = item.getKey();
final boolean autoYield = game.shouldAutoYield(key);
game.setShouldAutoYield(key, !autoYield);
if (!autoYield && game.peekStack() == item) {
final boolean autoYield = humanController.shouldAutoYield(key);
humanController.setShouldAutoYield(key, !autoYield);
if (!autoYield && MatchUtil.getGameView().peekStack() == item) {
//auto-pass priority if ability is on top of stack
CPrompt.SINGLETON_INSTANCE.passPriority();
}
@@ -273,14 +246,14 @@ public enum VStack implements IVDoc<CStack> {
jmiAlwaysYes.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (game.shouldAlwaysAcceptTrigger(triggerID)) {
game.setShouldAlwaysAskTrigger(triggerID);
if (humanController.shouldAlwaysAcceptTrigger(triggerID)) {
humanController.setShouldAlwaysAskTrigger(triggerID);
}
else {
game.setShouldAlwaysAcceptTrigger(triggerID);
if (game.peekStack() == item) {
humanController.setShouldAlwaysAcceptTrigger(triggerID);
if (MatchUtil.getGameView().peekStack() == item) {
//auto-yes if ability is on top of stack
game.confirm();
humanController.confirm();
}
}
}
@@ -291,14 +264,14 @@ public enum VStack implements IVDoc<CStack> {
jmiAlwaysNo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (game.shouldAlwaysDeclineTrigger(triggerID)) {
game.setShouldAlwaysAskTrigger(triggerID);
if (humanController.shouldAlwaysDeclineTrigger(triggerID)) {
humanController.setShouldAlwaysAskTrigger(triggerID);
}
else {
game.setShouldAlwaysDeclineTrigger(triggerID);
if (game.peekStack() == item) {
humanController.setShouldAlwaysDeclineTrigger(triggerID);
if (MatchUtil.getGameView().peekStack() == item) {
//auto-no if ability is on top of stack
game.confirm();
humanController.confirm();
}
}
}
@@ -306,16 +279,16 @@ public enum VStack implements IVDoc<CStack> {
add(jmiAlwaysNo);
}
public void setStackInstance(final IGameView game, final StackItemView item, final PlayerView localPlayer) {
this.game = game;
this.item = item;
public void setStackInstance(final PlayerControllerHuman humanController0, final StackItemView item0, final PlayerView localPlayer0) {
humanController = humanController0;
item = item0;
triggerID = Integer.valueOf(item.getSourceTrigger());
jmiAutoYield.setSelected(game.shouldAutoYield(item.getKey()));
jmiAutoYield.setSelected(humanController.shouldAutoYield(item.getKey()));
if (item.isOptionalTrigger() && item.getActivatingPlayer().equals(localPlayer)) {
jmiAlwaysYes.setSelected(game.shouldAlwaysAcceptTrigger(triggerID));
jmiAlwaysNo.setSelected(game.shouldAlwaysDeclineTrigger(triggerID));
if (item.isOptionalTrigger() && item.getActivatingPlayer().equals(localPlayer0)) {
jmiAlwaysYes.setSelected(humanController.shouldAlwaysAcceptTrigger(triggerID));
jmiAlwaysNo.setSelected(humanController.shouldAlwaysDeclineTrigger(triggerID));
jmiAlwaysYes.setVisible(true);
jmiAlwaysNo.setVisible(true);
}

View File

@@ -23,11 +23,11 @@ import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import forge.ImageCache;
import forge.game.card.CardView.CardStateView;
import forge.model.FModel;
import forge.properties.ForgePreferences;
import forge.toolbox.CardFaceSymbols;
import forge.toolbox.FSkin.SkinIcon;
import forge.view.CardView.CardStateView;
/**
* Common image-related routines specific to Forge images.

View File

@@ -26,11 +26,11 @@ import javax.swing.JPanel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import forge.game.card.CardView;
import forge.gui.CardDetailPanel;
import forge.gui.CardPicturePanel;
import forge.item.PaperCard;
import forge.toolbox.FScrollPane;
import forge.view.ViewUtil;
/**
* A simple JPanel that shows three columns: card list, pic, and description..
@@ -40,7 +40,6 @@ import forge.view.ViewUtil;
*/
@SuppressWarnings("serial")
public class CardViewer extends JPanel {
// Data and number of choices for the list
private final List<PaperCard> list;
@@ -49,12 +48,6 @@ public class CardViewer extends JPanel {
private final CardDetailPanel detail;
private final CardPicturePanel picture;
/**
* Instantiates a new card viewer.
*
* @param list
* the list
*/
public CardViewer(final List<PaperCard> list) {
this.list = Collections.unmodifiableList(list);
this.jList = new JList<PaperCard>(new ChooserListModel());
@@ -72,7 +65,6 @@ public class CardViewer extends JPanel {
}
private class ChooserListModel extends AbstractListModel<PaperCard> {
private static final long serialVersionUID = 3871965346333840556L;
@Override
@@ -93,11 +85,9 @@ public class CardViewer extends JPanel {
// (String) jList.getSelectedValue();
if ((row >= 0) && (row < CardViewer.this.list.size())) {
final PaperCard cp = CardViewer.this.list.get(row);
CardViewer.this.detail.setCard(ViewUtil.getCardForUi(cp));
CardViewer.this.detail.setCard(CardView.getCardForUi(cp));
CardViewer.this.picture.setCard(cp);
}
}
}
}

View File

@@ -32,6 +32,8 @@ import javax.swing.Timer;
import net.miginfocom.swing.MigLayout;
import forge.assets.FSkinProp;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.gui.SOverlayUtils;
import forge.toolbox.FOverlay;
import forge.toolbox.FSkin;
@@ -39,8 +41,6 @@ import forge.toolbox.FSkin.SkinnedLabel;
import forge.toolbox.imaging.FImagePanel;
import forge.toolbox.imaging.FImagePanel.AutoSizeImageMode;
import forge.toolbox.imaging.FImageUtil;
import forge.view.CardView;
import forge.view.CardView.CardStateView;
/**
* Displays card image at its original size and correct orientation.
@@ -201,7 +201,7 @@ public enum CardZoomer {
* Displays a graphical indicator that shows whether the current card can be flipped or transformed.
*/
private void setFlipIndicator() {
if (thisCard.hasAltState()) {
if (thisCard.getAlternate() != null) {
imagePanel.setLayout(new MigLayout("insets 0, w 100%!, h 100%!"));
imagePanel.add(lblFlipcard, "pos (100% - 100px) 0");
}
@@ -276,7 +276,7 @@ public enum CardZoomer {
* Toggles between primary and alternate image associated with card if applicable.
*/
private void toggleCardImage() {
if (thisCard.hasAltState()) {
if (thisCard.getAlternate() != null) {
toggleFlipCard();
}
}

View File

@@ -18,12 +18,12 @@ import com.google.common.base.Function;
import forge.assets.FSkinProp;
import forge.card.MagicColor;
import forge.game.player.PlayerView;
import forge.gui.ForgeAction;
import forge.screens.match.controllers.CPlayers;
import forge.toolbox.FLabel;
import forge.toolbox.FSkin;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.view.PlayerView;
public class PlayerDetailsPanel extends JPanel {
private static final long serialVersionUID = 8444559244193214459L;
@@ -119,14 +119,14 @@ public class PlayerDetailsPanel extends JPanel {
* @param p0 &emsp; {@link forge.game.player.Player}
*/
public void updateZones() {
this.getLblHand().setText("" + player.getnHandCards());
this.getLblHand().setText("" + player.getHandSize());
final String handMaxToolTip = player.hasUnlimitedHandSize()
? "no maximum hand size" : String.valueOf(player.getMaxHandSize());
this.getLblHand().setToolTipText("Cards in hand (max: " + handMaxToolTip + ")");
this.getLblGraveyard().setText("" + player.getGraveCards().size());
this.getLblLibrary().setText("" + player.getnLibraryCards());
this.getLblFlashback().setText("" + player.getFlashbackCards().size());
this.getLblExile().setText("" + player.getExileCards().size());
this.getLblGraveyard().setText("" + player.getGraveyardSize());
this.getLblLibrary().setText("" + player.getLibrarySize());
this.getLblFlashback().setText("" + player.getFlashbackSize());
this.getLblExile().setText("" + player.getExileSize());
}

View File

@@ -37,6 +37,8 @@ import javax.swing.SwingUtilities;
import forge.ImageCache;
import forge.card.CardEdition;
import forge.card.mana.ManaCost;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.gui.CardContainer;
import forge.match.MatchUtil;
import forge.model.FModel;
@@ -44,8 +46,6 @@ import forge.properties.ForgePreferences.FPref;
import forge.toolbox.CardFaceSymbols;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.toolbox.IDisposable;
import forge.view.CardView;
import forge.view.CardView.CardStateView;
import forge.view.arcane.util.OutlinedLabel;
/**
@@ -117,21 +117,21 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* a {@link forge.game.card.Card} object.
*/
public CardPanel(final CardView card0) {
this.setBackground(Color.black);
this.setOpaque(false);
setBackground(Color.black);
setOpaque(false);
createCardNameOverlay();
createPTOverlay();
createCardIdOverlay();
createScaleImagePanel();
this.setCard(card0);
setCard(card0);
}
private void createScaleImagePanel() {
this.imagePanel = new ScaledImagePanel();
this.add(this.imagePanel);
this.addComponentListener(new ComponentAdapter() {
imagePanel = new ScaledImagePanel();
add(imagePanel);
addComponentListener(new ComponentAdapter() {
@Override
public void componentShown(final ComponentEvent e) {
CardPanel.this.setCard(CardPanel.this.getCard());
@@ -144,224 +144,157 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
}
private void createCardNameOverlay() {
this.titleText = new OutlinedLabel();
this.titleText.setFont(this.getFont().deriveFont(Font.BOLD, 13f));
this.titleText.setForeground(Color.white);
this.titleText.setGlow(Color.black);
this.titleText.setWrap(true);
this.add(this.titleText);
titleText = new OutlinedLabel();
titleText.setFont(getFont().deriveFont(Font.BOLD, 13f));
titleText.setForeground(Color.white);
titleText.setGlow(Color.black);
titleText.setWrap(true);
add(titleText);
}
private void createPTOverlay() {
// Power/Toughness
this.ptText = new OutlinedLabel();
this.ptText.setFont(this.getFont().deriveFont(Font.BOLD, 13f));
this.ptText.setForeground(Color.white);
this.ptText.setGlow(Color.black);
this.add(this.ptText);
ptText = new OutlinedLabel();
ptText.setFont(getFont().deriveFont(Font.BOLD, 13f));
ptText.setForeground(Color.white);
ptText.setGlow(Color.black);
add(ptText);
// Damage
this.damageText = new OutlinedLabel();
this.damageText.setFont(this.getFont().deriveFont(Font.BOLD, 15f));
this.damageText.setForeground(new Color(160,0,0));
this.damageText.setGlow(Color.white);
this.add(this.damageText);
damageText = new OutlinedLabel();
damageText.setFont(getFont().deriveFont(Font.BOLD, 15f));
damageText.setForeground(new Color(160,0,0));
damageText.setGlow(Color.white);
add(damageText);
}
private void createCardIdOverlay() {
this.cardIdText = new OutlinedLabel();
this.cardIdText.setFont(this.getFont().deriveFont(Font.BOLD, 11f));
this.cardIdText.setForeground(Color.LIGHT_GRAY);
this.cardIdText.setGlow(Color.black);
this.add(this.cardIdText);
cardIdText = new OutlinedLabel();
cardIdText.setFont(getFont().deriveFont(Font.BOLD, 11f));
cardIdText.setForeground(Color.LIGHT_GRAY);
cardIdText.setGlow(Color.black);
add(cardIdText);
}
/**
* <p>
* setImage.
* </p>
*
* @param srcImage
* a {@link java.awt.Image} object.
* @param srcImageBlurred
* a {@link java.awt.Image} object.
* @param srcImageBlurred
* a {@link java.awt.Image} object.
*/
private void setImage(final BufferedImage srcImage) {
synchronized (this.imagePanel) {
this.imagePanel.setImage(srcImage);
this.repaint();
for (final CardPanel cardPanel : this.imageLoadListeners) {
synchronized (imagePanel) {
imagePanel.setImage(srcImage);
repaint();
for (final CardPanel cardPanel : imageLoadListeners) {
cardPanel.setImage(srcImage);
cardPanel.repaint();
}
this.imageLoadListeners.clear();
imageLoadListeners.clear();
}
this.doLayout();
doLayout();
}
/**
* <p>
* setImage.
* </p>
*
* @param panel
* a {@link forge.view.arcane.CardPanel} object.
*/
public final void setImage(final CardPanel panel) {
if (panel == this) {
throw new IllegalArgumentException("Can't pass 'this' as argument to CardPanel#setImage");
}
synchronized (panel.imagePanel) {
if (panel.imagePanel.hasImage()) {
this.setImage(panel.imagePanel.getSrcImage());
setImage(panel.imagePanel.getSrcImage());
} else {
panel.imageLoadListeners.add(this);
}
}
}
/**
* <p>
* Setter for the field <code>displayEnabled</code>.
* </p>
*
* @param displayEnabled
* a boolean.
*/
public final void setDisplayEnabled(final boolean displayEnabled) {
this.displayEnabled = displayEnabled;
}
/**
* <p>
* isDisplayEnabled.
* </p>
*
* @return a boolean.
*/
public final boolean isDisplayEnabled() {
return this.displayEnabled;
return displayEnabled;
}
public final void setDisplayEnabled(final boolean displayEnabled0) {
displayEnabled = displayEnabled0;
}
/**
* <p>
* setAnimationPanel.
* </p>
*
* @param isAnimationPanel
* a boolean.
*/
public final void setAnimationPanel(final boolean isAnimationPanel) {
this.isAnimationPanel = isAnimationPanel;
public final void setAnimationPanel(final boolean isAnimationPanel0) {
isAnimationPanel = isAnimationPanel0;
}
/**
* <p>
* setSelected.
* </p>
*
* @param isSelected
* a boolean.
*/
public final void setSelected(final boolean isSelected) {
this.isSelected = isSelected;
this.repaint();
}
/**
* <p>
* isSelected.
* </p>
*
* @return a boolean.
*/
public final boolean isSelected() {
return this.isSelected;
return isSelected;
}
public final void setSelected(final boolean isSelected0) {
isSelected = isSelected0;
repaint();
}
/** {@inheritDoc} */
@Override
public final void paint(final Graphics g) {
if (!this.displayEnabled) {
if (!displayEnabled) {
return;
}
if (!this.isValid()) {
if (!isValid()) {
super.validate();
}
Graphics2D g2d = (Graphics2D) g;
if (this.getTappedAngle() > 0) {
if (getTappedAngle() > 0) {
g2d = (Graphics2D) g2d.create();
final float edgeOffset = this.cardWidth / 2f;
g2d.rotate(this.getTappedAngle(), this.cardXOffset + edgeOffset, (this.cardYOffset + this.cardHeight)
final float edgeOffset = cardWidth / 2f;
g2d.rotate(getTappedAngle(), cardXOffset + edgeOffset, (cardYOffset + cardHeight)
- edgeOffset);
}
super.paint(g2d);
}
/** {@inheritDoc} */
@Override
protected final void paintComponent(final Graphics g) {
final Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
final int cornerSize = Math.max(4, Math.round(this.cardWidth * CardPanel.ROUNDED_CORNER_SIZE));
final int offset = this.isTapped() ? 1 : 0;
final int cornerSize = Math.max(4, Math.round(cardWidth * CardPanel.ROUNDED_CORNER_SIZE));
final int offset = isTapped() ? 1 : 0;
// Magenta outline for when card was chosen to pay
if (MatchUtil.isUsedToPay(this.getCard())) {
if (MatchUtil.isUsedToPay(getCard())) {
g2d.setColor(Color.magenta);
final int n2 = Math.max(1, Math.round(2 * this.cardWidth * CardPanel.SELECTED_BORDER_SIZE));
g2d.fillRoundRect(this.cardXOffset - n2, (this.cardYOffset - n2) + offset, this.cardWidth + (n2 * 2), this.cardHeight + (n2 * 2), cornerSize + n2, cornerSize + n2);
final int n2 = Math.max(1, Math.round(2 * cardWidth * CardPanel.SELECTED_BORDER_SIZE));
g2d.fillRoundRect(cardXOffset - n2, (cardYOffset - n2) + offset, cardWidth + (n2 * 2), cardHeight + (n2 * 2), cornerSize + n2, cornerSize + n2);
}
// Green outline for hover
if (this.isSelected) {
if (isSelected) {
g2d.setColor(Color.green);
final int n = Math.max(1, Math.round(this.cardWidth * CardPanel.SELECTED_BORDER_SIZE));
g2d.fillRoundRect(this.cardXOffset - n, (this.cardYOffset - n) + offset, this.cardWidth + (n * 2), this.cardHeight + (n * 2), cornerSize + n , cornerSize + n);
final int n = Math.max(1, Math.round(cardWidth * CardPanel.SELECTED_BORDER_SIZE));
g2d.fillRoundRect(cardXOffset - n, (cardYOffset - n) + offset, cardWidth + (n * 2), cardHeight + (n * 2), cornerSize + n , cornerSize + n);
}
// Black fill - (will become outline for white bordered cards)
final int n = 0;
g2d.setColor(Color.black);
g2d.fillRoundRect(this.cardXOffset - n, (this.cardYOffset - n) + offset, this.cardWidth + (n * 2), this.cardHeight + (n * 2), cornerSize + n , cornerSize + n);
g2d.fillRoundRect(cardXOffset - n, (cardYOffset - n) + offset, cardWidth + (n * 2), cardHeight + (n * 2), cornerSize + n , cornerSize + n);
// White border if card is known to have it.
if (this.getCard() != null) {
CardEdition ed = FModel.getMagicDb().getEditions().get(this.getCard().getSetCode());
if (ed != null && ed.isWhiteBorder() && this.getCard().getOriginal().getFoilIndex() == 0) {
if (getCard() != null) {
CardEdition ed = FModel.getMagicDb().getEditions().get(getCard().getSetCode());
if (ed != null && ed.isWhiteBorder() && getCard().getOriginal().getFoilIndex() == 0) {
g2d.setColor(Color.white);
int ins = 1;
g2d.fillRoundRect(this.cardXOffset + ins, this.cardYOffset + ins, this.cardWidth - ins*2, this.cardHeight - ins*2, cornerSize-ins, cornerSize-ins);
g2d.fillRoundRect(cardXOffset + ins, cardYOffset + ins, cardWidth - ins*2, cardHeight - ins*2, cornerSize-ins, cornerSize-ins);
}
}
}
/**
* TODO: Write javadoc for this method.
* @param g
* @param manaCost
*/
private void drawManaCost(final Graphics g, ManaCost cost, int deltaY) {
int width = CardFaceSymbols.getWidth(cost);
int height = CardFaceSymbols.getHeight();
CardFaceSymbols.draw(g, cost, (this.cardXOffset + (this.cardWidth / 2)) - (width / 2), deltaY + this.cardYOffset + (this.cardHeight / 2) - height/2);
CardFaceSymbols.draw(g, cost, (cardXOffset + (cardWidth / 2)) - (width / 2), deltaY + cardYOffset + (cardHeight / 2) - height/2);
}
/** {@inheritDoc} */
@Override
protected final void paintChildren(final Graphics g) {
super.paintChildren(g);
if (this.isAnimationPanel || this.card == null) {
if (isAnimationPanel || card == null) {
return;
}
displayIconOverlay(g);
drawFoilEffect(g, card, this.cardXOffset, this.cardYOffset,
this.cardWidth, this.cardHeight, Math.round(this.cardWidth * BLACK_BORDER_SIZE));
drawFoilEffect(g, card, cardXOffset, cardYOffset,
cardWidth, cardHeight, Math.round(cardWidth * BLACK_BORDER_SIZE));
}
public static void drawFoilEffect(final Graphics g, final CardView card2, final int x, final int y, final int width, final int height, final int borderSize) {
@@ -376,15 +309,15 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
@Override
public final void doLayout() {
final int borderSize = Math.round(this.cardWidth * CardPanel.BLACK_BORDER_SIZE);
final int borderSize = Math.round(cardWidth * CardPanel.BLACK_BORDER_SIZE);
final Point imgPos = new Point(this.cardXOffset + borderSize, this.cardYOffset + borderSize);
final Dimension imgSize = new Dimension(this.cardWidth - (borderSize * 2), this.cardHeight - (borderSize * 2));
final Point imgPos = new Point(cardXOffset + borderSize, cardYOffset + borderSize);
final Dimension imgSize = new Dimension(cardWidth - (borderSize * 2), cardHeight - (borderSize * 2));
this.imagePanel.setLocation(imgPos);
this.imagePanel.setSize(imgSize);
imagePanel.setLocation(imgPos);
imagePanel.setSize(imgSize);
boolean showText = !this.imagePanel.hasImage() || !this.isAnimationPanel;
boolean showText = !imagePanel.hasImage() || !isAnimationPanel;
displayCardNameOverlay(showText && showCardNameOverlay(), imgSize, imgPos);
displayPTOverlay(showText && showCardPowerOverlay(), imgSize, imgPos);
@@ -393,33 +326,33 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
private void displayCardIdOverlay(boolean isVisible, Dimension imgSize, Point imgPos) {
if (isVisible) {
final Dimension idSize = this.cardIdText.getPreferredSize();
this.cardIdText.setSize(idSize.width, idSize.height);
final Dimension idSize = cardIdText.getPreferredSize();
cardIdText.setSize(idSize.width, idSize.height);
final int idX = Math.round(imgSize.width * (24f / 480));
final int idY = Math.round(imgSize.height * (650f / 680)) - 8;
this.cardIdText.setLocation(imgPos.x + idX, imgPos.y + idY);
cardIdText.setLocation(imgPos.x + idX, imgPos.y + idY);
}
this.cardIdText.setVisible(isVisible);
cardIdText.setVisible(isVisible);
}
private void displayPTOverlay(boolean isVisible, Dimension imgSize, Point imgPos) {
if (isVisible) {
final int rightLine = Math.round(imgSize.width * (412f / 480)) + 3;
// Power
final Dimension ptSize = this.ptText.getPreferredSize();
this.ptText.setSize(ptSize.width, ptSize.height);
final Dimension ptSize = ptText.getPreferredSize();
ptText.setSize(ptSize.width, ptSize.height);
final int ptX = rightLine - ptSize.width/2;
final int ptY = Math.round(imgSize.height * (650f / 680)) - 10;
this.ptText.setLocation(imgPos.x + ptX, imgPos.y + ptY);
ptText.setLocation(imgPos.x + ptX, imgPos.y + ptY);
// Toughness
final Dimension dmgSize = this.damageText.getPreferredSize();
this.damageText.setSize(dmgSize.width, dmgSize.height);
final Dimension dmgSize = damageText.getPreferredSize();
damageText.setSize(dmgSize.width, dmgSize.height);
final int dmgX = rightLine - dmgSize.width / 2;
final int dmgY = ptY - 16;
this.damageText.setLocation(imgPos.x + dmgX, imgPos.y + dmgY);
damageText.setLocation(imgPos.x + dmgX, imgPos.y + dmgY);
}
this.ptText.setVisible(isVisible);
this.damageText.setVisible(isVisible);
ptText.setVisible(isVisible);
damageText.setVisible(isVisible);
}
private void displayCardNameOverlay(boolean isVisible, Dimension imgSize, Point imgPos) {
@@ -427,13 +360,13 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
final int titleX = Math.round(imgSize.width * (24f / 480));
final int titleY = Math.round(imgSize.height * (54f / 640)) - 15;
final int titleH = Math.round(imgSize.height * (360f / 640));
this.titleText.setBounds(imgPos.x + titleX, imgPos.y + titleY + 2, imgSize.width - 2 * titleX, titleH - titleY);
titleText.setBounds(imgPos.x + titleX, imgPos.y + titleY + 2, imgSize.width - 2 * titleX, titleH - titleY);
}
this.titleText.setVisible(isVisible);
titleText.setVisible(isVisible);
}
private void displayIconOverlay(final Graphics g) {
if (showCardManaCostOverlay() && this.cardWidth < 200) {
if (showCardManaCostOverlay() && cardWidth < 200) {
final boolean showSplitMana = card.isSplitCard();
if (!showSplitMana) {
drawManaCost(g, card.getOriginal().getManaCost(), 0);
@@ -444,26 +377,28 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
}
int number = 0;
for (final Integer i : card.getCounters().values()) {
number += i.intValue();
if (card.getCounters() != null) {
for (final Integer i : card.getCounters().values()) {
number += i.intValue();
}
}
final int counters = number;
final int yCounters = (this.cardYOffset + this.cardHeight) - (this.cardHeight / 3) - 40;
final int yCounters = (cardYOffset + cardHeight) - (cardHeight / 3) - 40;
if (counters == 1) {
CardFaceSymbols.drawSymbol("counters1", g, this.cardXOffset - 15, yCounters);
CardFaceSymbols.drawSymbol("counters1", g, cardXOffset - 15, yCounters);
} else if (counters == 2) {
CardFaceSymbols.drawSymbol("counters2", g, this.cardXOffset - 15, yCounters);
CardFaceSymbols.drawSymbol("counters2", g, cardXOffset - 15, yCounters);
} else if (counters == 3) {
CardFaceSymbols.drawSymbol("counters3", g, this.cardXOffset - 15, yCounters);
CardFaceSymbols.drawSymbol("counters3", g, cardXOffset - 15, yCounters);
} else if (counters > 3) {
CardFaceSymbols.drawSymbol("countersMulti", g, this.cardXOffset - 15, yCounters);
CardFaceSymbols.drawSymbol("countersMulti", g, cardXOffset - 15, yCounters);
}
final int combatXSymbols = (this.cardXOffset + (this.cardWidth / 4)) - 16;
final int stateXSymbols = (this.cardXOffset + (this.cardWidth / 2)) - 16;
final int ySymbols = (this.cardYOffset + this.cardHeight) - (this.cardHeight / 8) - 16;
final int combatXSymbols = (cardXOffset + (cardWidth / 4)) - 16;
final int stateXSymbols = (cardXOffset + (cardWidth / 2)) - 16;
final int ySymbols = (cardYOffset + cardHeight) - (cardHeight / 8) - 16;
if (card.isAttacking()) {
CardFaceSymbols.drawSymbol("attack", g, combatXSymbols, ySymbols);
@@ -481,131 +416,70 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
}
if (MatchUtil.isUsedToPay(card)) {
CardFaceSymbols.drawSymbol("sacrifice", g, (this.cardXOffset + (this.cardWidth / 2)) - 20,
(this.cardYOffset + (this.cardHeight / 2)) - 20);
CardFaceSymbols.drawSymbol("sacrifice", g, (cardXOffset + (cardWidth / 2)) - 20,
(cardYOffset + (cardHeight / 2)) - 20);
}
}
@Override
public final String toString() {
return this.getCard().toString();
return getCard().toString();
}
/**
* <p>
* setCardBounds.
* </p>
*
* @param x
* a int.
* @param y
* a int.
* @param width
* a int.
* @param height
* a int.
*/
public final void setCardBounds(final int x, final int y, int width, int height) {
this.cardWidth = width;
this.cardHeight = height;
cardWidth = width;
cardHeight = height;
final int rotCenterX = Math.round(width / 2f);
final int rotCenterY = height - rotCenterX;
final int rotCenterToTopCorner = Math.round(width * CardPanel.ROT_CENTER_TO_TOP_CORNER);
final int rotCenterToBottomCorner = Math.round(width * CardPanel.ROT_CENTER_TO_BOTTOM_CORNER);
final int xOffset = rotCenterX - rotCenterToBottomCorner;
final int yOffset = rotCenterY - rotCenterToTopCorner;
this.cardXOffset = -xOffset;
this.cardYOffset = -yOffset;
cardXOffset = -xOffset;
cardYOffset = -yOffset;
width = -xOffset + rotCenterX + rotCenterToTopCorner;
height = -yOffset + rotCenterY + rotCenterToBottomCorner;
this.setBounds(x + xOffset, y + yOffset, width, height);
setBounds(x + xOffset, y + yOffset, width, height);
}
/**
* <p>
* repaint.
* </p>
*/
@Override
public final void repaint() {
final Rectangle b = this.getBounds();
final Rectangle b = getBounds();
final JRootPane rootPane = SwingUtilities.getRootPane(this);
if (rootPane == null) {
return;
}
final Point p = SwingUtilities.convertPoint(this.getParent(), b.x, b.y, rootPane);
final Point p = SwingUtilities.convertPoint(getParent(), b.x, b.y, rootPane);
rootPane.repaint(p.x, p.y, b.width, b.height);
}
/**
* <p>
* getCardX.
* </p>
*
* @return a int.
*/
public final int getCardX() {
return this.getX() + this.cardXOffset;
return getX() + cardXOffset;
}
/**
* <p>
* getCardY.
* </p>
*
* @return a int.
*/
public final int getCardY() {
return this.getY() + this.cardYOffset;
return getY() + cardYOffset;
}
/**
* <p>
* Getter for the field <code>cardWidth</code>.
* </p>
*
* @return a int.
*/
public final int getCardWidth() {
return this.cardWidth;
return cardWidth;
}
/**
* <p>
* Getter for the field <code>cardHeight</code>.
* </p>
*
* @return a int.
*/
public final int getCardHeight() {
return this.cardHeight;
return cardHeight;
}
/**
* <p>
* getCardLocation.
* </p>
*
* @return a {@link java.awt.Point} object.
*/
public final Point getCardLocation() {
final Point p = this.getLocation();
p.x += this.cardXOffset;
p.y += this.cardYOffset;
final Point p = getLocation();
p.x += cardXOffset;
p.y += cardYOffset;
return p;
}
/**
* <p>
* getCardLocationOnScreen.
* </p>
*
* @return a {@link java.awt.Point} object.
*/
public final Point getCardLocationOnScreen() {
final Point p = this.getLocationOnScreen();
p.x += this.cardXOffset;
p.y += this.cardYOffset;
final Point p = getLocationOnScreen();
p.x += cardXOffset;
p.y += cardYOffset;
return p;
}
@@ -615,13 +489,13 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
}
// Card name overlay
this.titleText.setText(card.getOriginal().getName());
titleText.setText(card.getOriginal().getName());
int damage = card.getDamage();
this.damageText.setText(damage > 0 ? "\u00BB " + String.valueOf(damage) + " \u00AB" : "");
damageText.setText(damage > 0 ? "\u00BB " + String.valueOf(damage) + " \u00AB" : "");
// Card Id overlay
this.cardIdText.setText(Integer.toString(card.getId()));
cardIdText.setText(Integer.toString(card.getId()));
}
public final void updatePTOverlay() {
@@ -637,46 +511,41 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
else if (state.isPlaneswalker()) {
sPt = String.valueOf(state.getLoyalty());
}
this.ptText.setText(sPt);
ptText.setText(sPt);
}
/**
* Gets the card.
*
* @return the card
*/
@Override
public final CardView getCard() {
return this.card;
return card;
}
/** {@inheritDoc} */
@Override
public final void setCard(final CardView cardView) {
if ((this.getCard() != null) && this.getCard().equals(cardView) && this.isAnimationPanel
&& this.imagePanel.hasImage()) {
if ((getCard() != null) && getCard().equals(cardView) && isAnimationPanel
&& imagePanel.hasImage()) {
return;
}
this.card = cardView;
card = cardView;
if (this.imagePanel == null) {
if (imagePanel == null) {
return;
}
final BufferedImage image = cardView == null ? null : ImageCache.getImage(cardView, imagePanel.getWidth(), imagePanel.getHeight());
this.updateText();
this.updatePTOverlay();
updateText();
updatePTOverlay();
this.setImage(image);
setImage(image);
}
public void dispose() {
this.attachedToPanel = null;
this.attachedPanels = null;
this.imagePanel.setImage(null);
this.imagePanel = null;
this.card = null;
attachedToPanel = null;
attachedPanels = null;
imagePanel.setImage(null);
imagePanel = null;
card = null;
}
/**
@@ -704,7 +573,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* @return the attachedToPanel
*/
public final CardPanel getAttachedToPanel() {
return this.attachedToPanel;
return attachedToPanel;
}
/**
@@ -714,7 +583,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* the attachedToPanel to set
*/
public final void setAttachedToPanel(final CardPanel attachedToPanel0) {
this.attachedToPanel = attachedToPanel0;
attachedToPanel = attachedToPanel0;
}
/**
@@ -723,7 +592,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* @return the attachedPanels
*/
public final List<CardPanel> getAttachedPanels() {
return this.attachedPanels;
return attachedPanels;
}
/**
@@ -733,7 +602,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* the attachedPanels to set
*/
public final void setAttachedPanels(final List<CardPanel> attachedPanels0) {
this.attachedPanels = attachedPanels0;
attachedPanels = attachedPanels0;
}
/**
@@ -742,7 +611,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* @return the tapped
*/
public final boolean isTapped() {
return this.tapped;
return tapped;
}
/**
@@ -752,7 +621,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* the tapped to set
*/
public final void setTapped(final boolean tapped0) {
this.tapped = tapped0;
tapped = tapped0;
}
/**
@@ -761,7 +630,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* @return the tappedAngle
*/
public final double getTappedAngle() {
return this.tappedAngle;
return tappedAngle;
}
/**
@@ -771,7 +640,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
* the tappedAngle to set
*/
public final void setTappedAngle(final double tappedAngle0) {
this.tappedAngle = tappedAngle0;
tappedAngle = tappedAngle0;
}
/**
@@ -788,7 +657,7 @@ public class CardPanel extends SkinnedPanel implements CardContainer, IDisposabl
}
private boolean isShowingOverlays() {
return isPreferenceEnabled(FPref.UI_SHOW_CARD_OVERLAYS) && this.card != null;
return isPreferenceEnabled(FPref.UI_SHOW_CARD_OVERLAYS) && card != null;
}
private boolean showCardNameOverlay() {

View File

@@ -30,11 +30,11 @@ import java.util.List;
import javax.swing.SwingUtilities;
import forge.FThreads;
import forge.game.card.CardView;
import forge.screens.match.CMatchUI;
import forge.toolbox.FScrollPane;
import forge.toolbox.FSkin.SkinnedPanel;
import forge.toolbox.special.CardZoomer;
import forge.view.CardView;
import forge.view.arcane.util.CardPanelMouseListener;
/**

View File

@@ -28,14 +28,14 @@ import java.util.List;
import com.google.common.collect.Lists;
import forge.FThreads;
import forge.game.card.CardView;
import forge.game.card.CardView.CardStateView;
import forge.game.player.PlayerView;
import forge.game.zone.ZoneType;
import forge.screens.match.CMatchUI;
import forge.screens.match.controllers.CPrompt;
import forge.toolbox.FScrollPane;
import forge.toolbox.MouseTriggerEvent;
import forge.view.CardView;
import forge.view.CardView.CardStateView;
import forge.view.PlayerView;
import forge.view.arcane.util.Animation;
import forge.view.arcane.util.CardPanelMouseListener;
@@ -124,7 +124,7 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
break;
}
if (!panel.getAttachedPanels().isEmpty()
|| !panel.getCard().getCounters().equals(firstPanel.getCard().getCounters())
|| !panel.getCard().hasSameCounters(firstPanel.getCard())
|| firstPanel.getCard().isEnchanted() || (stack.size() == this.landStackMax)) {
// If this land has attachments or the stack is full,
// put it to the right.
@@ -180,7 +180,7 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
final String firstText = firstState.getText();
if (!panel.getAttachedPanels().isEmpty()
|| !card.getCounters().equals(firstPanel.getCard().getCounters())
|| !card.hasSameCounters(firstPanel.getCard())
|| (card.isSick() != firstCard.isSick())
|| (state.getPower() != firstState.getPower())
|| (state.getToughness() != firstState.getToughness())
@@ -670,27 +670,33 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
}
toPanel.getAttachedPanels().clear();
final Iterable<CardView> enchants = card.getEnchantedBy();
for (final CardView e : enchants) {
final CardPanel cardE = getCardPanel(e.getId());
if (cardE != null) {
toPanel.getAttachedPanels().add(cardE);
if (card.isEnchanted()) {
final Iterable<CardView> enchants = card.getEnchantedBy();
for (final CardView e : enchants) {
final CardPanel cardE = getCardPanel(e.getId());
if (cardE != null) {
toPanel.getAttachedPanels().add(cardE);
}
}
}
final Iterable<CardView> equips = card.getEquippedBy();
for (final CardView e : equips) {
final CardPanel cardE = getCardPanel(e.getId());
if (cardE != null) {
toPanel.getAttachedPanels().add(cardE);
if (card.isEquipped()) {
final Iterable<CardView> equips = card.getEquippedBy();
for (final CardView e : equips) {
final CardPanel cardE = getCardPanel(e.getId());
if (cardE != null) {
toPanel.getAttachedPanels().add(cardE);
}
}
}
final Iterable<CardView> fortifications = card.getFortifiedBy();
for (final CardView f : fortifications) {
final CardPanel cardE = getCardPanel(f.getId());
if (cardE != null) {
toPanel.getAttachedPanels().add(cardE);
if (card.isFortified()) {
final Iterable<CardView> fortifications = card.getFortifiedBy();
for (final CardView f : fortifications) {
final CardPanel cardE = getCardPanel(f.getId());
if (cardE != null) {
toPanel.getAttachedPanels().add(cardE);
}
}
}
@@ -773,7 +779,7 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
final CardStateView thisState = thisCard.getOriginal();
if (otherState.getName().equals(thisState.getName()) && s.size() < othersStackMax) {
if (panel.getAttachedPanels().isEmpty()
&& thisCard.getCounters().equals(otherCard.getCounters())
&& thisCard.hasSameCounters(otherCard)
&& (thisCard.isSick() == otherCard.isSick())
&& (thisCard.isCloned() == otherCard.isCloned())) {
s.add(panel);