mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
PlayArea is intialized with a r/o list that is a reference to all cards in given zone.
This commit is contained in:
@@ -18,7 +18,6 @@
|
||||
package forge.gui;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Rectangle;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.FileInputStream;
|
||||
@@ -61,8 +60,6 @@ import forge.game.zone.ZoneType;
|
||||
import forge.item.CardDb;
|
||||
import forge.item.CardPrinted;
|
||||
import forge.item.IPaperCard;
|
||||
import forge.view.arcane.PlayArea;
|
||||
import forge.view.arcane.util.Animation;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -255,91 +252,6 @@ public final class GuiDisplayUtil {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* setupPlayZone.
|
||||
* </p>
|
||||
*
|
||||
* @param p
|
||||
* a {@link forge.view.arcane.PlayArea} object.
|
||||
* @param c
|
||||
* an array of {@link forge.Card} objects.
|
||||
*/
|
||||
public static void setupPlayZone(final PlayArea p, final List<Card> c) {
|
||||
List<Card> tmp, diff;
|
||||
tmp = new ArrayList<Card>();
|
||||
for (final forge.view.arcane.CardPanel cpa : p.getCardPanels()) {
|
||||
tmp.add(cpa.getGameCard());
|
||||
}
|
||||
diff = new ArrayList<Card>(tmp);
|
||||
diff.removeAll(c);
|
||||
if (diff.size() == p.getCardPanels().size()) {
|
||||
p.clear();
|
||||
} else {
|
||||
for (final Card card : diff) {
|
||||
p.removeCardPanel(p.getCardPanel(card.getUniqueNumber()));
|
||||
}
|
||||
}
|
||||
diff = new ArrayList<Card>(c);
|
||||
diff.removeAll(tmp);
|
||||
|
||||
List<forge.view.arcane.CardPanel> panelList = new ArrayList<forge.view.arcane.CardPanel>();
|
||||
for (final Card card : diff) {
|
||||
panelList.add(p.addCard(card));
|
||||
}
|
||||
if (!diff.isEmpty()) {
|
||||
p.doLayout();
|
||||
}
|
||||
for (final forge.view.arcane.CardPanel toPanel : panelList) {
|
||||
p.scrollRectToVisible(new Rectangle(toPanel.getCardX(), toPanel.getCardY(), toPanel
|
||||
.getCardWidth(), toPanel.getCardHeight()));
|
||||
Animation.moveCard(toPanel);
|
||||
}
|
||||
|
||||
for (final Card card : c) {
|
||||
final forge.view.arcane.CardPanel toPanel = p.getCardPanel(card.getUniqueNumber());
|
||||
if (card.isTapped()) {
|
||||
toPanel.setTapped(true);
|
||||
toPanel.setTappedAngle(forge.view.arcane.CardPanel.TAPPED_ANGLE);
|
||||
} else {
|
||||
toPanel.setTapped(false);
|
||||
toPanel.setTappedAngle(0);
|
||||
}
|
||||
toPanel.getAttachedPanels().clear();
|
||||
if (card.isEnchanted()) {
|
||||
final ArrayList<Card> enchants = card.getEnchantedBy();
|
||||
for (final Card e : enchants) {
|
||||
final forge.view.arcane.CardPanel cardE = p.getCardPanel(e.getUniqueNumber());
|
||||
if (cardE != null) {
|
||||
toPanel.getAttachedPanels().add(cardE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (card.isEquipped()) {
|
||||
final ArrayList<Card> enchants = card.getEquippedBy();
|
||||
for (final Card e : enchants) {
|
||||
final forge.view.arcane.CardPanel cardE = p.getCardPanel(e.getUniqueNumber());
|
||||
if (cardE != null) {
|
||||
toPanel.getAttachedPanels().add(cardE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (card.isEnchantingCard()) {
|
||||
toPanel.setAttachedToPanel(p.getCardPanel(card.getEnchantingCard().getUniqueNumber()));
|
||||
} else if (card.isEquipping()) {
|
||||
toPanel.setAttachedToPanel(p.getCardPanel(card.getEquipping().get(0).getUniqueNumber()));
|
||||
} else {
|
||||
toPanel.setAttachedToPanel(null);
|
||||
}
|
||||
|
||||
toPanel.setCard(toPanel.getGameCard());
|
||||
}
|
||||
p.invalidate();
|
||||
p.repaint();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* updateGUI.
|
||||
|
||||
@@ -29,9 +29,7 @@ import forge.Card;
|
||||
|
||||
import forge.Command;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.zone.PlayerZone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.gui.GuiDisplayUtil;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.match.CMatchUI;
|
||||
import forge.gui.match.controllers.CMessage;
|
||||
@@ -55,8 +53,7 @@ public class CCommand implements ICDoc {
|
||||
private final Observer observerPlay = new Observer() {
|
||||
@Override
|
||||
public void update(final Observable a, final Object b) {
|
||||
final PlayerZone pZone = (PlayerZone) a;
|
||||
GuiDisplayUtil.setupPlayZone(CCommand.this.view.getTabletop(), pZone.getCards(false));
|
||||
CCommand.this.view.getTabletop().setupPlayZone();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -118,7 +115,7 @@ public class CCommand implements ICDoc {
|
||||
|
||||
if (c != null && c.isInZone(ZoneType.Command)) {
|
||||
//TODO: Cast commander/activate avatar/roll planar dice here.
|
||||
CMessage.SINGLETON_INSTANCE.getInputControl().getInput().selectCard(c);
|
||||
CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, player.getZone(ZoneType.Command));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,6 @@ import forge.game.zone.PlayerZone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.gui.ForgeAction;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.GuiDisplayUtil;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.match.CMatchUI;
|
||||
import forge.gui.match.controllers.CMessage;
|
||||
@@ -147,8 +146,7 @@ public class CField implements ICDoc {
|
||||
private final Observer observerPlay = new Observer() {
|
||||
@Override
|
||||
public void update(final Observable a, final Object b) {
|
||||
final PlayerZone pZone = (PlayerZone) a;
|
||||
GuiDisplayUtil.setupPlayZone(CField.this.view.getTabletop(), pZone.getCards(false));
|
||||
CField.this.view.getTabletop().setupPlayZone();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ import javax.swing.border.MatteBorder;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.DragTab;
|
||||
import forge.gui.framework.EDocID;
|
||||
@@ -66,7 +67,7 @@ public class VCommand implements IVDoc<CCommand> {
|
||||
|
||||
// TODO player is hard-coded into tabletop...should be dynamic
|
||||
// (haven't looked into it too deeply). Doublestrike 12-04-12
|
||||
tabletop = new PlayArea(scroller, id0 == EDocID.COMMAND_0);
|
||||
tabletop = new PlayArea(scroller, id0 == EDocID.COMMAND_0, player.getZone(ZoneType.Command).getCards(false));
|
||||
|
||||
control = new CCommand(player, this);
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ public class VField implements IVDoc<CField> {
|
||||
|
||||
// TODO player is hard-coded into tabletop...should be dynamic
|
||||
// (haven't looked into it too deeply). Doublestrike 12-04-12
|
||||
tabletop = new PlayArea(scroller, id0 == EDocID.FIELD_1);
|
||||
tabletop = new PlayArea(scroller, id0 == EDocID.FIELD_1, player.getZone(ZoneType.Battlefield).getCards(false));
|
||||
|
||||
control = new CField(player, this, playerViewer);
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import java.util.List;
|
||||
|
||||
import javax.swing.JScrollPane;
|
||||
import forge.Card;
|
||||
import forge.view.arcane.util.Animation;
|
||||
import forge.view.arcane.util.CardPanelMouseListener;
|
||||
|
||||
/**
|
||||
@@ -65,6 +66,8 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
|
||||
private int extraCardSpacingX, cardSpacingX, cardSpacingY;
|
||||
private int stackSpacingX, stackSpacingY;
|
||||
|
||||
private List<Card> model;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Constructor for PlayArea.
|
||||
@@ -76,10 +79,11 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
|
||||
* a boolean.
|
||||
* @param modelRef
|
||||
*/
|
||||
public PlayArea(final JScrollPane scrollPane, final boolean mirror) {
|
||||
public PlayArea(final JScrollPane scrollPane, final boolean mirror, List<Card> modelRef) {
|
||||
super(scrollPane);
|
||||
this.setBackground(Color.white);
|
||||
this.mirror = mirror;
|
||||
this.model = modelRef;
|
||||
}
|
||||
|
||||
private final CardStackRow collectAllLands() {
|
||||
@@ -478,6 +482,89 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
|
||||
super.mouseLeftClicked(panel, evt);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* setupPlayZone.
|
||||
* </p>
|
||||
*
|
||||
* @param newList
|
||||
* an array of {@link forge.Card} objects.
|
||||
*/
|
||||
public void setupPlayZone() {
|
||||
List<Card> oldCards, toDelete;
|
||||
oldCards = new ArrayList<Card>();
|
||||
for (final CardPanel cpa : getCardPanels()) {
|
||||
oldCards.add(cpa.getGameCard());
|
||||
}
|
||||
toDelete = new ArrayList<Card>(oldCards);
|
||||
toDelete.removeAll(model);
|
||||
if (toDelete.size() == getCardPanels().size()) {
|
||||
clear();
|
||||
} else {
|
||||
for (final Card card : toDelete) {
|
||||
removeCardPanel(getCardPanel(card.getUniqueNumber()));
|
||||
}
|
||||
}
|
||||
|
||||
List<Card> toAdd = new ArrayList<Card>(model);
|
||||
toAdd.removeAll(oldCards);
|
||||
|
||||
List<CardPanel> newPanels = new ArrayList<CardPanel>();
|
||||
for (final Card card : toAdd) {
|
||||
newPanels.add(addCard(card));
|
||||
}
|
||||
if (!toAdd.isEmpty()) {
|
||||
doLayout();
|
||||
}
|
||||
for (final CardPanel toPanel : newPanels) {
|
||||
scrollRectToVisible(new Rectangle(toPanel.getCardX(), toPanel.getCardY(), toPanel.getCardWidth(), toPanel.getCardHeight()));
|
||||
Animation.moveCard(toPanel);
|
||||
}
|
||||
|
||||
for (final Card card : model) {
|
||||
final CardPanel toPanel = getCardPanel(card.getUniqueNumber());
|
||||
if (card.isTapped()) {
|
||||
toPanel.setTapped(true);
|
||||
toPanel.setTappedAngle(forge.view.arcane.CardPanel.TAPPED_ANGLE);
|
||||
} else {
|
||||
toPanel.setTapped(false);
|
||||
toPanel.setTappedAngle(0);
|
||||
}
|
||||
toPanel.getAttachedPanels().clear();
|
||||
if (card.isEnchanted()) {
|
||||
final ArrayList<Card> enchants = card.getEnchantedBy();
|
||||
for (final Card e : enchants) {
|
||||
final forge.view.arcane.CardPanel cardE = getCardPanel(e.getUniqueNumber());
|
||||
if (cardE != null) {
|
||||
toPanel.getAttachedPanels().add(cardE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (card.isEquipped()) {
|
||||
final ArrayList<Card> enchants = card.getEquippedBy();
|
||||
for (final Card e : enchants) {
|
||||
final forge.view.arcane.CardPanel cardE = getCardPanel(e.getUniqueNumber());
|
||||
if (cardE != null) {
|
||||
toPanel.getAttachedPanels().add(cardE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (card.isEnchantingCard()) {
|
||||
toPanel.setAttachedToPanel(getCardPanel(card.getEnchantingCard().getUniqueNumber()));
|
||||
} else if (card.isEquipping()) {
|
||||
toPanel.setAttachedToPanel(getCardPanel(card.getEquipping().get(0).getUniqueNumber()));
|
||||
} else {
|
||||
toPanel.setAttachedToPanel(null);
|
||||
}
|
||||
|
||||
toPanel.setCard(toPanel.getGameCard());
|
||||
}
|
||||
invalidate();
|
||||
repaint();
|
||||
}
|
||||
|
||||
private static enum RowType {
|
||||
Land,
|
||||
Creature,
|
||||
|
||||
Reference in New Issue
Block a user