From d0a23fbf14c2e7b05aa8279df02a2d30d16f4e7e Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 16 Nov 2019 17:36:30 +0800 Subject: [PATCH] Add support for ".fullborder" cards (to differentiate full image cards and full image cards with full borders, so it will only crop full image cards with full borders) --- forge-core/src/main/java/forge/ImageKeys.java | 6 +++++- forge-gui-mobile/src/forge/assets/ImageCache.java | 4 +++- forge-gui-mobile/src/forge/card/CardImage.java | 3 ++- forge-gui-mobile/src/forge/card/CardImageRenderer.java | 7 ++++--- forge-gui-mobile/src/forge/card/CardRenderer.java | 9 ++++++--- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/forge-core/src/main/java/forge/ImageKeys.java b/forge-core/src/main/java/forge/ImageKeys.java index 3e5192ba642..a8425783a25 100644 --- a/forge-core/src/main/java/forge/ImageKeys.java +++ b/forge-core/src/main/java/forge/ImageKeys.java @@ -111,7 +111,11 @@ public final class ImageKeys { file = findFile(dir, TextUtil.fastReplace(filename, "AE", "Ae")); if (file != null) { return file; } } - + //try fullborder... + if (filename.contains(".full")) { + file = findFile(dir, TextUtil.fastReplace(filename, ".full", ".fullborder")); + if (file != null) { return file; } + } // some S00 cards are really part of 6ED String s2kAlias = getSetFolder("S00"); if (filename.startsWith(s2kAlias)) { diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index 2ea5a109f4e..af1013a6a86 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -167,7 +167,9 @@ public class ImageCache { public static void preloadCache(Iterable keys) { cache.getAll(keys); } - public static TextureRegion croppedBorderImage(Texture image) { + public static TextureRegion croppedBorderImage(Texture image, boolean fullborder) { + if (!fullborder) + return new TextureRegion(image); float rscale = 0.96f; int rw = Math.round(image.getWidth()*rscale); int rh = Math.round(image.getHeight()*rscale); diff --git a/forge-gui-mobile/src/forge/card/CardImage.java b/forge-gui-mobile/src/forge/card/CardImage.java index ae4d4a5456a..ef841355c75 100644 --- a/forge-gui-mobile/src/forge/card/CardImage.java +++ b/forge-gui-mobile/src/forge/card/CardImage.java @@ -49,12 +49,13 @@ public class CardImage implements FImage { } else { if (Forge.enableUIMask) { + boolean fullborder = image.toString().contains(".fullborder."); if (ImageCache.isExtendedArt(card)) g.drawImage(image, x, y, w, h); else { float radius = (h - w)/8; g.drawfillBorder(3, ImageCache.borderColor(card), x, y, w, h, radius); - g.drawImage(ImageCache.croppedBorderImage(image), x+radius/2.2f, y+radius/2, w*0.96f, h*0.96f); + g.drawImage(ImageCache.croppedBorderImage(image, fullborder), x+radius/2.2f, y+radius/2, w*0.96f, h*0.96f); } } else diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index d0970b271ca..ee03ccc5be2 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -332,6 +332,7 @@ public class CardImageRenderer { public static void drawZoom(Graphics g, CardView card, GameView gameView, boolean altState, float x, float y, float w, float h, float dispW, float dispH, boolean isCurrentCard) { boolean canshow = MatchController.instance.mayView(card); final Texture image = ImageCache.getImage(card.getState(altState).getImageKey(MatchController.instance.getLocalPlayers()), true); + boolean fullborder = image.toString().contains(".fullborder."); FImage sleeves = MatchController.getPlayerSleeve(card.getOwner()); if (image == null) { //draw details if can't draw zoom drawDetails(g, card, gameView, altState, x, y, w, h); @@ -363,7 +364,7 @@ public class CardImageRenderer { g.drawRotatedImage(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, -90); - g.drawRotatedImage(ImageCache.croppedBorderImage(image), new_x+radius/2, new_y+radius/2, new_w*0.96f, new_h*0.96f, (new_x+radius/2) + (new_w*0.96f) / 2, (new_y+radius/2) + (new_h*0.96f) / 2, -90); + g.drawRotatedImage(ImageCache.croppedBorderImage(image, fullborder), new_x+radius/2, new_y+radius/2, new_w*0.96f, new_h*0.96f, (new_x+radius/2) + (new_w*0.96f) / 2, (new_y+radius/2) + (new_h*0.96f) / 2, -90); } } else @@ -375,7 +376,7 @@ public class CardImageRenderer { g.drawRotatedImage(image, new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); else { g.drawRotatedImage(FSkin.getBorders().get(ImageCache.getFSkinBorders(card)), new_x, new_y, new_w, new_h, new_x + new_w / 2, new_y + new_h / 2, isAftermath ? 90 : -90); - g.drawRotatedImage(ImageCache.croppedBorderImage(image), new_x + radius / 2, new_y + radius / 2, new_w * 0.96f, new_h * 0.96f, (new_x + radius / 2) + (new_w * 0.96f) / 2, (new_y + radius / 2) + (new_h * 0.96f) / 2, isAftermath ? 90 : -90); + g.drawRotatedImage(ImageCache.croppedBorderImage(image, fullborder), new_x + radius / 2, new_y + radius / 2, new_w * 0.96f, new_h * 0.96f, (new_x + radius / 2) + (new_w * 0.96f) / 2, (new_y + radius / 2) + (new_h * 0.96f) / 2, isAftermath ? 90 : -90); } } else @@ -387,7 +388,7 @@ public class CardImageRenderer { g.drawImage(image, x, y, w, h); else { g.drawImage(ImageCache.getBorderImage(card, canshow), x, y, w, h); - g.drawImage(ImageCache.croppedBorderImage(image), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f); + g.drawImage(ImageCache.croppedBorderImage(image, fullborder), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f); } } else { diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index 2da8a09ee8f..a3ae015086a 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -53,6 +53,7 @@ import forge.util.CardTranslation; import forge.util.Utils; import org.apache.commons.lang3.StringUtils; import forge.util.TextBounds; + import java.util.Arrays; import java.util.ArrayList; import java.util.HashMap; @@ -400,6 +401,7 @@ public class CardRenderer { public static void drawCard(Graphics g, IPaperCard pc, float x, float y, float w, float h, CardStackPosition pos) { Texture image = new RendererCachedCardImage(pc, false).getImage(); + boolean fullborder = image.toString().contains(".fullborder."); float radius = (h - w)/8; if (image != null) { @@ -412,7 +414,7 @@ public class CardRenderer { g.drawImage(image, x, y, w, h); else { g.drawImage(ImageCache.getBorderImage(pc), x, y, w, h); - g.drawImage(ImageCache.croppedBorderImage(image), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f); + g.drawImage(ImageCache.croppedBorderImage(image, fullborder), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f); } } else @@ -436,6 +438,7 @@ public class CardRenderer { public static void drawCard(Graphics g, CardView card, float x, float y, float w, float h, CardStackPosition pos, boolean rotate) { boolean canshow = MatchController.instance.mayView(card) && !ImageKeys.getTokenKey(ImageKeys.MORPH_IMAGE).equals(card.getCurrentState().getImageKey()); Texture image = new RendererCachedCardImage(card, false).getImage(); + boolean fullborder = image.toString().contains(".fullborder."); FImage sleeves = MatchController.getPlayerSleeve(card.getOwner()); float radius = (h - w)/8; @@ -451,7 +454,7 @@ public class CardRenderer { g.drawRotatedImage(image, x, y, w, h, x + w / 2, y + h / 2, -90); else { g.drawRotatedImage(FSkin.getBorders().get(0), x, y, w, h, x + w / 2, y + h / 2, -90); - g.drawRotatedImage(ImageCache.croppedBorderImage(image), x+radius/2.3f, y+radius/2, w*0.96f, h*0.96f, (x+radius/2.3f) + (w*0.96f) / 2, (y+radius/2) + (h*0.96f) / 2, -90); + g.drawRotatedImage(ImageCache.croppedBorderImage(image, fullborder), x+radius/2.3f, y+radius/2, w*0.96f, h*0.96f, (x+radius/2.3f) + (w*0.96f) / 2, (y+radius/2) + (h*0.96f) / 2, -90); } } else @@ -464,7 +467,7 @@ public class CardRenderer { else { boolean t = (card.getCurrentState().getOriginalColors() != card.getCurrentState().getColors()) || card.getCurrentState().hasChangeColors(); g.drawBorderImage(ImageCache.getBorderImage(card, canshow), ImageCache.getTint(card), x, y, w, h, t); //tint check for changed colors - g.drawImage(ImageCache.croppedBorderImage(image), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f); + g.drawImage(ImageCache.croppedBorderImage(image, fullborder), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f); } } else {