Simplify the way custom achievement images are loaded

This commit is contained in:
drdev
2014-09-17 04:30:24 +00:00
parent 69255650a8
commit 57e1cfe6b3
5 changed files with 60 additions and 25 deletions

1
.gitattributes vendored
View File

@@ -1132,6 +1132,7 @@ forge-gui-mobile/src/forge/animation/GifDecoder.java -text
forge-gui-mobile/src/forge/assets/AssetsDownloader.java -text
forge-gui-mobile/src/forge/assets/BitmapFontWriter.java -text
forge-gui-mobile/src/forge/assets/FBufferedImage.java -text
forge-gui-mobile/src/forge/assets/FDelayLoadImage.java -text
forge-gui-mobile/src/forge/assets/FImage.java -text
forge-gui-mobile/src/forge/assets/FImageComplex.java -text
forge-gui-mobile/src/forge/assets/FSkin.java -text

View File

@@ -13,6 +13,7 @@ import com.badlogic.gdx.Application.ApplicationType;
import com.badlogic.gdx.graphics.Texture;
import com.google.common.base.Function;
import forge.assets.FDelayLoadImage;
import forge.assets.FSkin;
import forge.assets.FSkinProp;
import forge.assets.FTextureImage;
@@ -106,9 +107,14 @@ public class GuiMobile implements IGuiBase {
@Override
public ISkinImage getUnskinnedIcon(String path) {
if (FThreads.isGuiThread(this)) {
return new FTextureImage(new Texture(Gdx.files.absolute(path)));
}
//use a delay load image to avoid an error if called from background thread
return new FDelayLoadImage(path);
}
@Override
public int showOptionDialog(final String message, final String title, final FSkinProp icon, final String[] options, final int defaultOption) {
return new WaitCallback<Integer>() {

View File

@@ -0,0 +1,49 @@
package forge.assets;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import forge.Graphics;
//Special wrapper for a texture to be loaded later when it's needed
public class FDelayLoadImage extends FImageComplex {
private final String filename;
private Texture texture;
public FDelayLoadImage(String filename0) {
filename = filename0;
}
@Override
public float getWidth() {
return getTexture().getWidth();
}
@Override
public float getHeight() {
return getTexture().getHeight();
}
@Override
public Texture getTexture() {
if (texture == null) {
texture = new Texture(Gdx.files.absolute(filename));
}
return texture;
}
@Override
public int getRegionX() {
return 0;
}
@Override
public int getRegionY() {
return 0;
}
@Override
public void draw(Graphics g, float x, float y, float w, float h) {
g.drawImage(getTexture(), x, y, w, h);
}
}

View File

@@ -2,7 +2,6 @@ package forge.achievement;
import org.w3c.dom.Element;
import forge.FThreads;
import forge.GuiBase;
import forge.assets.FSkinProp;
import forge.assets.ISkinImage;
@@ -81,7 +80,7 @@ public abstract class Achievement {
return customImage;
}
public void updateCustomImage() {
private void updateCustomImage() {
int suffix;
if (earnedGold()) {
suffix = 3;
@@ -155,12 +154,7 @@ public abstract class Achievement {
}
}
if (type != null) {
FThreads.invokeInEdtNowOrLater(GuiBase.getInterface(), new Runnable() {
@Override
public void run() {
updateCustomImage();
}
});
if (sharedDesc != null) {
desc = sharedDesc + " " + desc;
}
@@ -181,6 +175,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) {

View File

@@ -20,9 +20,7 @@ package forge.model;
import forge.CardStorageReader;
import forge.CardStorageReader.ProgressObserver;
import forge.FThreads;
import forge.GuiBase;
import forge.StaticData;
import forge.achievement.Achievement;
import forge.achievement.AchievementCollection;
import forge.achievement.ConstructedAchievements;
import forge.achievement.DraftAchievements;
@@ -176,20 +174,6 @@ public class FModel {
achievements.put(GameType.Sealed, new SealedAchievements());
achievements.put(GameType.Quest, new QuestAchievements());
//as long as custom achievement pics directory exists, queue up load for those images
if (FileUtil.doesFileExist(ForgeConstants.CACHE_ACHIEVEMENT_PICS_DIR)) {
FThreads.invokeInEdtLater(GuiBase.getInterface(), new Runnable() {
@Override
public void run() {
for (AchievementCollection achievementCol : achievements.values()) {
for (Achievement achievement : achievementCol) {
achievement.updateCustomImage();
}
}
}
});
}
//preload AI profiles
AiProfileUtil.loadAllProfiles(ForgeConstants.AI_PROFILE_DIR);
}