redirect dependency between Card and IPaperCard

This commit is contained in:
Maxmtg
2013-11-10 21:37:07 +00:00
parent 1c13e8dc10
commit be2ec80f0c
18 changed files with 56 additions and 77 deletions

View File

@@ -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<Card> {
return abilities;
}
public static Card fromPaperCard(IPaperCard pc, Player owner) {
return CardFactory.getCard(pc, owner);
}
private static final Map<PaperCard, Card> cp2card = new HashMap<PaperCard, Card>();
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

View File

@@ -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());

View File

@@ -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));
}
}
}

View File

@@ -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);

View File

@@ -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<Card> sd = new ArrayList<Card>();
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<Card> l = new ArrayList<Card>();
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))) {

View File

@@ -257,7 +257,7 @@ public final class BoosterDraft implements IBoosterDraft {
final List<Card> forAi = new ArrayList<Card>();
final List<PaperCard> 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++);

View File

@@ -46,4 +46,5 @@ public interface CardContainer {
* @return a {@link forge.Card} object.
*/
Card getCard();
}

View File

@@ -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);
}
}

View File

@@ -316,7 +316,7 @@ public class DualListBox<T> 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();

View File

@@ -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);

View File

@@ -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<CSubmenuVanguard> {
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));
}
}

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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();
}

View File

@@ -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);
}
}

View File

@@ -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);
}

View File

@@ -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<IPaperCard>, InventoryItemFro
// return String.format("%s|%s", name, cardSet);
}
/**
* To forge card.
*
* @return the card
*/
private static final Map<PaperCard, Card> cp2card = new HashMap<PaperCard, Card>();
/* (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)
*

View File

@@ -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; }
}