Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
14 changes: 14 additions & 0 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 @@ -260,6 +261,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 +292,12 @@ public static String getScryfallTokenDownloadUrl(String collectorNumber, String
langCode, versionParam, faceParam);
}

private static String specFaceToCollectorSuffix(String face) {
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
22 changes: 3 additions & 19 deletions forge-gui-desktop/src/main/java/forge/ImageCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
import forge.game.player.PlayerView;
import forge.gui.FThreads;
import forge.gui.GuiBase;
import forge.item.IPaperCard;
import forge.item.PaperCard;
import forge.item.InventoryItem;
import forge.localinstance.properties.ForgeConstants;
import forge.localinstance.properties.ForgePreferences;
Expand Down Expand Up @@ -207,7 +207,7 @@ private static Pair<BufferedImage, Boolean> getOriginalImageInternal(String imag
return Pair.of(null, false);
}

IPaperCard ipc = null;
PaperCard ipc = null;
boolean altState = imageKey.endsWith(ImageKeys.BACKFACE_POSTFIX);
String specColor = "";
if (imageKey.endsWith(ImageKeys.SPECFACE_W)) {
Expand All @@ -231,23 +231,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