From be2ec80f0c755497375ae42117493e19a907ad46 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sun, 10 Nov 2013 21:37:07 +0000 Subject: [PATCH] redirect dependency between Card and IPaperCard --- forge-gui/src/main/java/forge/Card.java | 22 ++++++++++++ .../ability/effects/ChooseCardNameEffect.java | 2 +- .../ability/effects/CopyPermanentEffect.java | 5 ++- .../card/ability/effects/PlayEffect.java | 4 +-- .../src/main/java/forge/game/GameNew.java | 17 ++++----- .../java/forge/game/limited/BoosterDraft.java | 2 +- .../main/java/forge/gui/CardContainer.java | 1 + .../main/java/forge/gui/CardListViewer.java | 3 +- .../src/main/java/forge/gui/DualListBox.java | 2 +- .../main/java/forge/gui/GuiDisplayUtil.java | 10 +++--- .../gui/home/variant/VSubmenuVanguard.java | 3 +- .../gui/match/QuestWinLoseCardViewer.java | 3 +- .../forge/gui/match/controllers/CDetail.java | 2 +- .../forge/gui/match/controllers/CPicture.java | 2 +- .../forge/gui/toolbox/special/CardViewer.java | 3 +- .../src/main/java/forge/item/IPaperCard.java | 6 +--- .../src/main/java/forge/item/PaperCard.java | 35 +------------------ .../src/main/java/forge/item/PaperToken.java | 11 +----- 18 files changed, 56 insertions(+), 77 deletions(-) diff --git a/forge-gui/src/main/java/forge/Card.java b/forge-gui/src/main/java/forge/Card.java index d3e4c260bd4..9d018324fea 100644 --- a/forge-gui/src/main/java/forge/Card.java +++ b/forge-gui/src/main/java/forge/Card.java @@ -53,6 +53,7 @@ import forge.card.MagicColor; import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityUtils; import forge.card.ability.ApiType; +import forge.card.cardfactory.CardFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.mana.ManaCost; @@ -84,6 +85,8 @@ import forge.game.event.GameEventCardTapped; import forge.game.player.Player; import forge.game.zone.Zone; import forge.game.zone.ZoneType; +import forge.item.IPaperCard; +import forge.item.PaperCard; import forge.util.Expressions; import forge.util.Lang; import forge.util.MyRandom; @@ -8692,5 +8695,24 @@ public class Card extends GameEntity implements Comparable { return abilities; } + + + public static Card fromPaperCard(IPaperCard pc, Player owner) { + return CardFactory.getCard(pc, owner); + } + + private static final Map cp2card = new HashMap(); + public static Card getCardForUi(IPaperCard pc) { + if( pc instanceof PaperCard ) { + Card res = cp2card.get(pc); + if (null == res) { + res = fromPaperCard(pc, null); + cp2card.put((PaperCard) pc, res); + } + return res; + } + return fromPaperCard(pc, null); + } + } // end Card class diff --git a/forge-gui/src/main/java/forge/card/ability/effects/ChooseCardNameEffect.java b/forge-gui/src/main/java/forge/card/ability/effects/ChooseCardNameEffect.java index bbdc73befb0..0fd7cc06ea7 100644 --- a/forge-gui/src/main/java/forge/card/ability/effects/ChooseCardNameEffect.java +++ b/forge-gui/src/main/java/forge/card/ability/effects/ChooseCardNameEffect.java @@ -108,7 +108,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect { Collections.sort(cards); PaperCard cp = GuiChoose.one(message, cards); - Card instanceForPlayer = cp.toForgeCard(p); // the Card instance for test needs a game to be tested + Card instanceForPlayer = Card.fromPaperCard(cp, p); // the Card instance for test needs a game to be tested if (instanceForPlayer.isValid(valid, host.getController(), host)) { host.setNamedCard(cp.getName()); p.setNamedCard(cp.getName()); diff --git a/forge-gui/src/main/java/forge/card/ability/effects/CopyPermanentEffect.java b/forge-gui/src/main/java/forge/card/ability/effects/CopyPermanentEffect.java index 6117b7510cd..72873c52c9f 100644 --- a/forge-gui/src/main/java/forge/card/ability/effects/CopyPermanentEffect.java +++ b/forge-gui/src/main/java/forge/card/ability/effects/CopyPermanentEffect.java @@ -91,7 +91,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect { int ncopied = AbilityUtils.calculateAmount(hostCard, num, sa); while(ncopied > 0) { final PaperCard cp = Aggregates.random(copysource); - Card possibleCard = cp.getMatchingForgeCard(); + Card possibleCard = Card.fromPaperCard(cp, null); // Need to temporarily set the Owner so the Game is set possibleCard.setOwner(sa.getActivatingPlayer()); @@ -115,8 +115,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect { tgtCards.clear(); if (!cards.isEmpty()) { - Card c = cards.get(0).getMatchingForgeCard(); - tgtCards.add(c); + tgtCards.add(Card.fromPaperCard(cards.get(0), null)); } } } diff --git a/forge-gui/src/main/java/forge/card/ability/effects/PlayEffect.java b/forge-gui/src/main/java/forge/card/ability/effects/PlayEffect.java index 71ec72a429e..772fe816a62 100644 --- a/forge-gui/src/main/java/forge/card/ability/effects/PlayEffect.java +++ b/forge-gui/src/main/java/forge/card/ability/effects/PlayEffect.java @@ -102,7 +102,7 @@ public class PlayEffect extends SpellAbilityEffect { int ncopied = AbilityUtils.calculateAmount(source, num, sa); while(ncopied > 0) { final PaperCard cp = Aggregates.random(copysource); - Card possibleCard = cp.getMatchingForgeCard(); + Card possibleCard = Card.fromPaperCard(cp, null); // Need to temporarily set the Owner so the Game is set possibleCard.setOwner(sa.getActivatingPlayer()); @@ -160,7 +160,7 @@ public class PlayEffect extends SpellAbilityEffect { } Card original = tgtCard; if (sa.hasParam("CopyCard")) { - tgtCard = CardDb.getCard(tgtCard).toForgeCard(sa.getActivatingPlayer()); + tgtCard = Card.fromPaperCard(CardDb.getCard(tgtCard), sa.getActivatingPlayer()); tgtCard.setToken(true); tgtCard.setCopiedSpell(true); diff --git a/forge-gui/src/main/java/forge/game/GameNew.java b/forge-gui/src/main/java/forge/game/GameNew.java index e408c4910ea..fcec237f09f 100644 --- a/forge-gui/src/main/java/forge/game/GameNew.java +++ b/forge-gui/src/main/java/forge/game/GameNew.java @@ -56,8 +56,7 @@ public class GameNew { PlayerZone bf = player.getZone(ZoneType.Battlefield); if (cards != null) { for (final IPaperCard cp : cards) { - Card c = cp.toForgeCard(player); - c.setOwner(player); + Card c = Card.fromPaperCard(cp, player); bf.add(c); c.setSickness(true); c.setStartsGameInPlay(true); @@ -69,13 +68,14 @@ public class GameNew { PlayerZone com = player.getZone(ZoneType.Command); // Mainly for avatar, but might find something else here - for (final IPaperCard c : psc.getCardsInCommand(player)) { - com.add(c.toForgeCard(player)); + for (final IPaperCard cp : psc.getCardsInCommand(player)) { + com.add(Card.fromPaperCard(cp, player)); } // Schemes List sd = new ArrayList(); - for(IPaperCard cp : psc.getSchemes(player)) sd.add(cp.toForgeCard(player)); + for(IPaperCard cp : psc.getSchemes(player)) + sd.add(Card.fromPaperCard(cp, player)); if ( !sd.isEmpty()) { for(Card c : sd) { player.getZone(ZoneType.SchemeDeck).add(c); @@ -86,7 +86,8 @@ public class GameNew { // Planes List l = new ArrayList(); - for(IPaperCard cp : psc.getPlanes(player)) l.add(cp.toForgeCard(player)); + for(IPaperCard cp : psc.getPlanes(player)) + l.add(Card.fromPaperCard(cp, player)); if ( !l.isEmpty() ) { for(Card c : l) { player.getZone(ZoneType.PlanarDeck).add(c); @@ -97,7 +98,7 @@ public class GameNew { // Commander if(psc.getCommander() != null) { - Card cmd = psc.getCommander().toForgeCard(player); + Card cmd = Card.fromPaperCard(psc.getCommander(), player); cmd.setCommander(true); com.add(cmd); player.setCommander(cmd); @@ -159,7 +160,7 @@ public class GameNew { cpi = CardDb.instance().getFoiled(cpi); } - final Card card = cpi.toForgeCard(player); + final Card card = Card.fromPaperCard(cpi, player); // Assign card-specific foiling or random foiling on approximately 1:20 cards if enabled if (cp.isFoil() || (canRandomFoil && MyRandom.percentTrue(5))) { diff --git a/forge-gui/src/main/java/forge/game/limited/BoosterDraft.java b/forge-gui/src/main/java/forge/game/limited/BoosterDraft.java index 7ef6d767bf5..72f748a12ac 100644 --- a/forge-gui/src/main/java/forge/game/limited/BoosterDraft.java +++ b/forge-gui/src/main/java/forge/game/limited/BoosterDraft.java @@ -257,7 +257,7 @@ public final class BoosterDraft implements IBoosterDraft { final List forAi = new ArrayList(); final List booster = this.pack.get((iHumansBooster + i) % this.pack.size()); for (final IPaperCard cr : booster) { - forAi.add(cr.getMatchingForgeCard()); + forAi.add(Card.getCardForUi(cr)); // ai is supposed to analyze it only } final PaperCard aiPick = this.draftAI.choose(booster, iPlayer++); diff --git a/forge-gui/src/main/java/forge/gui/CardContainer.java b/forge-gui/src/main/java/forge/gui/CardContainer.java index e9194dbca05..6f1d926b3f9 100644 --- a/forge-gui/src/main/java/forge/gui/CardContainer.java +++ b/forge-gui/src/main/java/forge/gui/CardContainer.java @@ -46,4 +46,5 @@ public interface CardContainer { * @return a {@link forge.Card} object. */ Card getCard(); + } diff --git a/forge-gui/src/main/java/forge/gui/CardListViewer.java b/forge-gui/src/main/java/forge/gui/CardListViewer.java index d457e085f68..defc753583e 100644 --- a/forge-gui/src/main/java/forge/gui/CardListViewer.java +++ b/forge-gui/src/main/java/forge/gui/CardListViewer.java @@ -37,6 +37,7 @@ import javax.swing.JScrollPane; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import forge.Card; import forge.item.PaperCard; /** @@ -201,7 +202,7 @@ public class CardListViewer { // (String) jList.getSelectedValue(); if ((row >= 0) && (row < CardListViewer.this.list.size())) { final PaperCard cp = CardListViewer.this.list.get(row); - CardListViewer.this.detail.setCard(cp.getMatchingForgeCard()); + CardListViewer.this.detail.setCard(Card.getCardForUi(cp)); CardListViewer.this.picture.setCard(cp); } } diff --git a/forge-gui/src/main/java/forge/gui/DualListBox.java b/forge-gui/src/main/java/forge/gui/DualListBox.java index a1efcb3d9e8..b17a5aa4979 100644 --- a/forge-gui/src/main/java/forge/gui/DualListBox.java +++ b/forge-gui/src/main/java/forge/gui/DualListBox.java @@ -316,7 +316,7 @@ public class DualListBox extends FPanel { } else if (obj instanceof SpellAbility) { card = ((SpellAbility) obj).getSourceCard(); } else if (obj instanceof PaperCard) { - card = ((IPaperCard) obj).getMatchingForgeCard(); + card = Card.getCardForUi((IPaperCard) obj); } GuiUtils.clearPanelSelections(); diff --git a/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java b/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java index dfb5d0cb5bb..fc72af55da3 100644 --- a/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java +++ b/forge-gui/src/main/java/forge/gui/GuiDisplayUtil.java @@ -202,7 +202,7 @@ public final class GuiDisplayUtil { for (final String element : data) { final String[] cardinfo = element.trim().split("\\|"); - final Card c = CardDb.instance().getCard(cardinfo[0]).toForgeCard(player); + final Card c = Card.fromPaperCard(CardDb.instance().getCard(cardinfo[0]), player); boolean hasSetCurSet = false; for (final String info : cardinfo) { @@ -383,8 +383,7 @@ public final class GuiDisplayUtil { } getGame().getAction().invoke(new Runnable() { @Override public void run() { - Card forgeCard = c.toForgeCard(p); - getGame().getAction().moveToHand(forgeCard); + getGame().getAction().moveToHand(Card.fromPaperCard(c, p)); }}); } @@ -407,10 +406,9 @@ public final class GuiDisplayUtil { final Game game = getGame(); game.getAction().invoke(new Runnable() { @Override public void run() { - final Card forgeCard = c.toForgeCard(p); + final Card forgeCard = Card.fromPaperCard(c, p); if (c.getRules().getType().isLand()) { - forgeCard.setOwner(p); game.getAction().moveToPlay(forgeCard); } else { @@ -480,7 +478,7 @@ public final class GuiDisplayUtil { // use standard forge's list selection dialog final IPaperCard c = GuiChoose.oneOrNone("Name the card", allPlanars); if (c == null) { return; } - final Card forgeCard = c.toForgeCard(p); + final Card forgeCard = Card.fromPaperCard(c, p); forgeCard.setOwner(p); game.getAction().changeZone(null, p.getZone(ZoneType.PlanarDeck), forgeCard, 0); diff --git a/forge-gui/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java b/forge-gui/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java index c2230a6f397..9d511c96d62 100644 --- a/forge-gui/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java +++ b/forge-gui/src/main/java/forge/gui/home/variant/VSubmenuVanguard.java @@ -17,6 +17,7 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import net.miginfocom.swing.MigLayout; +import forge.Card; import forge.card.CardDb; import forge.gui.CardDetailPanel; import forge.gui.deckchooser.FDeckChooser; @@ -132,7 +133,7 @@ public enum VSubmenuVanguard implements IVSubmenu { Object obj = avatarLists.get(index).getSelectedValue(); if (obj instanceof PaperCard) { - cdpAvatarDetails.get(index).setCard(((IPaperCard) obj).getMatchingForgeCard()); + cdpAvatarDetails.get(index).setCard(Card.getCardForUi((IPaperCard) obj)); } } diff --git a/forge-gui/src/main/java/forge/gui/match/QuestWinLoseCardViewer.java b/forge-gui/src/main/java/forge/gui/match/QuestWinLoseCardViewer.java index 4245bbbca66..66268a6e512 100644 --- a/forge-gui/src/main/java/forge/gui/match/QuestWinLoseCardViewer.java +++ b/forge-gui/src/main/java/forge/gui/match/QuestWinLoseCardViewer.java @@ -26,6 +26,7 @@ import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import net.miginfocom.swing.MigLayout; +import forge.Card; import forge.gui.CardDetailPanel; import forge.gui.CardPicturePanel; import forge.gui.toolbox.FList; @@ -103,7 +104,7 @@ 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(cp.getMatchingForgeCard()); + QuestWinLoseCardViewer.this.detail.setCard(Card.getCardForUi(cp)); QuestWinLoseCardViewer.this.picture.setCard(cp); } } diff --git a/forge-gui/src/main/java/forge/gui/match/controllers/CDetail.java b/forge-gui/src/main/java/forge/gui/match/controllers/CDetail.java index 0748013a5b9..81d998265c9 100644 --- a/forge-gui/src/main/java/forge/gui/match/controllers/CDetail.java +++ b/forge-gui/src/main/java/forge/gui/match/controllers/CDetail.java @@ -52,7 +52,7 @@ public enum CDetail implements ICDoc { public void showCard(InventoryItem item) { if (item instanceof IPaperCard) { - showCard(((IPaperCard)item).getMatchingForgeCard()); + showCard(Card.getCardForUi((IPaperCard)item)); } else if (item instanceof InventoryItemFromSet) { view.getLblFlipcard().setVisible(false); view.getPnlDetail().setItem((InventoryItemFromSet)item); diff --git a/forge-gui/src/main/java/forge/gui/match/controllers/CPicture.java b/forge-gui/src/main/java/forge/gui/match/controllers/CPicture.java index 5c3594edd78..7b8b466ba09 100644 --- a/forge-gui/src/main/java/forge/gui/match/controllers/CPicture.java +++ b/forge-gui/src/main/java/forge/gui/match/controllers/CPicture.java @@ -78,7 +78,7 @@ public enum CPicture implements ICDoc { public void showImage(final InventoryItem item) { if (item instanceof IPaperCard) { IPaperCard paperCard = ((IPaperCard)item); - Card c = paperCard.getMatchingForgeCard(); + Card c = Card.getCardForUi(paperCard); if (paperCard.isFoil() && c.getFoil() == 0) { c.setRandomFoil(); } diff --git a/forge-gui/src/main/java/forge/gui/toolbox/special/CardViewer.java b/forge-gui/src/main/java/forge/gui/toolbox/special/CardViewer.java index e3253d7036f..40fd0fb4bab 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/special/CardViewer.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/special/CardViewer.java @@ -27,6 +27,7 @@ import javax.swing.JScrollPane; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import forge.Card; import forge.gui.CardDetailPanel; import forge.gui.CardPicturePanel; import forge.item.PaperCard; @@ -92,7 +93,7 @@ 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(cp.getMatchingForgeCard()); + CardViewer.this.detail.setCard(Card.getCardForUi(cp)); CardViewer.this.picture.setCard(cp); } } diff --git a/forge-gui/src/main/java/forge/item/IPaperCard.java b/forge-gui/src/main/java/forge/item/IPaperCard.java index 7b256f26586..a6da09e699d 100644 --- a/forge-gui/src/main/java/forge/item/IPaperCard.java +++ b/forge-gui/src/main/java/forge/item/IPaperCard.java @@ -9,10 +9,9 @@ import org.apache.commons.lang3.StringUtils; import com.google.common.base.Predicate; import com.google.common.collect.Lists; -import forge.Card; +//import forge.Card; import forge.card.CardRarity; import forge.card.CardRules; -import forge.game.player.Player; import forge.util.PredicateString; public interface IPaperCard extends InventoryItem { @@ -161,7 +160,4 @@ public interface IPaperCard extends InventoryItem { public abstract String getItemType(); - public abstract Card getMatchingForgeCard(); - public abstract Card toForgeCard(Player owner); - } \ No newline at end of file diff --git a/forge-gui/src/main/java/forge/item/PaperCard.java b/forge-gui/src/main/java/forge/item/PaperCard.java index c01675c0806..d4db6cc35b8 100644 --- a/forge-gui/src/main/java/forge/item/PaperCard.java +++ b/forge-gui/src/main/java/forge/item/PaperCard.java @@ -17,16 +17,10 @@ */ package forge.item; -import java.util.HashMap; -import java.util.Map; - import com.google.common.base.Function; -import forge.Card; import forge.card.CardRarity; import forge.card.CardRules; -import forge.card.cardfactory.CardFactory; -import forge.game.player.Player; /** @@ -184,34 +178,7 @@ public final class PaperCard implements Comparable, InventoryItemFro // return String.format("%s|%s", name, cardSet); } - /** - * To forge card. - * - * @return the card - */ - private static final Map cp2card = new HashMap(); - /* (non-Javadoc) - * @see forge.item.ICardPrinted#getMatchingForgeCard() - */ - @Override - public Card getMatchingForgeCard() { - Card res = cp2card.get(this); - if (null == res) { - res = toForgeCard(null); - cp2card.put(this, res); - } - return res; - } - - /* (non-Javadoc) - * @see forge.item.ICardPrinted#toForgeCard(forge.game.player.Player) - */ - @Override - public Card toForgeCard(Player owner) { - final Card c = CardFactory.getCard(this, owner); - return c; - } - + /* * (non-Javadoc) * diff --git a/forge-gui/src/main/java/forge/item/PaperToken.java b/forge-gui/src/main/java/forge/item/PaperToken.java index a6ce4f93c6a..e5a2fc7303f 100644 --- a/forge-gui/src/main/java/forge/item/PaperToken.java +++ b/forge-gui/src/main/java/forge/item/PaperToken.java @@ -2,12 +2,10 @@ package forge.item; import java.util.Locale; -import forge.Card; import forge.card.CardEdition; import forge.card.CardRarity; import forge.card.CardRules; -import forge.card.cardfactory.CardFactory; -import forge.game.player.Player; + public class PaperToken implements InventoryItemFromSet, IPaperCard { private String name; @@ -61,13 +59,6 @@ public class PaperToken implements InventoryItemFromSet, IPaperCard { public String getImageFilename() { return imageFileName; } @Override public String getItemType() { return "Token"; } - @Override public Card getMatchingForgeCard() { return toForgeCard(null); } // hope this won't be queried too frequently, so no cache - - @Override - public Card toForgeCard(Player owner) { - final Card c = CardFactory.getCard(this, owner); - return c; - } @Override public boolean isToken() { return true; } }