forked from External/mage
images: fixed miss token image in some use cases (if it was created from a card and a set contains multiple images);
This commit is contained in:
parent
8e2ff2db0f
commit
0e39d6a833
18 changed files with 82 additions and 57 deletions
|
|
@ -155,9 +155,15 @@ public final class CardImageUtils {
|
|||
return "ERROR: empty image file name, object type - " + card.getMageObjectType();
|
||||
}
|
||||
|
||||
if (card.getMageObjectType().isUseTokensRepository()
|
||||
|| card.getExpansionSetCode().equals(TokenRepository.XMAGE_TOKENS_SET_CODE)) {
|
||||
// token images or inner cards like face down
|
||||
boolean isTokenRepository = card.getMageObjectType().isUseTokensRepository()
|
||||
|| card.getExpansionSetCode().equals(TokenRepository.XMAGE_TOKENS_SET_CODE);
|
||||
// if token from a card then must use card repository instead
|
||||
if (isTokenRepository && !card.getCardNumber().isEmpty()) {
|
||||
isTokenRepository = false;
|
||||
}
|
||||
|
||||
if (isTokenRepository) {
|
||||
// images from tokens repository (token + xmage token)
|
||||
CardDownloadData cardData = new CardDownloadData(
|
||||
imageFileName.replace(" Token", ""),
|
||||
card.getExpansionSetCode(),
|
||||
|
|
@ -167,18 +173,7 @@ public final class CardImageUtils {
|
|||
cardData.setToken(true);
|
||||
imageFile = CardImageUtils.buildImagePathToCardOrToken(cardData);
|
||||
} else {
|
||||
// card images
|
||||
// workaround to find various art settings first
|
||||
// TODO: no needs in workaround?! ?!
|
||||
boolean usesVariousArt = false;
|
||||
CardInfo cardInfo = CardRepository.instance.findCardWithPreferredSetAndNumber(
|
||||
card.getName(),
|
||||
card.getExpansionSetCode(),
|
||||
card.getCardNumber()
|
||||
);
|
||||
if (cardInfo != null) {
|
||||
usesVariousArt = cardInfo.usesVariousArt();
|
||||
}
|
||||
// images from cards repository (card + token from cards)
|
||||
CardDownloadData cardData = new CardDownloadData(
|
||||
imageFileName,
|
||||
card.getExpansionSetCode(),
|
||||
|
|
|
|||
|
|
@ -34,6 +34,13 @@ public interface MageObject extends MageItem, Serializable, Copyable<MageObject>
|
|||
|
||||
void setImageNumber(Integer imageNumber);
|
||||
|
||||
/**
|
||||
* Set contains multiple cards with same card name but different images (also used for token from card)
|
||||
*/
|
||||
boolean getUsesVariousArt();
|
||||
|
||||
void setUsesVariousArt(boolean usesVariousArt);
|
||||
|
||||
/**
|
||||
* Get image file name
|
||||
* - empty for default name from a card
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ public abstract class MageObjectImpl implements MageObject {
|
|||
|
||||
private String expansionSetCode = "";
|
||||
private String cardNumber = "";
|
||||
private boolean usesVariousArt = false;
|
||||
private String imageFileName = "";
|
||||
private int imageNumber = 0;
|
||||
|
||||
|
|
@ -77,6 +78,7 @@ public abstract class MageObjectImpl implements MageObject {
|
|||
frameColor = object.frameColor.copy();
|
||||
frameStyle = object.frameStyle;
|
||||
expansionSetCode = object.expansionSetCode;
|
||||
usesVariousArt = object.usesVariousArt;
|
||||
cardNumber = object.cardNumber;
|
||||
imageFileName = object.imageFileName;
|
||||
imageNumber = object.imageNumber;
|
||||
|
|
@ -258,6 +260,16 @@ public abstract class MageObjectImpl implements MageObject {
|
|||
this.expansionSetCode = expansionSetCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getUsesVariousArt() {
|
||||
return usesVariousArt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUsesVariousArt(boolean usesVariousArt) {
|
||||
this.usesVariousArt = usesVariousArt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCardNumber() {
|
||||
return cardNumber;
|
||||
|
|
|
|||
|
|
@ -339,6 +339,7 @@ public class BecomesFaceDownCreatureEffect extends ContinuousEffectImpl {
|
|||
TokenInfo faceDownInfo = TokenRepository.instance.findPreferredTokenInfoForXmage(tokenName, object.getId());
|
||||
if (faceDownInfo != null) {
|
||||
faceDownToken.setExpansionSetCode(faceDownInfo.getSetCode());
|
||||
faceDownToken.setUsesVariousArt(false);
|
||||
faceDownToken.setCardNumber("0");
|
||||
faceDownToken.setImageFileName(faceDownInfo.getName());
|
||||
faceDownToken.setImageNumber(faceDownInfo.getImageNumber());
|
||||
|
|
|
|||
|
|
@ -148,13 +148,6 @@ public interface Card extends MageObject, Ownerable {
|
|||
|
||||
List<Mana> getMana();
|
||||
|
||||
/**
|
||||
* Set contains multiple cards with same card name but different images. Used for image path generation.
|
||||
*/
|
||||
boolean getUsesVariousArt();
|
||||
|
||||
void setUsesVariousArt(boolean usesVariousArt);
|
||||
|
||||
Counters getCounters(Game game);
|
||||
|
||||
Counters getCounters(GameState state);
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
protected SpellAbility spellAbility;
|
||||
protected boolean flipCard;
|
||||
protected String flipCardName;
|
||||
protected boolean usesVariousArt = false;
|
||||
protected boolean morphCard;
|
||||
protected List<UUID> attachments = new ArrayList<>();
|
||||
protected boolean extraDeckCard = false;
|
||||
|
|
@ -65,6 +64,7 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
|
||||
this.rarity = setInfo.getRarity();
|
||||
this.setExpansionSetCode(setInfo.getExpansionSetCode());
|
||||
this.setUsesVariousArt(setInfo.getUsesVariousArt());
|
||||
this.setCardNumber(setInfo.getCardNumber());
|
||||
this.setImageFileName(""); // use default
|
||||
this.setImageNumber(0);
|
||||
|
|
@ -86,7 +86,6 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
|
||||
CardGraphicInfo graphicInfo = setInfo.getGraphicInfo();
|
||||
if (graphicInfo != null) {
|
||||
this.usesVariousArt = graphicInfo.getUsesVariousArt();
|
||||
if (graphicInfo.getFrameColor() != null) {
|
||||
this.frameColor = graphicInfo.getFrameColor().copy();
|
||||
}
|
||||
|
|
@ -145,7 +144,6 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
spellAbility = null; // will be set on first getSpellAbility call if card has one
|
||||
flipCard = card.flipCard;
|
||||
flipCardName = card.flipCardName;
|
||||
usesVariousArt = card.usesVariousArt;
|
||||
morphCard = card.morphCard;
|
||||
extraDeckCard = card.extraDeckCard;
|
||||
|
||||
|
|
@ -724,16 +722,6 @@ public abstract class CardImpl extends MageObjectImpl implements Card {
|
|||
return flipCardName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getUsesVariousArt() {
|
||||
return usesVariousArt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUsesVariousArt(boolean usesVariousArt) {
|
||||
this.usesVariousArt = usesVariousArt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Counters getCounters(Game game) {
|
||||
return getCounters(game.getState());
|
||||
|
|
|
|||
|
|
@ -37,6 +37,10 @@ public final class CardSetInfo implements Serializable, Copyable<CardSetInfo> {
|
|||
return this.expansionSetCode;
|
||||
}
|
||||
|
||||
public boolean getUsesVariousArt() {
|
||||
return this.graphicInfo != null && this.graphicInfo.getUsesVariousArt();
|
||||
}
|
||||
|
||||
public String getCardNumber() {
|
||||
return this.cardNumber;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ public class MockCard extends CardImpl implements MockableCard {
|
|||
public MockCard(CardInfo card) {
|
||||
super(null, card.getName());
|
||||
this.setExpansionSetCode(card.getSetCode());
|
||||
this.setUsesVariousArt(card.usesVariousArt());
|
||||
this.setCardNumber(card.getCardNumber());
|
||||
this.setImageFileName(""); // use default
|
||||
this.setImageNumber(0);
|
||||
|
|
@ -51,8 +52,6 @@ public class MockCard extends CardImpl implements MockableCard {
|
|||
this.subtype = card.getSubTypes();
|
||||
this.supertype = card.getSupertypes();
|
||||
|
||||
this.usesVariousArt = card.usesVariousArt();
|
||||
|
||||
//this.manaCost = new ManaCostsImpl<>(join(card.getManaCosts(CardInfo.ManaCostSide.ALL)));
|
||||
this.manaCostLeftStr = card.getManaCosts(CardInfo.ManaCostSide.LEFT);
|
||||
this.manaCostRightStr = card.getManaCosts(CardInfo.ManaCostSide.RIGHT);
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@ public class MockSplitCard extends SplitCard implements MockableCard {
|
|||
|
||||
this.frameColor = card.getFrameColor();
|
||||
this.frameStyle = card.getFrameStyle();
|
||||
this.usesVariousArt = card.usesVariousArt();
|
||||
|
||||
this.color = card.getColor();
|
||||
this.flipCard = card.isFlipCard();
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ public abstract class CommandObjectImpl implements CommandObject {
|
|||
private String name = "";
|
||||
|
||||
private String expansionSetCode = "";
|
||||
private boolean usesVariousArt = false;
|
||||
private String cardNumber = "";
|
||||
private String imageFileName = "";
|
||||
private int imageNumber;
|
||||
|
|
@ -27,6 +28,7 @@ public abstract class CommandObjectImpl implements CommandObject {
|
|||
this.id = object.id;
|
||||
this.name = object.name;
|
||||
this.expansionSetCode = object.expansionSetCode;
|
||||
this.usesVariousArt = object.usesVariousArt;
|
||||
this.cardNumber = object.cardNumber;
|
||||
this.imageFileName = object.imageFileName;
|
||||
this.imageNumber = object.imageNumber;
|
||||
|
|
@ -47,6 +49,16 @@ public abstract class CommandObjectImpl implements CommandObject {
|
|||
this.expansionSetCode = expansionSetCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getUsesVariousArt() {
|
||||
return usesVariousArt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUsesVariousArt(boolean usesVariousArt) {
|
||||
this.usesVariousArt = usesVariousArt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCardNumber() {
|
||||
return cardNumber;
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ public abstract class Emblem extends CommandObjectImpl {
|
|||
);
|
||||
if (foundInfo != null) {
|
||||
this.setExpansionSetCode(foundInfo.getSetCode());
|
||||
this.setUsesVariousArt(false);
|
||||
this.setCardNumber("");
|
||||
this.setImageFileName(""); // use default
|
||||
this.setImageNumber(foundInfo.getImageNumber());
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ public abstract class Plane extends CommandObjectImpl {
|
|||
TokenInfo foundInfo = TokenRepository.instance.findPreferredTokenInfoForClass(this.getClass().getName(), null);
|
||||
if (foundInfo != null) {
|
||||
this.setExpansionSetCode(foundInfo.getSetCode());
|
||||
this.setUsesVariousArt(false);
|
||||
this.setCardNumber("");
|
||||
this.setImageFileName(""); // use default
|
||||
this.setImageNumber(foundInfo.getImageNumber());
|
||||
|
|
|
|||
|
|
@ -23,8 +23,6 @@ import java.util.stream.Collectors;
|
|||
*/
|
||||
public final class EmblemOfCard extends Emblem {
|
||||
|
||||
private final boolean usesVariousArt;
|
||||
|
||||
public static Card lookupCard(
|
||||
String cardName,
|
||||
String cardNumber,
|
||||
|
|
@ -76,20 +74,20 @@ public final class EmblemOfCard extends Emblem {
|
|||
this.getAbilities().setSourceId(this.getId());
|
||||
|
||||
this.setExpansionSetCode(card.getExpansionSetCode());
|
||||
this.setUsesVariousArt(card.getUsesVariousArt());
|
||||
this.setCardNumber(card.getCardNumber());
|
||||
this.setImageFileName(card.getImageFileName());
|
||||
this.setImageNumber(card.getImageNumber());
|
||||
this.usesVariousArt = card.getUsesVariousArt();
|
||||
}
|
||||
|
||||
public EmblemOfCard(Card card) {
|
||||
this(card, Zone.BATTLEFIELD);
|
||||
}
|
||||
|
||||
private EmblemOfCard(EmblemOfCard eoc) {
|
||||
private EmblemOfCard(final EmblemOfCard eoc) {
|
||||
super(eoc);
|
||||
this.usesVariousArt = eoc.usesVariousArt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EmblemOfCard copy() {
|
||||
return new EmblemOfCard(this);
|
||||
|
|
@ -101,9 +99,5 @@ public final class EmblemOfCard extends Emblem {
|
|||
// super method would try and fail to find the emblem image here
|
||||
// (not sure why that would be setSoureObject's job; we get our image during construction)
|
||||
}
|
||||
|
||||
public boolean getUsesVariousArt() {
|
||||
return usesVariousArt;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ public class RadiationEmblem extends Emblem {
|
|||
TokenInfo foundInfo = TokenRepository.instance.findPreferredTokenInfoForXmage(TokenRepository.XMAGE_IMAGE_NAME_RADIATION, null);
|
||||
if (foundInfo != null) {
|
||||
this.setExpansionSetCode(foundInfo.getSetCode());
|
||||
this.setUsesVariousArt(false);
|
||||
this.setCardNumber("");
|
||||
this.setImageFileName(""); // use default
|
||||
this.setImageNumber(foundInfo.getImageNumber());
|
||||
|
|
|
|||
|
|
@ -145,10 +145,10 @@ public class PermanentCard extends PermanentImpl {
|
|||
this.rarity = card.getRarity();
|
||||
|
||||
this.setExpansionSetCode(card.getExpansionSetCode());
|
||||
this.setUsesVariousArt(card.getUsesVariousArt());
|
||||
this.setCardNumber(card.getCardNumber());
|
||||
this.setImageFileName(card.getImageFileName());
|
||||
this.setImageNumber(card.getImageNumber());
|
||||
this.usesVariousArt = card.getUsesVariousArt();
|
||||
|
||||
if (card.getSecondCardFace() != null) {
|
||||
this.secondSideCardClazz = card.getSecondCardFace().getClass();
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
|
|||
// - use random set code
|
||||
// - use default set code
|
||||
|
||||
// token from a card - must use card image instead (example: Embalm ability)
|
||||
// token from a card - must use card image instead, no need to choose new image (example: Embalm ability, copy of card, etc)
|
||||
if (!token.getCardNumber().isEmpty()) {
|
||||
return new TokenInfo(TokenType.TOKEN, token.getName(), token.getExpansionSetCode(), 0);
|
||||
}
|
||||
|
|
@ -292,13 +292,17 @@ public abstract class TokenImpl extends MageObjectImpl implements Token {
|
|||
// front side
|
||||
TokenInfo tokenInfo = TokenImpl.generateTokenInfo((TokenImpl) token, game, source == null ? null : source.getSourceId());
|
||||
token.setExpansionSetCode(tokenInfo.getSetCode());
|
||||
//token.setCardNumber(""); // if token from a card then don't change a card number
|
||||
token.setImageNumber(tokenInfo.getImageNumber());
|
||||
// if token from a card then keep card number and var art info
|
||||
//token.setCardNumber("");
|
||||
//token.setUsesVariousArt(false);
|
||||
if (token.getBackFace() != null) {
|
||||
// back side
|
||||
tokenInfo = TokenImpl.generateTokenInfo((TokenImpl) token.getBackFace(), game, source == null ? null : source.getSourceId());
|
||||
token.getBackFace().setExpansionSetCode(tokenInfo.getSetCode());
|
||||
token.getBackFace().setImageNumber(tokenInfo.getImageNumber());
|
||||
//token.setCardNumber("");
|
||||
//token.setUsesVariousArt(false);
|
||||
}
|
||||
|
||||
List<Permanent> needTokens = new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -137,6 +137,16 @@ public class StackAbility extends StackObjectImpl implements Ability {
|
|||
throw new IllegalStateException("Wrong code usage: you can't change set code for the stack ability");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getUsesVariousArt() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUsesVariousArt(boolean usesVariousArt) {
|
||||
throw new IllegalStateException("Wrong code usage: you can't change usesVariousArt for the stack ability");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCardNumber() {
|
||||
return "";
|
||||
|
|
|
|||
|
|
@ -2173,19 +2173,17 @@ public final class CardUtil {
|
|||
String needImageFileName;
|
||||
int needImageNumber;
|
||||
boolean needUsesVariousArt = false;
|
||||
if (copyFromObject instanceof Card) {
|
||||
needUsesVariousArt = ((Card) copyFromObject).getUsesVariousArt();
|
||||
}
|
||||
|
||||
needSetCode = copyFromObject.getExpansionSetCode();
|
||||
needCardNumber = copyFromObject.getCardNumber();
|
||||
needImageFileName = copyFromObject.getImageFileName();
|
||||
needImageNumber = copyFromObject.getImageNumber();
|
||||
needUsesVariousArt = copyFromObject.getUsesVariousArt();
|
||||
|
||||
if (targetObject instanceof Permanent) {
|
||||
copySetAndCardNumber((Permanent) targetObject, needSetCode, needCardNumber, needImageFileName, needImageNumber, needUsesVariousArt);
|
||||
} else if (targetObject instanceof Token) {
|
||||
copySetAndCardNumber((Token) targetObject, needSetCode, needCardNumber, needImageFileName, needImageNumber);
|
||||
copySetAndCardNumber((Token) targetObject, needSetCode, needCardNumber, needImageFileName, needImageNumber, needUsesVariousArt);
|
||||
} else if (targetObject instanceof Card) {
|
||||
copySetAndCardNumber((Card) targetObject, needSetCode, needCardNumber, needImageFileName, needImageNumber, needUsesVariousArt);
|
||||
} else {
|
||||
|
|
@ -2197,28 +2195,34 @@ public final class CardUtil {
|
|||
if (targetPermanent instanceof PermanentCard
|
||||
|| targetPermanent instanceof PermanentToken) {
|
||||
targetPermanent.setExpansionSetCode(newSetCode);
|
||||
targetPermanent.setUsesVariousArt(usesVariousArt);
|
||||
targetPermanent.setCardNumber(newCardNumber);
|
||||
targetPermanent.setImageFileName(newImageFileName);
|
||||
targetPermanent.setImageNumber(newImageNumber);
|
||||
targetPermanent.setUsesVariousArt(usesVariousArt);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Wrong code usage: un-supported target permanent type: " + targetPermanent.getClass().getSimpleName());
|
||||
}
|
||||
}
|
||||
|
||||
private static void copySetAndCardNumber(Token targetToken, String newSetCode, String newCardNumber, String newImageFileName, Integer newImageNumber) {
|
||||
private static void copySetAndCardNumber(Token targetToken, String newSetCode, String newCardNumber, String newImageFileName, Integer newImageNumber, boolean newUsesVariousArt) {
|
||||
targetToken.setExpansionSetCode(newSetCode);
|
||||
targetToken.setCardNumber(newCardNumber);
|
||||
targetToken.setImageFileName(newImageFileName);
|
||||
targetToken.setImageNumber(newImageNumber);
|
||||
|
||||
// runtime check
|
||||
if (newUsesVariousArt && newCardNumber.isEmpty()) {
|
||||
throw new IllegalArgumentException("Wrong code usage: usesVariousArt can be used for token from card only");
|
||||
}
|
||||
targetToken.setUsesVariousArt(newUsesVariousArt);
|
||||
}
|
||||
|
||||
private static void copySetAndCardNumber(Card targetCard, String newSetCode, String newCardNumber, String newImageFileName, Integer newImageNumber, boolean usesVariousArt) {
|
||||
targetCard.setExpansionSetCode(newSetCode);
|
||||
targetCard.setUsesVariousArt(usesVariousArt);
|
||||
targetCard.setCardNumber(newCardNumber);
|
||||
targetCard.setImageFileName(newImageFileName);
|
||||
targetCard.setImageNumber(newImageNumber);
|
||||
targetCard.setUsesVariousArt(usesVariousArt);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue