Add FPS Display, Add Preload Extended Art, Add Border Images

This commit is contained in:
Anthony Calosa
2019-10-10 14:31:22 +08:00
parent 147b20e5f4
commit 98e86f17bd
8 changed files with 84 additions and 4 deletions

View File

@@ -35,6 +35,8 @@ import forge.util.FileUtil;
import forge.util.Localizer; import forge.util.Localizer;
import forge.util.Utils; import forge.util.Utils;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Stack; import java.util.Stack;
@@ -136,8 +138,32 @@ public class Forge implements ApplicationListener {
}); });
} }
private void preloadExtendedArt() {
List<String> keys = new ArrayList<>();
File[] directories = new File(ForgeConstants.CACHE_CARD_PICS_DIR).listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if (!file.getName().startsWith("MPS_"))
return false;
return file.isDirectory();
}
});
for (File folder : directories) {
File[] files = new File(folder.toString()).listFiles();
for (File file : files) {
if (file.isFile()) {
keys.add(folder.getName() + "/" +file.getName().replace(".jpg","").replace(".png",""));
}
}
}
for (String artKeys : keys) {
ImageCache.preloadCache(artKeys);
}
}
private void afterDbLoaded() { private void afterDbLoaded() {
stopContinuousRendering(); //save power consumption by disabling continuous rendering once assets loaded stopContinuousRendering(); //save power consumption by disabling continuous rendering once assets loaded
preloadExtendedArt(); // Preloads Extended Art to Cache...
FSkin.loadFull(splashScreen); FSkin.loadFull(splashScreen);

View File

@@ -282,6 +282,9 @@ public enum FSkinImage implements FImage {
IMG_ABILITY_HEXPROOF_UB (FSkinProp.IMG_ABILITY_HEXPROOF_UB, SourceFile.ABILITIES), IMG_ABILITY_HEXPROOF_UB (FSkinProp.IMG_ABILITY_HEXPROOF_UB, SourceFile.ABILITIES),
//token icon //token icon
IMG_ABILITY_TOKEN (FSkinProp.IMG_ABILITY_TOKEN, SourceFile.ABILITIES), IMG_ABILITY_TOKEN (FSkinProp.IMG_ABILITY_TOKEN, SourceFile.ABILITIES),
//border
IMG_BORDER_BLACK (FSkinProp.IMG_BORDER_BLACK, SourceFile.BORDERS),
IMG_BORDER_WHITE (FSkinProp.IMG_BORDER_WHITE, SourceFile.BORDERS),
//PROTECT ICONS //PROTECT ICONS
IMG_ABILITY_PROTECT_ALL (FSkinProp.IMG_ABILITY_PROTECT_ALL, SourceFile.ABILITIES), IMG_ABILITY_PROTECT_ALL (FSkinProp.IMG_ABILITY_PROTECT_ALL, SourceFile.ABILITIES),
IMG_ABILITY_PROTECT_B (FSkinProp.IMG_ABILITY_PROTECT_B, SourceFile.ABILITIES), IMG_ABILITY_PROTECT_B (FSkinProp.IMG_ABILITY_PROTECT_B, SourceFile.ABILITIES),
@@ -308,6 +311,7 @@ public enum FSkinImage implements FImage {
OLD_FOILS(ForgeConstants.SPRITE_OLD_FOILS_FILE), OLD_FOILS(ForgeConstants.SPRITE_OLD_FOILS_FILE),
TROPHIES(ForgeConstants.SPRITE_TROPHIES_FILE), TROPHIES(ForgeConstants.SPRITE_TROPHIES_FILE),
ABILITIES(ForgeConstants.SPRITE_ABILITY_FILE), ABILITIES(ForgeConstants.SPRITE_ABILITY_FILE),
BORDERS(ForgeConstants.SPRITE_BORDER_FILE),
MANAICONS(ForgeConstants.SPRITE_MANAICONS_FILE), MANAICONS(ForgeConstants.SPRITE_MANAICONS_FILE),
PLANAR_CONQUEST(ForgeConstants.SPRITE_PLANAR_CONQUEST_FILE); PLANAR_CONQUEST(ForgeConstants.SPRITE_PLANAR_CONQUEST_FILE);

View File

@@ -64,6 +64,8 @@ public class ImageCache {
.loader(new ImageLoader()) .loader(new ImageLoader())
.build(); .build();
public static final Texture defaultImage; public static final Texture defaultImage;
public static FImage BlackBorder = FSkinImage.IMG_BORDER_BLACK;
public static FImage WhiteBorder = FSkinImage.IMG_BORDER_WHITE;
private static boolean imageLoaded, delayLoadRequested; private static boolean imageLoaded, delayLoadRequested;
public static void allowSingleLoad() { public static void allowSingleLoad() {
@@ -162,6 +164,20 @@ public class ImageCache {
} }
return image; return image;
} }
public static void preloadCache(String imageKey) {
if (StringUtils.isEmpty(imageKey)) {
return;
}
Texture image;
try { image = cache.get(imageKey); }
catch (final Exception ex) {
image = null;
}
if (image == null) {
image = defaultImage;
cache.put(imageKey, defaultImage);
}
}
public static TextureRegion croppedBorderImage(Texture image) { public static TextureRegion croppedBorderImage(Texture image) {
float rscale = 0.96f; float rscale = 0.96f;
int rw = Math.round(image.getWidth()*rscale); int rw = Math.round(image.getWidth()*rscale);
@@ -171,6 +187,25 @@ public class ImageCache {
TextureRegion rimage = new TextureRegion(image, rx, ry, rw, rh); TextureRegion rimage = new TextureRegion(image, rx, ry, rw, rh);
return rimage; return rimage;
} }
public static boolean isWhiteBordered(IPaperCard c) {
if (c == null)
return false;
CardEdition ed = FModel.getMagicDb().getEditions().get(c.getEdition());
if (ed != null && ed.isWhiteBorder())
return true;
return false;
}
public static boolean isWhiteBordered(CardView c) {
if (c == null)
return false;
CardView.CardStateView state = c.getCurrentState();
CardEdition ed = FModel.getMagicDb().getEditions().get(state.getSetCode());
if (ed != null && ed.isWhiteBorder() && state.getFoilIndex() == 0)
return true;
return false;
}
public static Color borderColor(IPaperCard c) { public static Color borderColor(IPaperCard c) {
if (c == null) if (c == null)
return Color.valueOf("#171717"); return Color.valueOf("#171717");
@@ -207,4 +242,14 @@ public class ImageCache {
return true; return true;
return false; return false;
} }
public static FImage getBorderImage(CardView c) {
if (isWhiteBordered(c))
return WhiteBorder;
return BlackBorder;
}
public static FImage getBorderImage(IPaperCard c) {
if (isWhiteBordered(c))
return WhiteBorder;
return BlackBorder;
}
} }

View File

@@ -21,7 +21,7 @@ final class ImageLoader extends CacheLoader<String, Texture> {
if (key.length() > 4){ if (key.length() > 4){
if ((key.substring(0,4).contains("MPS_"))) //TODO add sets to get all extended art??? if ((key.substring(0,4).contains("MPS_"))) //TODO add sets to get all extended art???
extendedArt = true; extendedArt = true;
//use generated extended art... very few cards have this so little performance lost //use generated extended art... it will preload the cache at startup so... yeah! :)
} }
File file = ImageKeys.getImageFile(key); File file = ImageKeys.getImageFile(key);
if (file != null) { if (file != null) {

View File

@@ -391,7 +391,7 @@ public class CardImageRenderer {
if (ImageCache.isExtendedArt(card)) if (ImageCache.isExtendedArt(card))
g.drawImage(image, x, y, w, h); g.drawImage(image, x, y, w, h);
else { else {
g.drawfillBorder(3, ImageCache.borderColor(card), x, y, w, h, radius); g.drawImage(ImageCache.getBorderImage(card), 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), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f);
} }
} }

View File

@@ -405,7 +405,7 @@ public class CardRenderer {
if (ImageCache.isExtendedArt(pc)) if (ImageCache.isExtendedArt(pc))
g.drawImage(image, x, y, w, h); g.drawImage(image, x, y, w, h);
else { else {
g.drawfillBorder(3, ImageCache.borderColor(pc), x, y, w, h, radius); 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), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f);
} }
} }
@@ -456,7 +456,7 @@ public class CardRenderer {
if (ImageCache.isExtendedArt(card)) if (ImageCache.isExtendedArt(card))
g.drawImage(image, x, y, w, h); g.drawImage(image, x, y, w, h);
else { else {
g.drawfillBorder(3, ImageCache.borderColor(card), x, y, w, h, radius); g.drawImage(ImageCache.getBorderImage(card), 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), x + radius / 2.4f, y + radius / 2, w * 0.96f, h * 0.96f);
} }
} }

