mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Refactor some the image loading code into forge-core
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -154,6 +154,7 @@ forge-core/.settings/org.eclipse.m2e.core.prefs -text
|
|||||||
forge-core/pom.xml -text
|
forge-core/pom.xml -text
|
||||||
forge-core/src/main/java/forge/CardStorageReader.java -text
|
forge-core/src/main/java/forge/CardStorageReader.java -text
|
||||||
forge-core/src/main/java/forge/FTrace.java -text
|
forge-core/src/main/java/forge/FTrace.java -text
|
||||||
|
forge-core/src/main/java/forge/ImageKeys.java -text
|
||||||
forge-core/src/main/java/forge/LobbyPlayer.java -text
|
forge-core/src/main/java/forge/LobbyPlayer.java -text
|
||||||
forge-core/src/main/java/forge/StaticData.java -text
|
forge-core/src/main/java/forge/StaticData.java -text
|
||||||
forge-core/src/main/java/forge/card/BoosterGenerator.java svneol=native#text/plain
|
forge-core/src/main/java/forge/card/BoosterGenerator.java svneol=native#text/plain
|
||||||
@@ -267,7 +268,6 @@ forge-game/.settings/org.eclipse.jdt.core.prefs -text
|
|||||||
forge-game/.settings/org.eclipse.m2e.core.prefs -text
|
forge-game/.settings/org.eclipse.m2e.core.prefs -text
|
||||||
forge-game/pom.xml -text
|
forge-game/pom.xml -text
|
||||||
forge-game/src/main/java/forge/GameCommand.java svneol=native#text/plain
|
forge-game/src/main/java/forge/GameCommand.java svneol=native#text/plain
|
||||||
forge-game/src/main/java/forge/ImageKeys.java -text
|
|
||||||
forge-game/src/main/java/forge/game/CardTraitBase.java -text
|
forge-game/src/main/java/forge/game/CardTraitBase.java -text
|
||||||
forge-game/src/main/java/forge/game/Direction.java -text
|
forge-game/src/main/java/forge/game/Direction.java -text
|
||||||
forge-game/src/main/java/forge/game/Game.java -text
|
forge-game/src/main/java/forge/game/Game.java -text
|
||||||
|
|||||||
158
forge-core/src/main/java/forge/ImageKeys.java
Normal file
158
forge-core/src/main/java/forge/ImageKeys.java
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
package forge;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import forge.card.CardDb;
|
||||||
|
import forge.item.*;
|
||||||
|
|
||||||
|
public class ImageKeys {
|
||||||
|
public static final String CARD_PREFIX = "c:";
|
||||||
|
public static final String TOKEN_PREFIX = "t:";
|
||||||
|
public static final String ICON_PREFIX = "i:";
|
||||||
|
public static final String BOOSTER_PREFIX = "b:";
|
||||||
|
public static final String FATPACK_PREFIX = "f:";
|
||||||
|
public static final String BOOSTERBOX_PREFIX = "x:";
|
||||||
|
public static final String PRECON_PREFIX = "p:";
|
||||||
|
public static final String TOURNAMENTPACK_PREFIX = "o:";
|
||||||
|
|
||||||
|
public static final String MORPH_IMAGE = "morph";
|
||||||
|
public static final String HIDDEN_CARD = TOKEN_PREFIX + MORPH_IMAGE;
|
||||||
|
|
||||||
|
public static final String BACKFACE_POSTFIX = "$alt";
|
||||||
|
|
||||||
|
private static String CACHE_CARD_PICS_DIR, CACHE_TOKEN_PICS_DIR, CACHE_ICON_PICS_DIR, CACHE_BOOSTER_PICS_DIR,
|
||||||
|
CACHE_FATPACK_PICS_DIR, CACHE_BOOSTERBOX_PICS_DIR, CACHE_PRECON_PICS_DIR, CACHE_TOURNAMENTPACK_PICS_DIR;
|
||||||
|
|
||||||
|
public static void initializeDirs(String cards, String tokens, String icons, String boosters,
|
||||||
|
String fatPacks, String boosterBoxes, String precons, String tournamentPacks) {
|
||||||
|
CACHE_CARD_PICS_DIR = cards;
|
||||||
|
CACHE_TOKEN_PICS_DIR = tokens;
|
||||||
|
CACHE_ICON_PICS_DIR = icons;
|
||||||
|
CACHE_BOOSTER_PICS_DIR = boosters;
|
||||||
|
CACHE_FATPACK_PICS_DIR = fatPacks;
|
||||||
|
CACHE_BOOSTERBOX_PICS_DIR = boosterBoxes;
|
||||||
|
CACHE_PRECON_PICS_DIR = precons;
|
||||||
|
CACHE_TOURNAMENTPACK_PICS_DIR = tournamentPacks;
|
||||||
|
}
|
||||||
|
|
||||||
|
// image file extensions for various formats in order of likelihood
|
||||||
|
// the last, empty, string is for keys that come in with an extension already in place
|
||||||
|
private static final String[] FILE_EXTENSIONS = { ".jpg", ".png", "" };
|
||||||
|
|
||||||
|
public static String getImageKey(PaperCard pc, boolean altState) {
|
||||||
|
return ImageKeys.CARD_PREFIX + pc.getName() + CardDb.NameSetSeparator + pc.getEdition() + CardDb.NameSetSeparator + pc.getArtIndex() + (altState ? BACKFACE_POSTFIX : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inventory items don't have to know how a certain client should draw them.
|
||||||
|
// That's why this method is not encapsulated and overloaded in the InventoryItem descendants
|
||||||
|
public static String getImageKey(InventoryItem ii, boolean altState) {
|
||||||
|
if (ii instanceof PaperCard) {
|
||||||
|
return getImageKey((PaperCard)ii, altState);
|
||||||
|
}
|
||||||
|
if (ii instanceof TournamentPack) {
|
||||||
|
return ImageKeys.TOURNAMENTPACK_PREFIX + ((TournamentPack)ii).getEdition();
|
||||||
|
}
|
||||||
|
if (ii instanceof BoosterPack) {
|
||||||
|
BoosterPack bp = (BoosterPack)ii;
|
||||||
|
int cntPics = StaticData.instance().getEditions().get(bp.getEdition()).getCntBoosterPictures();
|
||||||
|
String suffix = (1 >= cntPics) ? "" : ("_" + bp.getArtIndex());
|
||||||
|
return ImageKeys.BOOSTER_PREFIX + bp.getEdition() + suffix;
|
||||||
|
}
|
||||||
|
if (ii instanceof FatPack) {
|
||||||
|
return ImageKeys.FATPACK_PREFIX + ((FatPack)ii).getEdition();
|
||||||
|
}
|
||||||
|
if (ii instanceof BoosterBox) {
|
||||||
|
return ImageKeys.BOOSTERBOX_PREFIX + ((BoosterBox)ii).getEdition();
|
||||||
|
}
|
||||||
|
if (ii instanceof PreconDeck) {
|
||||||
|
return ImageKeys.PRECON_PREFIX + ((PreconDeck)ii).getImageFilename();
|
||||||
|
}
|
||||||
|
if (ii instanceof PaperToken) {
|
||||||
|
return ImageKeys.TOKEN_PREFIX + ((PaperToken)ii).getImageFilename();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getTokenKey(String tokenName) {
|
||||||
|
return ImageKeys.TOKEN_PREFIX + tokenName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static File getImageFile(String key) {
|
||||||
|
if (StringUtils.isEmpty(key)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final String dir;
|
||||||
|
final String filename;
|
||||||
|
if (key.startsWith(ImageKeys.TOKEN_PREFIX)) {
|
||||||
|
filename = key.substring(ImageKeys.TOKEN_PREFIX.length());
|
||||||
|
dir = CACHE_TOKEN_PICS_DIR;
|
||||||
|
} else if (key.startsWith(ImageKeys.ICON_PREFIX)) {
|
||||||
|
filename = key.substring(ImageKeys.ICON_PREFIX.length());
|
||||||
|
dir = CACHE_ICON_PICS_DIR;
|
||||||
|
} else if (key.startsWith(ImageKeys.BOOSTER_PREFIX)) {
|
||||||
|
filename = key.substring(ImageKeys.BOOSTER_PREFIX.length());
|
||||||
|
dir = CACHE_BOOSTER_PICS_DIR;
|
||||||
|
} else if (key.startsWith(ImageKeys.FATPACK_PREFIX)) {
|
||||||
|
filename = key.substring(ImageKeys.FATPACK_PREFIX.length());
|
||||||
|
dir = CACHE_FATPACK_PICS_DIR;
|
||||||
|
} else if (key.startsWith(ImageKeys.BOOSTERBOX_PREFIX)) {
|
||||||
|
filename = key.substring(ImageKeys.BOOSTERBOX_PREFIX.length());
|
||||||
|
dir = CACHE_BOOSTERBOX_PICS_DIR;
|
||||||
|
} else if (key.startsWith(ImageKeys.PRECON_PREFIX)) {
|
||||||
|
filename = key.substring(ImageKeys.PRECON_PREFIX.length());
|
||||||
|
dir = CACHE_PRECON_PICS_DIR;
|
||||||
|
} else if (key.startsWith(ImageKeys.TOURNAMENTPACK_PREFIX)) {
|
||||||
|
filename = key.substring(ImageKeys.TOURNAMENTPACK_PREFIX.length());
|
||||||
|
dir = CACHE_TOURNAMENTPACK_PICS_DIR;
|
||||||
|
} else {
|
||||||
|
filename = key;
|
||||||
|
dir = CACHE_CARD_PICS_DIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
File file = findFile(dir, filename);
|
||||||
|
|
||||||
|
// some S00 cards are really part of 6ED
|
||||||
|
/*if (file == null) { //TODO: Uncomment this
|
||||||
|
String s2kAlias = ImageUtil.getSetFolder("S00");
|
||||||
|
if (filename.startsWith(s2kAlias)) {
|
||||||
|
file = findFile(dir, filename.replace(s2kAlias, ImageUtil.getSetFolder("6ED")));
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// try without set prefix
|
||||||
|
String setlessFilename = null;
|
||||||
|
if (file == null && filename.contains("/")) {
|
||||||
|
setlessFilename = filename.substring(filename.indexOf('/') + 1);
|
||||||
|
file = findFile(dir, setlessFilename);
|
||||||
|
|
||||||
|
// try lowering the art index to the minimum for regular cards
|
||||||
|
if (file == null && setlessFilename.contains(".full")) {
|
||||||
|
file = findFile(dir, setlessFilename.replaceAll("[0-9]*[.]full", "1.full"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file == null) {
|
||||||
|
System.out.println("File not found, no image created: " + key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static File findFile(String dir, String filename) {
|
||||||
|
for (String ext : FILE_EXTENSIONS) {
|
||||||
|
File file = new File(dir, filename + ext);
|
||||||
|
if (file.exists()) {
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//shortcut for determine if a card image exists
|
||||||
|
public static boolean doesCardImageExist(String filename) {
|
||||||
|
return findFile(CACHE_CARD_PICS_DIR, filename) != null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
package forge;
|
|
||||||
|
|
||||||
import forge.card.CardDb;
|
|
||||||
import forge.item.*;
|
|
||||||
|
|
||||||
public class ImageKeys {
|
|
||||||
public static final String CARD_PREFIX = "c:";
|
|
||||||
public static final String TOKEN_PREFIX = "t:";
|
|
||||||
public static final String ICON_PREFIX = "i:";
|
|
||||||
public static final String BOOSTER_PREFIX = "b:";
|
|
||||||
public static final String FATPACK_PREFIX = "f:";
|
|
||||||
public static final String BOOSTERBOX_PREFIX = "x:";
|
|
||||||
public static final String PRECON_PREFIX = "p:";
|
|
||||||
public static final String TOURNAMENTPACK_PREFIX = "o:";
|
|
||||||
|
|
||||||
public static final String MORPH_IMAGE = "morph";
|
|
||||||
public static final String HIDDEN_CARD = TOKEN_PREFIX + MORPH_IMAGE;
|
|
||||||
|
|
||||||
public static final String BACKFACE_POSTFIX = "$alt";
|
|
||||||
|
|
||||||
public static String getImageKey(PaperCard pc, boolean altState) {
|
|
||||||
return ImageKeys.CARD_PREFIX + pc.getName() + CardDb.NameSetSeparator + pc.getEdition() + CardDb.NameSetSeparator + pc.getArtIndex() + (altState ? BACKFACE_POSTFIX : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inventory items don't have to know how a certain client should draw them.
|
|
||||||
// That's why this method is not encapsulated and overloaded in the InventoryItem descendants
|
|
||||||
public static String getImageKey(InventoryItem ii, boolean altState) {
|
|
||||||
if (ii instanceof PaperCard) {
|
|
||||||
return getImageKey((PaperCard)ii, altState);
|
|
||||||
}
|
|
||||||
if (ii instanceof TournamentPack) {
|
|
||||||
return ImageKeys.TOURNAMENTPACK_PREFIX + ((TournamentPack)ii).getEdition();
|
|
||||||
}
|
|
||||||
if (ii instanceof BoosterPack) {
|
|
||||||
BoosterPack bp = (BoosterPack)ii;
|
|
||||||
int cntPics = StaticData.instance().getEditions().get(bp.getEdition()).getCntBoosterPictures();
|
|
||||||
String suffix = (1 >= cntPics) ? "" : ("_" + bp.getArtIndex());
|
|
||||||
return ImageKeys.BOOSTER_PREFIX + bp.getEdition() + suffix;
|
|
||||||
}
|
|
||||||
if (ii instanceof FatPack) {
|
|
||||||
return ImageKeys.FATPACK_PREFIX + ((FatPack)ii).getEdition();
|
|
||||||
}
|
|
||||||
if (ii instanceof BoosterBox) {
|
|
||||||
return ImageKeys.BOOSTERBOX_PREFIX + ((BoosterBox)ii).getEdition();
|
|
||||||
}
|
|
||||||
if (ii instanceof PreconDeck) {
|
|
||||||
return ImageKeys.PRECON_PREFIX + ((PreconDeck)ii).getImageFilename();
|
|
||||||
}
|
|
||||||
if (ii instanceof PaperToken) {
|
|
||||||
return ImageKeys.TOKEN_PREFIX + ((PaperToken)ii).getImageFilename();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getTokenKey(String tokenName) {
|
|
||||||
return ImageKeys.TOKEN_PREFIX + tokenName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,12 +2,7 @@ package forge;
|
|||||||
|
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
|
|
||||||
import forge.assets.ImageUtil;
|
|
||||||
import forge.error.BugReporter;
|
import forge.error.BugReporter;
|
||||||
import forge.properties.ForgeConstants;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@@ -15,89 +10,17 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
final class ImageLoader extends CacheLoader<String, BufferedImage> {
|
final class ImageLoader extends CacheLoader<String, BufferedImage> {
|
||||||
// image file extensions for various formats in order of likelihood
|
|
||||||
// the last, empty, string is for keys that come in with an extension already in place
|
|
||||||
private static final String[] _FILE_EXTENSIONS = { ".jpg", ".png", "" };
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BufferedImage load(String key) {
|
public BufferedImage load(String key) {
|
||||||
if (StringUtils.isEmpty(key)) {
|
File file = ImageKeys.getImageFile(key);
|
||||||
return null;
|
if (file != null) {
|
||||||
}
|
try {
|
||||||
|
return ImageIO.read(file);
|
||||||
final String path;
|
}
|
||||||
final String filename;
|
catch (IOException ex) {
|
||||||
if (key.startsWith(ImageKeys.TOKEN_PREFIX)) {
|
BugReporter.reportException(ex, "Could not read image file " + file.getAbsolutePath() + " ");
|
||||||
filename = key.substring(ImageKeys.TOKEN_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_TOKEN_PICS_DIR;
|
|
||||||
} else if (key.startsWith(ImageKeys.ICON_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.ICON_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_ICON_PICS_DIR;
|
|
||||||
} else if (key.startsWith(ImageKeys.BOOSTER_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.BOOSTER_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_BOOSTER_PICS_DIR;
|
|
||||||
} else if (key.startsWith(ImageKeys.FATPACK_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.FATPACK_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_FATPACK_PICS_DIR;
|
|
||||||
} else if (key.startsWith(ImageKeys.BOOSTERBOX_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.BOOSTERBOX_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_BOOSTERBOX_PICS_DIR;
|
|
||||||
} else if (key.startsWith(ImageKeys.PRECON_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.PRECON_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_PRECON_PICS_DIR;
|
|
||||||
} else if (key.startsWith(ImageKeys.TOURNAMENTPACK_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.TOURNAMENTPACK_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_TOURNAMENTPACK_PICS_DIR;
|
|
||||||
} else {
|
|
||||||
filename = key;
|
|
||||||
path = ForgeConstants.CACHE_CARD_PICS_DIR;
|
|
||||||
}
|
|
||||||
|
|
||||||
BufferedImage ret = _findFile(key, path, filename);
|
|
||||||
|
|
||||||
// some S00 cards are really part of 6ED
|
|
||||||
if (null == ret ) {
|
|
||||||
String s2kAlias = ImageUtil.getSetFolder("S00");
|
|
||||||
if ( filename.startsWith(s2kAlias) ) {
|
|
||||||
ret = _findFile(key, path, filename.replace(s2kAlias, ImageUtil.getSetFolder("6ED")));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// try without set prefix
|
|
||||||
String setlessFilename = null;
|
|
||||||
if (null == ret && filename.contains("/")) {
|
|
||||||
setlessFilename = filename.substring(filename.indexOf('/') + 1);
|
|
||||||
ret = _findFile(key, path, setlessFilename);
|
|
||||||
|
|
||||||
// try lowering the art index to the minimum for regular cards
|
|
||||||
if (null == ret && setlessFilename.contains(".full")) {
|
|
||||||
ret = _findFile(key, path, setlessFilename.replaceAll("[0-9]*[.]full", "1.full"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null == ret) {
|
|
||||||
System.out.println("File not found, no image created: " + key);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static BufferedImage _findFile(String key, String path, String filename) {
|
|
||||||
for (String ext : _FILE_EXTENSIONS) {
|
|
||||||
File file = new File(path, filename + ext);
|
|
||||||
//System.out.println(String.format("Searching for %s at: %s", key, file.getAbsolutePath()));
|
|
||||||
if (file.exists()) {
|
|
||||||
//System.out.println(String.format("Found %s at: %s", key, file.getAbsolutePath()));
|
|
||||||
try {
|
|
||||||
return ImageIO.read(file);
|
|
||||||
}
|
|
||||||
catch (IOException ex) {
|
|
||||||
BugReporter.reportException(ex, "Could not read image file " + file.getAbsolutePath() + " ");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,133 +1,25 @@
|
|||||||
package forge.assets;
|
package forge.assets;
|
||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
import java.io.File;
|
||||||
|
|
||||||
import com.badlogic.gdx.files.FileHandle;
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
|
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.ImageKeys;
|
import forge.ImageKeys;
|
||||||
import forge.properties.ForgeConstants;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
final class ImageLoader extends CacheLoader<String, Texture> {
|
final class ImageLoader extends CacheLoader<String, Texture> {
|
||||||
// image file extensions for various formats in order of likelihood
|
|
||||||
// the last, empty, string is for keys that come in with an extension already in place
|
|
||||||
private static final String[] _FILE_EXTENSIONS = { ".jpg", ".png", "" };
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Texture load(String key) {
|
public Texture load(String key) {
|
||||||
if (StringUtils.isEmpty(key)) {
|
File file = ImageKeys.getImageFile(key);
|
||||||
return null;
|
if (file != null) {
|
||||||
}
|
FileHandle fh = new FileHandle(file);
|
||||||
|
try {
|
||||||
final String path;
|
return new Texture(fh);
|
||||||
final String filename;
|
|
||||||
boolean isCard = false;
|
|
||||||
if (key.startsWith(ImageKeys.TOKEN_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.TOKEN_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_TOKEN_PICS_DIR;
|
|
||||||
isCard = true;
|
|
||||||
}
|
|
||||||
else if (key.startsWith(ImageKeys.ICON_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.ICON_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_ICON_PICS_DIR;
|
|
||||||
}
|
|
||||||
else if (key.startsWith(ImageKeys.BOOSTER_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.BOOSTER_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_BOOSTER_PICS_DIR;
|
|
||||||
}
|
|
||||||
else if (key.startsWith(ImageKeys.FATPACK_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.FATPACK_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_FATPACK_PICS_DIR;
|
|
||||||
}
|
|
||||||
else if (key.startsWith(ImageKeys.PRECON_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.PRECON_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_PRECON_PICS_DIR;
|
|
||||||
}
|
|
||||||
else if (key.startsWith(ImageKeys.TOURNAMENTPACK_PREFIX)) {
|
|
||||||
filename = key.substring(ImageKeys.TOURNAMENTPACK_PREFIX.length());
|
|
||||||
path = ForgeConstants.CACHE_TOURNAMENTPACK_PICS_DIR;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
filename = key;
|
|
||||||
path = ForgeConstants.CACHE_CARD_PICS_DIR;
|
|
||||||
isCard = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Texture ret = findFile(key, path, filename);
|
|
||||||
if (ret != null) { return ret; }
|
|
||||||
|
|
||||||
// some S00 cards are really part of 6ED
|
|
||||||
String s2kAlias = ImageUtil.getSetFolder("S00");
|
|
||||||
if (filename.startsWith(s2kAlias)) {
|
|
||||||
ret = findFile(key, path, filename.replace(s2kAlias, ImageUtil.getSetFolder("6ED")));
|
|
||||||
if (ret != null) { return ret; }
|
|
||||||
}
|
|
||||||
|
|
||||||
// try without set prefix
|
|
||||||
String setCode;
|
|
||||||
String setlessFilename;
|
|
||||||
int idx = filename.indexOf('/');
|
|
||||||
if (idx != -1) {
|
|
||||||
setCode = filename.substring(0, idx);
|
|
||||||
setlessFilename = filename.substring(idx + 1);
|
|
||||||
ret = findFile(key, path, setlessFilename);
|
|
||||||
if (ret != null) { return ret; }
|
|
||||||
|
|
||||||
// try lowering the art index to the minimum for regular cards
|
|
||||||
if (setlessFilename.contains(".full")) {
|
|
||||||
ret = findFile(key, path, setlessFilename.replaceAll("[0-9]*[.]full", "1.full"));
|
|
||||||
if (ret != null) { return ret; }
|
|
||||||
}
|
}
|
||||||
}
|
catch (Exception ex) {
|
||||||
else {
|
Forge.log("Could not read image file " + fh.path() + "\n\nException:\n" + ex.toString());
|
||||||
setCode = null;
|
|
||||||
setlessFilename = filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: Consider uncommenting this block
|
|
||||||
if (isCard) { //if image is for card, attempt to create image for it
|
|
||||||
if (setCode == null) {} //avoid warning, remove if below uncommented
|
|
||||||
/*int artIndex = 0;
|
|
||||||
String cardName = setlessFilename;
|
|
||||||
idx = cardName.indexOf('.');
|
|
||||||
if (idx != -1) {
|
|
||||||
int dotIdx = idx;
|
|
||||||
//trim art index
|
|
||||||
while (idx > 0 && Character.isDigit(cardName.charAt(idx - 1))) {
|
|
||||||
idx--;
|
|
||||||
}
|
|
||||||
if (dotIdx > idx) {
|
|
||||||
artIndex = Integer.parseInt(cardName.substring(idx, dotIdx));
|
|
||||||
}
|
|
||||||
cardName = cardName.substring(0, idx);
|
|
||||||
}
|
|
||||||
PaperCard pc = FModel.getMagicDb().getCommonCards().getCard(cardName, setCode, artIndex);
|
|
||||||
if (pc == null) {
|
|
||||||
pc = FModel.getMagicDb().getVariantCards().getCard(cardName, setCode, artIndex);
|
|
||||||
}
|
|
||||||
if (pc != null) {
|
|
||||||
ret = CardImageRenderer.createCardImage(Card.getCardForUi(pc));
|
|
||||||
if (ret != null) { return ret; }
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Texture findFile(String key, String path, String filename) {
|
|
||||||
path += filename;
|
|
||||||
for (String ext : _FILE_EXTENSIONS) {
|
|
||||||
FileHandle fh = Gdx.files.absolute(path + ext);
|
|
||||||
if (fh.exists()) {
|
|
||||||
try {
|
|
||||||
return new Texture(fh);
|
|
||||||
}
|
|
||||||
catch (Exception ex) {
|
|
||||||
Forge.log("Could not read image file " + fh.path() + "\n\nException:\n" + ex.toString());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -24,8 +24,9 @@ public class ImageUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PaperCard cp = StaticData.instance().getCommonCards().getCard(key);
|
PaperCard cp = StaticData.instance().getCommonCards().getCard(key);
|
||||||
if ( cp == null )
|
if (cp == null) {
|
||||||
cp = StaticData.instance().getVariantCards().getCard(key);
|
cp = StaticData.instance().getVariantCards().getCard(key);
|
||||||
|
}
|
||||||
return cp;
|
return cp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ package forge.model;
|
|||||||
import forge.CardStorageReader;
|
import forge.CardStorageReader;
|
||||||
import forge.CardStorageReader.ProgressObserver;
|
import forge.CardStorageReader.ProgressObserver;
|
||||||
import forge.FThreads;
|
import forge.FThreads;
|
||||||
|
import forge.ImageKeys;
|
||||||
import forge.StaticData;
|
import forge.StaticData;
|
||||||
import forge.achievement.AchievementCollection;
|
import forge.achievement.AchievementCollection;
|
||||||
import forge.achievement.ConstructedAchievements;
|
import forge.achievement.ConstructedAchievements;
|
||||||
@@ -86,6 +87,11 @@ public class FModel {
|
|||||||
private static GameFormat.Collection formats;
|
private static GameFormat.Collection formats;
|
||||||
|
|
||||||
public static void initialize(final IProgressBar progressBar) {
|
public static void initialize(final IProgressBar progressBar) {
|
||||||
|
ImageKeys.initializeDirs(ForgeConstants.CACHE_CARD_PICS_DIR,
|
||||||
|
ForgeConstants.CACHE_TOKEN_PICS_DIR, ForgeConstants.CACHE_ICON_PICS_DIR,
|
||||||
|
ForgeConstants.CACHE_BOOSTER_PICS_DIR, ForgeConstants.CACHE_FATPACK_PICS_DIR,
|
||||||
|
ForgeConstants.CACHE_BOOSTERBOX_PICS_DIR, ForgeConstants.CACHE_PRECON_PICS_DIR,
|
||||||
|
ForgeConstants.CACHE_TOURNAMENTPACK_PICS_DIR);
|
||||||
|
|
||||||
// Instantiate preferences: quest and regular
|
// Instantiate preferences: quest and regular
|
||||||
//Preferences are initialized first so that the splash screen can be translated.
|
//Preferences are initialized first so that the splash screen can be translated.
|
||||||
|
|||||||
Reference in New Issue
Block a user