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;
|
package forge.gui;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Rectangle;
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@@ -61,8 +60,6 @@ import forge.game.zone.ZoneType;
|
|||||||
import forge.item.CardDb;
|
import forge.item.CardDb;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
import forge.view.arcane.PlayArea;
|
|
||||||
import forge.view.arcane.util.Animation;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <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>
|
* <p>
|
||||||
* updateGUI.
|
* updateGUI.
|
||||||
|
|||||||
@@ -29,9 +29,7 @@ import forge.Card;
|
|||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiDisplayUtil;
|
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
import forge.gui.match.CMatchUI;
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.gui.match.controllers.CMessage;
|
import forge.gui.match.controllers.CMessage;
|
||||||
@@ -55,8 +53,7 @@ public class CCommand implements ICDoc {
|
|||||||
private final Observer observerPlay = new Observer() {
|
private final Observer observerPlay = new Observer() {
|
||||||
@Override
|
@Override
|
||||||
public void update(final Observable a, final Object b) {
|
public void update(final Observable a, final Object b) {
|
||||||
final PlayerZone pZone = (PlayerZone) a;
|
CCommand.this.view.getTabletop().setupPlayZone();
|
||||||
GuiDisplayUtil.setupPlayZone(CCommand.this.view.getTabletop(), pZone.getCards(false));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -118,7 +115,7 @@ public class CCommand implements ICDoc {
|
|||||||
|
|
||||||
if (c != null && c.isInZone(ZoneType.Command)) {
|
if (c != null && c.isInZone(ZoneType.Command)) {
|
||||||
//TODO: Cast commander/activate avatar/roll planar dice here.
|
//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.game.zone.ZoneType;
|
||||||
import forge.gui.ForgeAction;
|
import forge.gui.ForgeAction;
|
||||||
import forge.gui.GuiChoose;
|
import forge.gui.GuiChoose;
|
||||||
import forge.gui.GuiDisplayUtil;
|
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
import forge.gui.match.CMatchUI;
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.gui.match.controllers.CMessage;
|
import forge.gui.match.controllers.CMessage;
|
||||||
@@ -147,8 +146,7 @@ public class CField implements ICDoc {
|
|||||||
private final Observer observerPlay = new Observer() {
|
private final Observer observerPlay = new Observer() {
|
||||||
@Override
|
@Override
|
||||||
public void update(final Observable a, final Object b) {
|
public void update(final Observable a, final Object b) {
|
||||||
final PlayerZone pZone = (PlayerZone) a;
|
CField.this.view.getTabletop().setupPlayZone();
|
||||||
GuiDisplayUtil.setupPlayZone(CField.this.view.getTabletop(), pZone.getCards(false));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import javax.swing.border.MatteBorder;
|
|||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
import forge.gui.framework.DragTab;
|
import forge.gui.framework.DragTab;
|
||||||
import forge.gui.framework.EDocID;
|
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
|
// TODO player is hard-coded into tabletop...should be dynamic
|
||||||
// (haven't looked into it too deeply). Doublestrike 12-04-12
|
// (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);
|
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
|
// TODO player is hard-coded into tabletop...should be dynamic
|
||||||
// (haven't looked into it too deeply). Doublestrike 12-04-12
|
// (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);
|
control = new CField(player, this, playerViewer);
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
|
import forge.view.arcane.util.Animation;
|
||||||
import forge.view.arcane.util.CardPanelMouseListener;
|
import forge.view.arcane.util.CardPanelMouseListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,6 +66,8 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
|
|||||||
private int extraCardSpacingX, cardSpacingX, cardSpacingY;
|
private int extraCardSpacingX, cardSpacingX, cardSpacingY;
|
||||||
private int stackSpacingX, stackSpacingY;
|
private int stackSpacingX, stackSpacingY;
|
||||||
|
|
||||||
|
private List<Card> model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* Constructor for PlayArea.
|
* Constructor for PlayArea.
|
||||||
@@ -76,10 +79,11 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
|
|||||||
* a boolean.
|
* a boolean.
|
||||||
* @param modelRef
|
* @param modelRef
|
||||||
*/
|
*/
|
||||||
public PlayArea(final JScrollPane scrollPane, final boolean mirror) {
|
public PlayArea(final JScrollPane scrollPane, final boolean mirror, List<Card> modelRef) {
|
||||||
super(scrollPane);
|
super(scrollPane);
|
||||||
this.setBackground(Color.white);
|
this.setBackground(Color.white);
|
||||||
this.mirror = mirror;
|
this.mirror = mirror;
|
||||||
|
this.model = modelRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final CardStackRow collectAllLands() {
|
private final CardStackRow collectAllLands() {
|
||||||
@@ -478,6 +482,89 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
|
|||||||
super.mouseLeftClicked(panel, evt);
|
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 {
|
private static enum RowType {
|
||||||
Land,
|
Land,
|
||||||
Creature,
|
Creature,
|
||||||
|
|||||||
Reference in New Issue
Block a user