fix onfetched for RewardActor

- should fix the issue of not loading the images downloaded. This should method should get directly from the assetmanager.
This commit is contained in:
Anthony Calosa
2022-07-28 10:24:39 +08:00
parent e9f330d514
commit 720afb044d
6 changed files with 164 additions and 162 deletions

View File

@@ -180,7 +180,7 @@
</executions>
<configuration>
<basedir>${basedir}/${configSourceDirectory}</basedir>
<filesToInclude>forge-adventure.sh, forge-adventure.command, forge-adventure.cmd</filesToInclude>
<filesToInclude>forge-adventure.sh, forge-adventure-mac.sh, forge-adventure.command, forge-adventure.cmd</filesToInclude>
<outputBasedir>${project.build.directory}</outputBasedir>
<outputDir>.</outputDir>
<regex>false</regex>

View File

@@ -1,5 +1,7 @@
package forge.adventure.util;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.loaders.TextureLoader.TextureParameter;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
@@ -24,6 +26,7 @@ import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.Disposable;
import forge.Forge;
import forge.Graphics;
import forge.ImageKeys;
import forge.adventure.data.ItemData;
import forge.adventure.scene.RewardScene;
import forge.adventure.scene.Scene;
@@ -36,6 +39,10 @@ import forge.game.card.CardView;
import forge.gui.GuiBase;
import forge.item.PaperCard;
import forge.util.ImageFetcher;
import forge.util.ImageUtil;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import static forge.adventure.util.Paths.ITEMS_ATLAS;
@@ -53,6 +60,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
static TextureRegion backTexture;
Texture image, T;
Graphics graphics;
Texture generatedTooltip = null; //Storage for a generated tooltip. To dispose of on exit.
boolean needsToBeDisposed;
float flipProcess = 0;
@@ -60,6 +68,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
boolean sold = false;
boolean flipOnClick;
private boolean hover;
boolean loaded = true;
TextureParameter parameter;
public static int renderedCount = 0; //Counter for cards that require rendering a preview.
static final ImageFetcher fetcher = GuiBase.getInterface().getImageFetcher();
@@ -80,48 +90,49 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
public Reward getReward() {
return reward;
}
@Override
public void onImageFetched() {
image = ImageCache.getImage(reward.getCard().getImageKey(false), false);
if (image != null) {
try {
TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(image));
if(Forge.isLandscapeMode())
drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f);
else
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
if (toolTipImage != null) {
if (toolTipImage.getDrawable() instanceof Texture) {
((Texture) toolTipImage.getDrawable()).dispose();
}
}
toolTipImage.remove();
toolTipImage = new Image(drawable);
if (GuiBase.isAndroid()) {
if (holdTooltip.tooltip_image.getDrawable() instanceof Texture) {
((Texture) holdTooltip.tooltip_image.getDrawable()).dispose();
}
Actor ht = holdTooltip.tooltip_actor.getCells().get(0).getActor();
if (ht != null && ht instanceof Image) {
if (((Image) ht).getDrawable() instanceof Texture) {
((Texture) ((Image) ht).getDrawable()).dispose();
}
}
holdTooltip.tooltip_actor.add(toolTipImage);
} else {
Image renderedImage = tooltip.getActor();
if (renderedImage != null && renderedImage.getDrawable() instanceof Texture) {
((Texture) tooltip.getActor().getDrawable()).dispose();
}
tooltip.setActor(toolTipImage);
}
if (T != null)
T.dispose();
} catch (Exception e) {
e.printStackTrace();
String imageKey = reward.getCard().getImageKey(false);
PaperCard card = ImageUtil.getPaperCardFromImageKey(imageKey);
imageKey = card.getCardImageKey();
if (StringUtils.isBlank(imageKey))
return;
File imageFile = ImageKeys.getImageFile(imageKey);
if (imageFile == null)
return;
if (!Forge.getAssets().manager().contains(imageFile.getPath())) {
Forge.getAssets().manager().load(imageFile.getPath(), Texture.class, Forge.getAssets().getTextureFilter());
Forge.getAssets().manager().finishLoadingAsset(imageFile.getPath());
}
Texture replacement = Forge.getAssets().manager().get(imageFile.getPath(), Texture.class, false);
if (replacement == null)
return;
image = replacement;
loaded = true;
TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(image));
if(Forge.isLandscapeMode())
drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f);
else
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
if (toolTipImage != null) {
if (toolTipImage.getDrawable() instanceof TextureRegionDrawable) {
((TextureRegionDrawable) toolTipImage.getDrawable()).getRegion().getTexture().dispose();
}
}
toolTipImage.remove();
toolTipImage = new Image(drawable);
if (GuiBase.isAndroid()) {
if (holdTooltip.tooltip_image.getDrawable() instanceof TextureRegionDrawable) {
((TextureRegionDrawable) holdTooltip.tooltip_image.getDrawable()).getRegion().getTexture().dispose();
}
holdTooltip.tooltip_actor.clear();
holdTooltip.tooltip_actor.add(toolTipImage);
} else {
tooltip.setActor(toolTipImage);
}
if (T != null)
T.dispose();
Gdx.graphics.requestRendering();
}
public RewardActor(Reward reward, boolean flippable) {
@@ -137,15 +148,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} else {
if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false))) {
//Cannot find an image file, set up a rendered card until (if) a file is downloaded.
Graphics G = new Graphics();
if(renderedCount++ == 0) {
//The first time we find a card that has no art, render one out of view to fully initialize CardImageRenderer.
G.begin(preview_w, preview_h);
CardImageRenderer.drawCardImage(G, CardView.getCardForUi(reward.getCard()), false, -(preview_w + 20), 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true);
G.end();
getGraphics().begin(preview_w, preview_h);
CardImageRenderer.drawCardImage(getGraphics(), CardView.getCardForUi(reward.getCard()), false, -(preview_w + 20), 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true);
getGraphics().end();
}
T = renderPlaceholder(G, reward.getCard()); //Now we can render the card.
T = renderPlaceholder(getGraphics(), reward.getCard()); //Now we can render the card.
setCardImage(T);
loaded = false;
fetcher.fetchImage(reward.getCard().getImageKey(false), this);
}
}
@@ -241,51 +252,48 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
}
private void setCardImage(Texture img) {
try {
image = img;
if (Forge.isTextureFilteringEnabled())
image.setFilter(Texture.TextureFilter.MipMapLinearLinear, Texture.TextureFilter.Linear);
TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(image));
if(Forge.isLandscapeMode())
drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f);
else
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
if (toolTipImage == null)
toolTipImage = new Image(drawable);
if (GuiBase.isAndroid()) {
if (holdTooltip == null)
holdTooltip = new HoldTooltip(toolTipImage);
if (frontSideUp())
addListener(holdTooltip);
} else {
if (tooltip == null)
tooltip = new Tooltip<Image>(toolTipImage);
tooltip.setInstant(true);
if (frontSideUp())
addListener(tooltip);
}
} catch (Exception e) {
e.printStackTrace();
if (img == null)
return;
image = img;
if (Forge.isTextureFilteringEnabled())
image.setFilter(Texture.TextureFilter.MipMapLinearLinear, Texture.TextureFilter.Linear);
TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(image));
if(Forge.isLandscapeMode())
drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f);
else
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
if (toolTipImage == null)
toolTipImage = new Image(drawable);
if (GuiBase.isAndroid()) {
if (holdTooltip == null)
holdTooltip = new HoldTooltip(toolTipImage);
if (frontSideUp())
addListener(holdTooltip);
} else {
if (tooltip == null)
tooltip = new Tooltip<Image>(toolTipImage);
tooltip.setInstant(true);
if (frontSideUp())
addListener(tooltip);
}
}
private Texture renderPlaceholder(Graphics G, PaperCard card){ //Use CardImageRenderer to output a Texture.
private Texture renderPlaceholder(Graphics g, PaperCard card){ //Use CardImageRenderer to output a Texture.
Matrix4 m = new Matrix4();
FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGB888, preview_w, preview_h, false);
frameBuffer.begin();
m.setToOrtho2D(0,preview_h, preview_w, -preview_h); //So it renders flipped directly.
G.begin(preview_w, preview_h);
G.setProjectionMatrix(m);
G.startClip();
CardImageRenderer.drawCardImage(G, CardView.getCardForUi(card), false, 0, 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true);
G.end();
G.endClip();
g.begin(preview_w, preview_h);
g.setProjectionMatrix(m);
g.startClip();
CardImageRenderer.drawCardImage(g, CardView.getCardForUi(card), false, 0, 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true);
g.end();
g.endClip();
//Rendering ends here. Create a new Pixmap to Texture with mipmaps, otherwise will render as full black.
Texture result = new Texture(Pixmap.createFromFrameBuffer(0, 0, preview_w, preview_h), Forge.isTextureFilteringEnabled());
frameBuffer.end();
G.dispose();
g.dispose();
frameBuffer.dispose();
return result;
}
@@ -298,22 +306,21 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, preview_w, preview_h, false);
frameBuffer.begin();
m.setToOrtho2D(0,preview_h, preview_w, -preview_h); //So it renders flipped directly.
Graphics G = new Graphics();
G.begin(preview_w, preview_h);
G.setProjectionMatrix(m);
G.startClip();
getGraphics().begin(preview_w, preview_h);
getGraphics().setProjectionMatrix(m);
getGraphics().startClip();
//Draw item description panel.
G.fillRect(new Color(0f, 0f, 0f, 0.96f), 0, 0, preview_w, preview_h); //Translucent background.
G.drawRectLines(2, Color.WHITE, 0, 0, preview_w, preview_h); //Add a border.
G.drawImage(icon, 2, 2, icon_w, icon_h); //Draw the item's icon.
G.drawText(item.name, FSkinFont.get(24), Color.WHITE, icon_w + 2, 2, preview_w - (icon_w + 2), icon_h, false, 1, true); //Item name.
G.drawRectLines(1, Color.WHITE, 6, icon_h + 2, preview_w - 12, preview_h - (icon_h + 6)); //Description border.
G.drawText(item.getDescription(), FSkinFont.get(18), Color.WHITE, 10, icon_h + 8, preview_w - 10, preview_h - 4, true, Align.left, false); //Description.
G.end();
G.endClip();
getGraphics().fillRect(new Color(0f, 0f, 0f, 0.96f), 0, 0, preview_w, preview_h); //Translucent background.
getGraphics().drawRectLines(2, Color.WHITE, 0, 0, preview_w, preview_h); //Add a border.
getGraphics().drawImage(icon, 2, 2, icon_w, icon_h); //Draw the item's icon.
getGraphics().drawText(item.name, FSkinFont.get(24), Color.WHITE, icon_w + 2, 2, preview_w - (icon_w + 2), icon_h, false, 1, true); //Item name.
getGraphics().drawRectLines(1, Color.WHITE, 6, icon_h + 2, preview_w - 12, preview_h - (icon_h + 6)); //Description border.
getGraphics().drawText(item.getDescription(), FSkinFont.get(18), Color.WHITE, 10, icon_h + 8, preview_w - 10, preview_h - 4, true, Align.left, false); //Description.
getGraphics().end();
getGraphics().endClip();
generatedTooltip = new Texture(Pixmap.createFromFrameBuffer(0, 0, preview_w, preview_h), Forge.isTextureFilteringEnabled());
frameBuffer.end();
G.dispose();
getGraphics().dispose();
frameBuffer.dispose();
}
@@ -354,6 +361,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
if (holdTooltip != null) {
try {
hover = false;
holdTooltip.tooltip_actor.clear();
holdTooltip.tooltip_actor.remove();
} catch (Exception e){}
}
@@ -430,7 +438,19 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
width = getWidth();
x = -getWidth() / 2;
}
if (Reward.Type.Card.equals(reward.getType())) {
if (image != null) {
drawCard(batch, image, x, width);
} else if (!loaded) {
if (T == null)
T = renderPlaceholder(getGraphics(), reward.getCard());
drawCard(batch, T, x, width);
}
} else if (image != null) {
batch.draw(image, x, -getHeight() / 2, width, getHeight());
}
}
private void drawCard(Batch batch, Texture image, float x, float width) {
if (image != null) {
if (!sold)
batch.draw(ImageCache.croppedBorderImage(image), x, -getHeight() / 2, width, getHeight());
@@ -447,24 +467,13 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
batch.setShader(null);
batch.begin();
}
} else {
if (Reward.Type.Card.equals(reward.getType())) {
if (T == null) {
T = renderPlaceholder(new Graphics(), reward.getCard());
}
batch.draw(T, x, -getHeight() / 2, width, getHeight());
}
}
switch (reward.getType()) {
case Card:
break;
case Gold:
break;
case Item:
break;
}
}
private Graphics getGraphics() {
if (graphics == null)
graphics = new Graphics();
return graphics;
}
private void applyProjectionMatrix(Batch batch) {
final Vector3 direction = new Vector3(0, 0, -1);
final Vector3 up = new Vector3(0, 1, 0);

View File

@@ -4,7 +4,7 @@ import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.assets.AssetLoaderParameters;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.assets.loaders.FileHandleResolver;
import com.badlogic.gdx.assets.loaders.TextureLoader;
import com.badlogic.gdx.assets.loaders.TextureLoader.TextureParameter;
import com.badlogic.gdx.assets.loaders.resolvers.AbsoluteFileHandleResolver;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Pixmap;
@@ -44,6 +44,7 @@ public class Assets implements Disposable {
public Skin skin;
public BitmapFont advDefaultFont, advBigFont;
private Texture defaultImage, dummy;
private TextureParameter parameter;
public Assets() {
//init titlebg fallback
fallback_skins.put(0, new Texture(GuiBase.isAndroid()
@@ -163,6 +164,20 @@ public class Assets implements Disposable {
tmxMap = new ObjectMap<>();
return tmxMap;
}
public TextureParameter getTextureFilter() {
if (parameter == null)
parameter = new TextureParameter();
if (Forge.isTextureFilteringEnabled()) {
parameter.genMipMaps = true;
parameter.minFilter = Texture.TextureFilter.MipMapLinearLinear;
parameter.magFilter = Texture.TextureFilter.Linear;
} else {
parameter.genMipMaps = false;
parameter.minFilter = Texture.TextureFilter.Nearest;
parameter.magFilter = Texture.TextureFilter.Nearest;
}
return parameter;
}
public Texture getDefaultImage() {
if (defaultImage == null) {
FileHandle blankImage = Gdx.files.absolute(ForgeConstants.NO_CARD_FILE);
@@ -171,7 +186,7 @@ public class Assets implements Disposable {
if (defaultImage != null)
return defaultImage;
//if not loaded yet, load to assetmanager
manager.load(blankImage.path(), Texture.class, new TextureLoader.TextureParameter(){{genMipMaps = true; minFilter = Texture.TextureFilter.MipMapLinearLinear; magFilter = Texture.TextureFilter.Linear;}});
manager.load(blankImage.path(), Texture.class, getTextureFilter());
manager.finishLoadingAsset(blankImage.path());
defaultImage = manager.get(blankImage.path());
} else {
@@ -232,7 +247,7 @@ public class Assets implements Disposable {
public synchronized <T> void load(String fileName, Class<T> type, AssetLoaderParameters<T> parameter) {
if (type.equals(Texture.class)) {
if (parameter == null) {
parameter = (AssetLoaderParameters<T>) new TextureLoader.TextureParameter();
parameter = (AssetLoaderParameters<T>) new TextureParameter();
}
final AssetLoaderParameters.LoadedCallback prevCallback = parameter.loadedCallback;

View File

@@ -113,7 +113,7 @@ public class FSkin {
//load theme logo while changing skins
final FileHandle theme_logo = getSkinFile("hd_logo.png");
if (theme_logo.exists()) {
manager.load(theme_logo.path(), Texture.class, new TextureLoader.TextureParameter(){{genMipMaps = true; minFilter = Texture.TextureFilter.MipMapLinearLinear; magFilter = Texture.TextureFilter.Linear;}});
manager.load(theme_logo.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(theme_logo.path());
hdLogo = manager.get(theme_logo.path());
} else {
@@ -121,7 +121,7 @@ public class FSkin {
}
final FileHandle duals_overlay = getDefaultSkinFile("overlay_alpha.png");
if (duals_overlay.exists()) {
manager.load(duals_overlay.path(), Texture.class, new TextureLoader.TextureParameter(){{genMipMaps = true; minFilter = Texture.TextureFilter.MipMapLinearLinear; magFilter = Texture.TextureFilter.Linear;}});
manager.load(duals_overlay.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(duals_overlay.path());
overlay_alpha = manager.get(duals_overlay.path());
} else {
@@ -129,7 +129,7 @@ public class FSkin {
}
final FileHandle splatter_overlay = getDefaultSkinFile("splatter.png");
if (splatter_overlay.exists()) {
manager.load(splatter_overlay.path(), Texture.class, new TextureLoader.TextureParameter(){{genMipMaps = true; minFilter = Texture.TextureFilter.MipMapLinearLinear; magFilter = Texture.TextureFilter.Linear;}});
manager.load(splatter_overlay.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(splatter_overlay.path());
splatter = manager.get(splatter_overlay.path());
} else {
@@ -162,7 +162,7 @@ public class FSkin {
h = manager.get(f.path(), Texture.class).getHeight();
if (f2.exists()) {
manager.load(f2.path(), Texture.class, new TextureLoader.TextureParameter(){{genMipMaps = true; minFilter = Texture.TextureFilter.MipMapLinearLinear; magFilter = Texture.TextureFilter.Linear;}});
manager.load(f2.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f2.path());
splashScreen.setBackground(new TextureRegion(manager.get(f2.path(), Texture.class)));
} else {
@@ -212,13 +212,6 @@ public class FSkin {
Forge.getAssets().avatars().clear();
Forge.getAssets().sleeves().clear();
TextureLoader.TextureParameter parameter = new TextureLoader.TextureParameter();
if (Forge.isTextureFilteringEnabled()) {
parameter.genMipMaps = true;
parameter.minFilter = Texture.TextureFilter.MipMapLinearLinear;
parameter.magFilter = Texture.TextureFilter.Linear;
}
AssetManager manager = Forge.getAssets().manager();
// Grab and test various sprite files.
@@ -273,7 +266,7 @@ public class FSkin {
if (GuiBase.isAndroid() && Forge.totalDeviceRAM <5000) {
Forge.hdbuttons = false;
} else {
manager.load(f11.path(), Texture.class, new TextureLoader.TextureParameter(){{genMipMaps = true; minFilter = Texture.TextureFilter.MipMapLinearLinear; magFilter = Texture.TextureFilter.Linear;}});
manager.load(f11.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f11.path());
Forge.hdbuttons = true;
}
@@ -282,7 +275,7 @@ public class FSkin {
if (GuiBase.isAndroid() && Forge.totalDeviceRAM <5000) {
Forge.hdstart = false;
} else {
manager.load(f12.path(), Texture.class, new TextureLoader.TextureParameter(){{genMipMaps = true; minFilter = Texture.TextureFilter.MipMapLinearLinear; magFilter = Texture.TextureFilter.Linear;}});
manager.load(f12.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f12.path());
Forge.hdstart = true;
}
@@ -320,15 +313,15 @@ public class FSkin {
pxDefaultAvatars = new Pixmap(f4);
pxDefaultSleeves = new Pixmap(f8);
//default avatar
manager.load(f4.path(), Texture.class, parameter);
manager.load(f4.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f4.path());
//sleeves first set
manager.load(f8.path(), Texture.class, parameter);
manager.load(f8.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f8.path());
//preferred avatar
if (f5.exists()) {
pxPreferredAvatars = new Pixmap(f5);
manager.load(f5.path(), Texture.class, parameter);
manager.load(f5.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f5.path());
final int pw = pxPreferredAvatars.getWidth();
@@ -360,7 +353,7 @@ public class FSkin {
}
if (f20.exists()) {
pxPreferredSleeves = new Pixmap(f20);
manager.load(f20.path(), Texture.class, parameter);
manager.load(f20.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f20.path());
final int sw = pxPreferredSleeves.getWidth();
@@ -388,7 +381,7 @@ public class FSkin {
}
if (f21.exists()) {
pxPreferredSleeves = new Pixmap(f21);
manager.load(f21.path(), Texture.class, parameter);
manager.load(f21.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f21.path());
final int sw = pxPreferredSleeves.getWidth();
@@ -405,7 +398,7 @@ public class FSkin {
} else {
//re init second set of sleeves
pxDefaultSleeves = new Pixmap(f9);
manager.load(f9.path(), Texture.class, parameter);
manager.load(f9.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f9.path());
final int sw2 = pxDefaultSleeves.getWidth();
@@ -421,7 +414,7 @@ public class FSkin {
}
//cracks
manager.load(f17.path(), Texture.class, parameter);
manager.load(f17.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f17.path());
int crackCount = 0;
for (int j = 0; j < 4; j++) {
@@ -438,7 +431,7 @@ public class FSkin {
Forge.getAssets().borders().put(0, new TextureRegion(manager.get(f10.path(), Texture.class), 2, 2, 672, 936));
Forge.getAssets().borders().put(1, new TextureRegion(manager.get(f10.path(), Texture.class), 676, 2, 672, 936));
//deckboxes
manager.load(f13.path(), Texture.class, parameter);
manager.load(f13.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(f13.path());
//gold bg
Forge.getAssets().deckbox().put(0, new TextureRegion(manager.get(f13.path(), Texture.class), 2, 2, 488, 680));

View File

@@ -1,7 +1,6 @@
package forge.assets;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.assets.loaders.TextureLoader.TextureParameter;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Pixmap;
@@ -543,13 +542,7 @@ public enum FSkinImage implements FImage {
if (texture == null) {
if (preferredFile.exists()) {
try {
TextureParameter parameter = new TextureParameter();
if (Forge.isTextureFilteringEnabled()) {
parameter.genMipMaps = true;
parameter.minFilter = Texture.TextureFilter.MipMapLinearLinear;
parameter.magFilter = Texture.TextureFilter.Linear;
}
manager.load(preferredFile.path(), Texture.class, parameter);
manager.load(preferredFile.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(preferredFile.path());
texture = manager.get(preferredFile.path(), Texture.class);
}
@@ -622,13 +615,7 @@ public enum FSkinImage implements FImage {
if (texture == null) {
if (defaultFile.exists()) {
try {
TextureParameter parameter = new TextureParameter();
if (Forge.isTextureFilteringEnabled()) {
parameter.genMipMaps = true;
parameter.minFilter = Texture.TextureFilter.MipMapLinearLinear;
parameter.magFilter = Texture.TextureFilter.Linear;
}
manager.load(defaultFile.path(), Texture.class, parameter);
manager.load(defaultFile.path(), Texture.class, Forge.getAssets().getTextureFilter());
manager.finishLoadingAsset(defaultFile.path());
texture = manager.get(defaultFile.path(), Texture.class);
}

View File

@@ -18,13 +18,13 @@
package forge.assets;
import java.io.File;
import java.util.ConcurrentModificationException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Queue;
import java.util.Set;
import com.badlogic.gdx.assets.loaders.TextureLoader.TextureParameter;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.TextureData;
@@ -82,13 +82,7 @@ public class ImageCache {
static EvictingQueue<String> q;
static Set<String> cardsLoaded;
static Queue<String> syncQ;
static TextureParameter defaultParameter = new TextureParameter();
static TextureParameter filtered = new TextureParameter();
public static void initCache(int capacity) {
//init filter
filtered.genMipMaps = true;
filtered.minFilter = Texture.TextureFilter.MipMapLinearLinear;
filtered.magFilter = Texture.TextureFilter.Linear;
//override maxCardCapacity
maxCardCapacity = capacity;
//init q
@@ -292,7 +286,7 @@ public class ImageCache {
String fileName = file.getPath();
//load to assetmanager
if (!Forge.getAssets().manager().contains(fileName, Texture.class)) {
Forge.getAssets().manager().load(fileName, Texture.class, Forge.isTextureFilteringEnabled() ? filtered : defaultParameter);
Forge.getAssets().manager().load(fileName, Texture.class, Forge.getAssets().getTextureFilter());
Forge.getAssets().manager().finishLoadingAsset(fileName);
counter+=1;
}
@@ -320,15 +314,19 @@ public class ImageCache {
//get all images not in newQ (cardLists to unload)
Set<String> toUnload = Sets.difference(cardsLoaded, newQ);
//unload from assetmanager to save RAM
for (String asset : toUnload) {
if(manager.contains(asset)) {
manager.unload(asset);
try {
for (String asset : toUnload) {
if (manager.contains(asset)) {
manager.unload(asset);
}
cardsLoaded.remove(asset);
}
cardsLoaded.remove(asset);
//clear cachedArt since this is dependant to the loaded texture
CardRenderer.clearcardArtCache();
((Forge) Gdx.app.getApplicationListener()).needsUpdate = true;
} catch (ConcurrentModificationException e) {
//e.printstacktrace
}
//clear cachedArt since this is dependant to the loaded texture
CardRenderer.clearcardArtCache();
((Forge)Gdx.app.getApplicationListener()).needsUpdate = true;
}
public static void preloadCache(Iterable<String> keys) {
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DISABLE_CARD_IMAGES))