mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 20:58:03 +00:00
redirect dependency between Card and IPaperCard
This commit is contained in:
@@ -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;
|
||||
@@ -8693,4 +8696,23 @@ 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
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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))) {
|
||||
|
||||
@@ -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++);
|
||||
|
||||
@@ -46,4 +46,5 @@ public interface CardContainer {
|
||||
* @return a {@link forge.Card} object.
|
||||
*/
|
||||
Card getCard();
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
@@ -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,33 +178,6 @@ 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)
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user