Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions forge-core/src/main/java/forge/item/IPaperCard.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,6 @@ public interface IPaperCard extends InventoryItem, Serializable {
List<ICardFace> getAllFaces();
String getCardImageKey();
String getCardAltImageKey();
String getCardWSpecImageKey();
String getCardUSpecImageKey();
String getCardBSpecImageKey();
String getCardRSpecImageKey();
String getCardGSpecImageKey();

boolean isRebalanced();

Expand Down
60 changes: 0 additions & 60 deletions forge-core/src/main/java/forge/item/PaperCard.java
Original file line number Diff line number Diff line change
Expand Up @@ -508,66 +508,6 @@ public String getCardAltImageKey() {
return cardAltImageKey;
}

private String cardWSpecImageKey = null;
@Override
public String getCardWSpecImageKey() {
if (this.cardWSpecImageKey == null) {
if (this.rules.getSplitType() == CardSplitType.Specialize)
this.cardWSpecImageKey = ImageUtil.getImageKey(this, "white", true);
else // just use cardImageKey
this.cardWSpecImageKey = ImageUtil.getImageKey(this, "", true);
}
return cardWSpecImageKey;
}

private String cardUSpecImageKey = null;
@Override
public String getCardUSpecImageKey() {
if (this.cardUSpecImageKey == null) {
if (this.rules.getSplitType() == CardSplitType.Specialize)
this.cardUSpecImageKey = ImageUtil.getImageKey(this, "blue", true);
else // just use cardImageKey
this.cardUSpecImageKey = ImageUtil.getImageKey(this, "", true);
}
return cardUSpecImageKey;
}

private String cardBSpecImageKey = null;
@Override
public String getCardBSpecImageKey() {
if (this.cardBSpecImageKey == null) {
if (this.rules.getSplitType() == CardSplitType.Specialize)
this.cardBSpecImageKey = ImageUtil.getImageKey(this, "black", true);
else // just use cardImageKey
this.cardBSpecImageKey = ImageUtil.getImageKey(this, "", true);
}
return cardBSpecImageKey;
}

private String cardRSpecImageKey = null;
@Override
public String getCardRSpecImageKey() {
if (this.cardRSpecImageKey == null) {
if (this.rules.getSplitType() == CardSplitType.Specialize)
this.cardRSpecImageKey = ImageUtil.getImageKey(this, "red", true);
else // just use cardImageKey
this.cardRSpecImageKey = ImageUtil.getImageKey(this, "", true);
}
return cardRSpecImageKey;
}

private String cardGSpecImageKey = null;
@Override
public String getCardGSpecImageKey() {
if (this.cardGSpecImageKey == null) {
if (this.rules.getSplitType() == CardSplitType.Specialize)
this.cardGSpecImageKey = ImageUtil.getImageKey(this, "green", true);
else // just use cardImageKey
this.cardGSpecImageKey = ImageUtil.getImageKey(this, "", true);
}
return cardGSpecImageKey;
}

@Override
public boolean hasBackFace(){
CardSplitType cst = this.rules.getSplitType();
Expand Down
25 changes: 0 additions & 25 deletions forge-core/src/main/java/forge/item/PaperToken.java
Original file line number Diff line number Diff line change
Expand Up @@ -196,31 +196,6 @@ public String getCardAltImageKey() {
return getImageKey(true);
}

@Override
public String getCardWSpecImageKey() {
return getImageKey(false);
}

@Override
public String getCardUSpecImageKey() {
return getImageKey(false);
}

@Override
public String getCardBSpecImageKey() {
return getImageKey(false);
}

@Override
public String getCardRSpecImageKey() {
return getImageKey(false);
}

@Override
public String getCardGSpecImageKey() {
return getImageKey(false);
}

// InventoryItem
@Override
public String getImageKey(boolean altState) {
Expand Down
21 changes: 17 additions & 4 deletions forge-core/src/main/java/forge/util/ImageUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import forge.card.CardEdition;
import forge.card.CardRules;
import forge.card.CardSplitType;
import forge.card.MagicColor;
import forge.item.IPaperCard;
import forge.item.PaperCard;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -97,7 +98,7 @@ public static String transformKey(String imageKey) {
return key;
}

public static String getImageRelativePath(PaperCard cp, String face, boolean includeSet, boolean isDownloadUrl) {
public static String getImageRelativePath(IPaperCard cp, String face, boolean includeSet, boolean isDownloadUrl) {
final String nameToUse = cp == null ? null : getNameToUse(cp, face);
if (nameToUse == null) {
return null;
Expand Down Expand Up @@ -153,7 +154,7 @@ public static String getImageRelativePath(PaperCard cp, String face, boolean inc
}
}

public static String getNameToUse(PaperCard cp, String face) {
public static String getNameToUse(IPaperCard cp, String face) {
final CardRules card = cp.getRules();
if (face.equals("back")) {
if (cp.hasBackFace())
Expand Down Expand Up @@ -197,15 +198,14 @@ public static String getNameToUse(PaperCard cp, String face) {
return cp.getName();
}

public static String getImageKey(PaperCard cp, String face, boolean includeSet) {
public static String getImageKey(IPaperCard cp, String face, boolean includeSet) {
return getImageRelativePath(cp, face, includeSet, false);
}

public static String getDownloadUrl(PaperCard cp, String face) {
return getImageRelativePath(cp, face, true, true);
}


public static String getScryfallDownloadUrl(PaperCard cp, String face, String setCode, String langCode, boolean useArtCrop){
final Pattern funnyCardCollectorNumberPattern = Pattern.compile("^F\\d+");
String editionCode;
Expand Down Expand Up @@ -260,6 +260,13 @@ public static String getScryfallDownloadUrl(PaperCard cp, String face, String se
faceParam = (face.equals("back") && cp.getRules().getSplitType() != CardSplitType.Flip
? "&face=back"
: "&face=front");
} else if (cp.getRules().getSplitType() == CardSplitType.Specialize) {
// Specialize faces have their own Scryfall entries with collector
// number = base number + color letter (e.g. "2w", "2u", "2b", "2r", "2g")
String colorSuffix = specFaceToCollectorSuffix(face);
if (colorSuffix != null) {
cardCollectorNumber += colorSuffix;
}
}

if (cardCollectorNumber.endsWith("☇")) {
Expand All @@ -284,6 +291,12 @@ public static String getScryfallTokenDownloadUrl(String collectorNumber, String
langCode, versionParam, faceParam);
}

private static String specFaceToCollectorSuffix(String face) {
Comment thread
tool4ever marked this conversation as resolved.
MagicColor.Color color = MagicColor.Color.fromName(face);
if (color == MagicColor.Color.COLORLESS) return null;
return color.getShortName().toLowerCase();
}

private static String encodeUtf8(String s) {
try {
return URLEncoder.encode(s, "UTF-8");
Expand Down
24 changes: 0 additions & 24 deletions forge-game/src/main/java/forge/game/card/Card.java
Original file line number Diff line number Diff line change
Expand Up @@ -6355,29 +6355,6 @@ public final void setImageKey(final String iFN) {
if(uiCard != null)
uiCard.currentState.setImageKey(iFN);
}
public final void setImageKey(final IPaperCard ipc, final CardStateName stateName) {
if (ipc == null)
return;
switch (stateName) {
case SpecializeB:
setImageKey(ipc.getCardBSpecImageKey());
break;
case SpecializeR:
setImageKey(ipc.getCardRSpecImageKey());
break;
case SpecializeG:
setImageKey(ipc.getCardGSpecImageKey());
break;
case SpecializeU:
setImageKey(ipc.getCardUSpecImageKey());
break;
case SpecializeW:
setImageKey(ipc.getCardWSpecImageKey());
break;
default:
break;
}
}

public String getImageKey(CardStateName state) {
if (!getRenderForUI()) {
Expand Down Expand Up @@ -6700,7 +6677,6 @@ public boolean isSpecialized() {
}
public final void setSpecialized(final boolean bool) {
specialized = bool;
setImageKey(getPaperCard(), getCurrentStateName());
}
public final boolean canSpecialize() {
return getRules() != null && getRules().getSplitType() == CardSplitType.Specialize;
Expand Down
21 changes: 2 additions & 19 deletions forge-gui-desktop/src/main/java/forge/ImageCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,7 @@ public static Pair<BufferedImage, Boolean> getCardOriginalImageInfo(String image
}

// return the pair of image and a flag to indicate if it is a placeholder image.
private static Pair<BufferedImage, Boolean> getOriginalImageInternal(String imageKey, boolean useDefaultIfNotFound,
CardView cardView) {
private static Pair<BufferedImage, Boolean> getOriginalImageInternal(String imageKey, boolean useDefaultIfNotFound, CardView cardView) {
if (null == imageKey) {
return Pair.of(null, false);
}
Expand Down Expand Up @@ -231,23 +230,7 @@ private static Pair<BufferedImage, Boolean> getOriginalImageInternal(String imag
if (altState) {
imageKey = ipc.getCardAltImageKey();
} else if (!specColor.isEmpty()) {
switch (specColor) {
case "white":
imageKey = ipc.getCardWSpecImageKey();
break;
case "blue":
imageKey = ipc.getCardUSpecImageKey();
break;
case "black":
imageKey = ipc.getCardBSpecImageKey();
break;
case "red":
imageKey = ipc.getCardRSpecImageKey();
break;
case "green":
imageKey = ipc.getCardGSpecImageKey();
break;
}
imageKey = ImageUtil.getImageKey(ipc, specColor, true);
} else {
imageKey = ipc.getCardImageKey();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,23 +95,7 @@ public static BufferedImage getImageXlhq(final CardStateView state) {
if (altState) {
imageKey = card.getCardAltImageKey();
} else if (!specColor.isEmpty()) {
switch (specColor) {
case "white":
imageKey = card.getCardWSpecImageKey();
break;
case "blue":
imageKey = card.getCardUSpecImageKey();
break;
case "black":
imageKey = card.getCardBSpecImageKey();
break;
case "red":
imageKey = card.getCardRSpecImageKey();
break;
case "green":
imageKey = card.getCardGSpecImageKey();
break;
}
imageKey = ImageUtil.getImageKey(card, specColor, true);
} else {
imageKey = card.getCardImageKey();
}
Expand Down
49 changes: 44 additions & 5 deletions forge-gui-mobile/src/forge/assets/ImageCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,26 @@ public boolean imageKeyFileExists(String imageKey) {
return paperCard.hasImage();
} else {
final boolean backFace = imageKey.endsWith(ImageKeys.BACKFACE_POSTFIX);
final String cardfilename = backFace ? paperCard.getCardAltImageKey() : paperCard.getCardImageKey();
String specColor = "";
if (imageKey.endsWith(ImageKeys.SPECFACE_W)) {
specColor = "white";
} else if (imageKey.endsWith(ImageKeys.SPECFACE_U)) {
specColor = "blue";
} else if (imageKey.endsWith(ImageKeys.SPECFACE_B)) {
specColor = "black";
} else if (imageKey.endsWith(ImageKeys.SPECFACE_R)) {
specColor = "red";
} else if (imageKey.endsWith(ImageKeys.SPECFACE_G)) {
specColor = "green";
}
String cardfilename;
if (backFace) {
cardfilename = paperCard.getCardAltImageKey();
} else if (!specColor.isEmpty()) {
cardfilename = ImageUtil.getImageKey(paperCard, specColor, true);
} else {
cardfilename = paperCard.getCardImageKey();
}
return ImageKeys.getCachedCardsFile(cardfilename) != null;
}
} else if (prefix.equals(ImageKeys.TOKEN_PREFIX)) {
Expand Down Expand Up @@ -240,13 +259,33 @@ public Texture getImage(String imageKey, boolean useDefaultIfNotFound, boolean o
}

boolean altState = imageKey.endsWith(ImageKeys.BACKFACE_POSTFIX);
if (altState) {
imageKey = imageKey.substring(0, imageKey.length() - ImageKeys.BACKFACE_POSTFIX.length());
String specColor = "";
if (imageKey.endsWith(ImageKeys.SPECFACE_W)) {
specColor = "white";
} else if (imageKey.endsWith(ImageKeys.SPECFACE_U)) {
specColor = "blue";
} else if (imageKey.endsWith(ImageKeys.SPECFACE_B)) {
specColor = "black";
} else if (imageKey.endsWith(ImageKeys.SPECFACE_R)) {
specColor = "red";
} else if (imageKey.endsWith(ImageKeys.SPECFACE_G)) {
specColor = "green";
}
if (altState)
imageKey = imageKey.substring(0, imageKey.length() - ImageKeys.BACKFACE_POSTFIX.length());
if (!specColor.isEmpty())
imageKey = imageKey.substring(0, imageKey.length() - ImageKeys.SPECFACE_W.length());
if (imageKey.startsWith(ImageKeys.CARD_PREFIX)) {
PaperCard card = ImageUtil.getPaperCardFromImageKey(imageKey);
if (card != null)
imageKey = altState ? card.getCardAltImageKey() : card.getCardImageKey();
if (card != null) {
if (altState) {
imageKey = card.getCardAltImageKey();
} else if (!specColor.isEmpty()) {
imageKey = ImageUtil.getImageKey(card, specColor, true);
} else {
imageKey = card.getCardImageKey();
}
}
} else if (imageKey.startsWith(ImageKeys.TOKEN_PREFIX)) {
PaperToken token = ImageUtil.getPaperTokenFromImageKey(imageKey);
if (token != null)
Expand Down
Loading