Support custom achievement images

This commit is contained in:
drdev
2014-09-17 02:24:35 +00:00
parent bbc2a754f6
commit bde2c72cf7
4 changed files with 54 additions and 4 deletions

View File

@@ -231,7 +231,15 @@ public enum VSubmenuAchievements implements IVSubmenu<CSubmenuAchievements> {
plateY += dy; plateY += dy;
x = startX; x = startX;
} }
if (achievement.earnedGold()) { SkinImage customImage = (SkinImage)achievement.getCustomImage();
if (customImage != null) {
Dimension customImageSize = customImage.getSizeForPaint(g2d);
FSkin.drawImage(g2d, customImage,
x + (w - customImageSize.width) / 2,
y + h - customImageSize.height + 8, //TODO: Remove when gap below images removed
customImageSize.width, customImageSize.height);
}
else if (achievement.earnedGold()) {
FSkin.drawImage(g2d, imgGoldTrophy, x, y, w, h); FSkin.drawImage(g2d, imgGoldTrophy, x, y, w, h);
} }
else if (achievement.earnedSilver()) { else if (achievement.earnedSilver()) {

View File

@@ -2,16 +2,22 @@ package forge.achievement;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import forge.GuiBase;
import forge.assets.FSkinProp; import forge.assets.FSkinProp;
import forge.assets.ISkinImage;
import forge.game.Game; import forge.game.Game;
import forge.game.player.Player; import forge.game.player.Player;
import forge.interfaces.IGuiBase; import forge.interfaces.IGuiBase;
import forge.properties.ForgeConstants;
import forge.util.FileUtil;
import forge.util.gui.SOptionPane; import forge.util.gui.SOptionPane;
public abstract class Achievement { public abstract class Achievement {
private final String displayName, bronzeDesc, silverDesc, goldDesc; private final String displayName, bronzeDesc, silverDesc, goldDesc;
private final int bronzeThreshold, silverThreshold, goldThreshold; private final int bronzeThreshold, silverThreshold, goldThreshold;
private final boolean checkGreaterThan; private final boolean checkGreaterThan;
private String imagePrefix;
private ISkinImage customImage;
protected int best, current; protected int best, current;
public Achievement(String displayName0, public Achievement(String displayName0,
@@ -62,6 +68,37 @@ public abstract class Achievement {
return best <= bronzeThreshold; return best <= bronzeThreshold;
} }
public void setImagePrefix(String imagePrefix0) {
imagePrefix = imagePrefix0;
}
public ISkinImage getCustomImage() {
return customImage;
}
private void updateCustomImage() {
int suffix;
if (earnedGold()) {
suffix = 3;
}
else if (earnedSilver()) {
suffix = 2;
}
else if (earnedBronze()) {
suffix = 1;
}
else {
customImage = null;
return;
}
String filename = ForgeConstants.CACHE_ACHIEVEMENT_PICS_DIR + imagePrefix + "_" + suffix + ".png";
if (FileUtil.doesFileExist(filename)) {
customImage = GuiBase.getInterface().getUnskinnedIcon(filename);
return;
}
customImage = null;
}
protected abstract int evaluate(Player player, Game game); protected abstract int evaluate(Player player, Game game);
protected Player getSingleOpponent(Player player) { protected Player getSingleOpponent(Player player) {
@@ -113,6 +150,7 @@ public abstract class Achievement {
} }
} }
if (type != null) { if (type != null) {
updateCustomImage();
SOptionPane.showMessageDialog(gui, "You've earned a " + type + " trophy!\n\n" + SOptionPane.showMessageDialog(gui, "You've earned a " + type + " trophy!\n\n" +
displayName + " - " + desc, "Achievement Earned", image); displayName + " - " + desc, "Achievement Earned", image);
} }
@@ -130,6 +168,7 @@ public abstract class Achievement {
public void loadFromXml(Element el) { public void loadFromXml(Element el) {
best = getIntAttribute(el, "best"); best = getIntAttribute(el, "best");
current = getIntAttribute(el, "current"); current = getIntAttribute(el, "current");
updateCustomImage();
} }
private int getIntAttribute(Element el, String name) { private int getIntAttribute(Element el, String name) {

View File

@@ -68,8 +68,9 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
protected abstract void buildTopShelf(); protected abstract void buildTopShelf();
protected abstract void buildBottomShelf(); protected abstract void buildBottomShelf();
protected void add(String name, Achievement achievement) { protected void add(String key, Achievement achievement) {
achievements.put(name, achievement); achievement.setImagePrefix(key.toLowerCase());
achievements.put(key, achievement);
} }
public void updateAll(IGuiBase gui, Player player) { public void updateAll(IGuiBase gui, Player player) {

View File

@@ -121,7 +121,8 @@ public final class ForgeConstants {
CACHE_BOOSTERBOX_PICS_DIR = PICS_DIR + "boosterboxes/"; CACHE_BOOSTERBOX_PICS_DIR = PICS_DIR + "boosterboxes/";
CACHE_PRECON_PICS_DIR = PICS_DIR + "precons/"; CACHE_PRECON_PICS_DIR = PICS_DIR + "precons/";
CACHE_TOURNAMENTPACK_PICS_DIR = PICS_DIR + "tournamentpacks/"; CACHE_TOURNAMENTPACK_PICS_DIR = PICS_DIR + "tournamentpacks/";
QUEST_CARD_PRICE_FILE = DB_DIR + "all-prices.txt";; CACHE_ACHIEVEMENT_PICS_DIR = PICS_DIR + "achievements/";
QUEST_CARD_PRICE_FILE = DB_DIR + "all-prices.txt";
PROFILE_DIRS = new String[] { PROFILE_DIRS = new String[] {
USER_DIR, USER_DIR,
@@ -256,6 +257,7 @@ public final class ForgeConstants {
public static String CACHE_BOOSTERBOX_PICS_DIR; public static String CACHE_BOOSTERBOX_PICS_DIR;
public static String CACHE_PRECON_PICS_DIR; public static String CACHE_PRECON_PICS_DIR;
public static String CACHE_TOURNAMENTPACK_PICS_DIR; public static String CACHE_TOURNAMENTPACK_PICS_DIR;
public static String CACHE_ACHIEVEMENT_PICS_DIR;
public static String QUEST_CARD_PRICE_FILE; public static String QUEST_CARD_PRICE_FILE;
public static String[] PROFILE_DIRS; public static String[] PROFILE_DIRS;