mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
Support custom achievement images
This commit is contained in:
@@ -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()) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user