View File

@@ -322,6 +322,9 @@ public enum FSkinProp {
IMG_ABILITY_HEXPROOF_UB (new int[] {166, 494, 80, 80}, PropType.ABILITY), IMG_ABILITY_HEXPROOF_UB (new int[] {166, 494, 80, 80}, PropType.ABILITY),
//token icon //token icon
IMG_ABILITY_TOKEN (new int[] {330, 494, 80, 80}, PropType.ABILITY), IMG_ABILITY_TOKEN (new int[] {330, 494, 80, 80}, PropType.ABILITY),
//border
IMG_BORDER_BLACK (new int[] {2, 2, 672, 936}, PropType.BORDERS),
IMG_BORDER_WHITE (new int[] {676, 2, 672, 936}, PropType.BORDERS),
//Protection From //Protection From
IMG_ABILITY_PROTECT_ALL (new int[] {248, 84, 80, 80}, PropType.ABILITY), IMG_ABILITY_PROTECT_ALL (new int[] {248, 84, 80, 80}, PropType.ABILITY),
IMG_ABILITY_PROTECT_B (new int[] {330, 84, 80, 80}, PropType.ABILITY), IMG_ABILITY_PROTECT_B (new int[] {330, 84, 80, 80}, PropType.ABILITY),
@@ -374,6 +377,7 @@ public enum FSkinProp {
OLD_FOIL, OLD_FOIL,
TROPHY, TROPHY,
ABILITY, ABILITY,
BORDERS,
MANAICONS, MANAICONS,
PLANAR_CONQUEST, PLANAR_CONQUEST,
FAVICON FAVICON

View File

@@ -94,6 +94,7 @@ public final class ForgeConstants {
public static final String SPRITE_OLD_FOILS_FILE = "sprite_old_foils.png"; public static final String SPRITE_OLD_FOILS_FILE = "sprite_old_foils.png";
public static final String SPRITE_TROPHIES_FILE = "sprite_trophies.png"; public static final String SPRITE_TROPHIES_FILE = "sprite_trophies.png";
public static final String SPRITE_ABILITY_FILE = "sprite_ability.png"; public static final String SPRITE_ABILITY_FILE = "sprite_ability.png";
public static final String SPRITE_BORDER_FILE = "sprite_border.png";
public static final String SPRITE_MANAICONS_FILE = "sprite_manaicons.png"; public static final String SPRITE_MANAICONS_FILE = "sprite_manaicons.png";
public static final String SPRITE_AVATARS_FILE = "sprite_avatars.png"; public static final String SPRITE_AVATARS_FILE = "sprite_avatars.png";
public static final String SPRITE_FAVICONS_FILE = "sprite_favicons.png"; public static final String SPRITE_FAVICONS_FILE = "sprite_favicons.png";