mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Support custom achievement images
This commit is contained in:
@@ -231,7 +231,15 @@ public enum VSubmenuAchievements implements IVSubmenu<CSubmenuAchievements> {
|
||||
plateY += dy;
|
||||
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);
|
||||
}
|
||||
else if (achievement.earnedSilver()) {
|
||||
|
||||
@@ -2,16 +2,22 @@ package forge.achievement;
|
||||
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
import forge.GuiBase;
|
||||
import forge.assets.FSkinProp;
|
||||
import forge.assets.ISkinImage;
|
||||
import forge.game.Game;
|
||||
import forge.game.player.Player;
|
||||
import forge.interfaces.IGuiBase;
|
||||
import forge.properties.ForgeConstants;
|
||||
import forge.util.FileUtil;
|
||||
import forge.util.gui.SOptionPane;
|
||||
|
||||
public abstract class Achievement {
|
||||
private final String displayName, bronzeDesc, silverDesc, goldDesc;
|
||||
private final int bronzeThreshold, silverThreshold, goldThreshold;
|
||||
private final boolean checkGreaterThan;
|
||||
private String imagePrefix;
|
||||
private ISkinImage customImage;
|
||||
protected int best, current;
|
||||
|
||||
public Achievement(String displayName0,
|
||||
@@ -62,6 +68,37 @@ public abstract class Achievement {
|
||||
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 Player getSingleOpponent(Player player) {
|
||||
@@ -113,6 +150,7 @@ public abstract class Achievement {
|
||||
}
|
||||
}
|
||||
if (type != null) {
|
||||
updateCustomImage();
|
||||
SOptionPane.showMessageDialog(gui, "You've earned a " + type + " trophy!\n\n" +
|
||||
displayName + " - " + desc, "Achievement Earned", image);
|
||||
}
|
||||
@@ -130,6 +168,7 @@ public abstract class Achievement {
|
||||
public void loadFromXml(Element el) {
|
||||
best = getIntAttribute(el, "best");
|
||||
current = getIntAttribute(el, "current");
|
||||
updateCustomImage();
|
||||
}
|
||||
|
||||
private int getIntAttribute(Element el, String name) {
|
||||
|
||||
@@ -68,8 +68,9 @@ public abstract class AchievementCollection implements Iterable<Achievement> {
|
||||
protected abstract void buildTopShelf();
|
||||
protected abstract void buildBottomShelf();
|
||||
|
||||
protected void add(String name, Achievement achievement) {
|
||||
achievements.put(name, achievement);
|
||||
protected void add(String key, Achievement achievement) {
|
||||
achievement.setImagePrefix(key.toLowerCase());
|
||||
achievements.put(key, achievement);
|
||||
}
|
||||
|
||||
public void updateAll(IGuiBase gui, Player player) {
|
||||
|
||||
@@ -121,7 +121,8 @@ public final class ForgeConstants {
|
||||
CACHE_BOOSTERBOX_PICS_DIR = PICS_DIR + "boosterboxes/";
|
||||
CACHE_PRECON_PICS_DIR = PICS_DIR + "precons/";
|
||||
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[] {
|
||||
USER_DIR,
|
||||
@@ -256,6 +257,7 @@ public final class ForgeConstants {
|
||||
public static String CACHE_BOOSTERBOX_PICS_DIR;
|
||||
public static String CACHE_PRECON_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[] PROFILE_DIRS;
|
||||
|
||||
Reference in New Issue
Block a user