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> </executions>
<configuration> <configuration>
<basedir>${basedir}/${configSourceDirectory}</basedir> <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> <outputBasedir>${project.build.directory}</outputBasedir>
<outputDir>.</outputDir> <outputDir>.</outputDir>
<regex>false</regex> <regex>false</regex>

View File

@@ -1,5 +1,7 @@
package forge.adventure.util; 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.Color;
import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture;
@@ -24,6 +26,7 @@ import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.Disposable;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.ImageKeys;
import forge.adventure.data.ItemData; import forge.adventure.data.ItemData;
import forge.adventure.scene.RewardScene; import forge.adventure.scene.RewardScene;
import forge.adventure.scene.Scene; import forge.adventure.scene.Scene;
@@ -36,6 +39,10 @@ import forge.game.card.CardView;
import forge.gui.GuiBase; import forge.gui.GuiBase;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.util.ImageFetcher; 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; import static forge.adventure.util.Paths.ITEMS_ATLAS;
@@ -53,6 +60,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
static TextureRegion backTexture; static TextureRegion backTexture;
Texture image, T; Texture image, T;
Graphics graphics;
Texture generatedTooltip = null; //Storage for a generated tooltip. To dispose of on exit. Texture generatedTooltip = null; //Storage for a generated tooltip. To dispose of on exit.
boolean needsToBeDisposed; boolean needsToBeDisposed;
float flipProcess = 0; float flipProcess = 0;
@@ -60,6 +68,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
boolean sold = false; boolean sold = false;
boolean flipOnClick; boolean flipOnClick;
private boolean hover; private boolean hover;
boolean loaded = true;
TextureParameter parameter;
public static int renderedCount = 0; //Counter for cards that require rendering a preview. public static int renderedCount = 0; //Counter for cards that require rendering a preview.
static final ImageFetcher fetcher = GuiBase.getInterface().getImageFetcher(); static final ImageFetcher fetcher = GuiBase.getInterface().getImageFetcher();
@@ -80,48 +90,49 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
public Reward getReward() { public Reward getReward() {
return reward; return reward;
} }
@Override @Override
public void onImageFetched() { public void onImageFetched() {
image = ImageCache.getImage(reward.getCard().getImageKey(false), false); String imageKey = reward.getCard().getImageKey(false);
if (image != null) { PaperCard card = ImageUtil.getPaperCardFromImageKey(imageKey);
try { imageKey = card.getCardImageKey();
TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(image)); if (StringUtils.isBlank(imageKey))
if(Forge.isLandscapeMode()) return;
drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f); File imageFile = ImageKeys.getImageFile(imageKey);
else if (imageFile == null)
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f); return;
if (toolTipImage != null) { if (!Forge.getAssets().manager().contains(imageFile.getPath())) {
if (toolTipImage.getDrawable() instanceof Texture) { Forge.getAssets().manager().load(imageFile.getPath(), Texture.class, Forge.getAssets().getTextureFilter());
((Texture) toolTipImage.getDrawable()).dispose(); Forge.getAssets().manager().finishLoadingAsset(imageFile.getPath());
} }
} Texture replacement = Forge.getAssets().manager().get(imageFile.getPath(), Texture.class, false);
toolTipImage.remove(); if (replacement == null)
toolTipImage = new Image(drawable); return;
if (GuiBase.isAndroid()) { image = replacement;
if (holdTooltip.tooltip_image.getDrawable() instanceof Texture) { loaded = true;
((Texture) holdTooltip.tooltip_image.getDrawable()).dispose(); TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(image));
} if(Forge.isLandscapeMode())
Actor ht = holdTooltip.tooltip_actor.getCells().get(0).getActor(); drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f);
if (ht != null && ht instanceof Image) { else
if (((Image) ht).getDrawable() instanceof Texture) { drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
((Texture) ((Image) ht).getDrawable()).dispose(); if (toolTipImage != null) {
} if (toolTipImage.getDrawable() instanceof TextureRegionDrawable) {
} ((TextureRegionDrawable) toolTipImage.getDrawable()).getRegion().getTexture().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();
} }
} }
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) { public RewardActor(Reward reward, boolean flippable) {
@@ -137,15 +148,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} else { } else {
if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false))) { if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false))) {
//Cannot find an image file, set up a rendered card until (if) a file is downloaded. //Cannot find an image file, set up a rendered card until (if) a file is downloaded.
Graphics G = new Graphics();
if(renderedCount++ == 0) { if(renderedCount++ == 0) {
//The first time we find a card that has no art, render one out of view to fully initialize CardImageRenderer. //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); getGraphics().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); CardImageRenderer.drawCardImage(getGraphics(), CardView.getCardForUi(reward.getCard()), false, -(preview_w + 20), 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true);
G.end(); 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); setCardImage(T);
loaded = false;
fetcher.fetchImage(reward.getCard().getImageKey(false), this); 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) { private void setCardImage(Texture img) {
try { if (img == null)
image = img; return;
if (Forge.isTextureFilteringEnabled()) image = img;
image.setFilter(Texture.TextureFilter.MipMapLinearLinear, Texture.TextureFilter.Linear); if (Forge.isTextureFilteringEnabled())
TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(image)); image.setFilter(Texture.TextureFilter.MipMapLinearLinear, Texture.TextureFilter.Linear);
if(Forge.isLandscapeMode()) TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(image));
drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f); if(Forge.isLandscapeMode())
else drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f);
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f); else
if (toolTipImage == null) drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
toolTipImage = new Image(drawable); if (toolTipImage == null)
if (GuiBase.isAndroid()) { toolTipImage = new Image(drawable);
if (holdTooltip == null) if (GuiBase.isAndroid()) {
holdTooltip = new HoldTooltip(toolTipImage); if (holdTooltip == null)
if (frontSideUp()) holdTooltip = new HoldTooltip(toolTipImage);
addListener(holdTooltip); if (frontSideUp())
addListener(holdTooltip);
} else { } else {
if (tooltip == null) if (tooltip == null)
tooltip = new Tooltip<Image>(toolTipImage); tooltip = new Tooltip<Image>(toolTipImage);
tooltip.setInstant(true); tooltip.setInstant(true);
if (frontSideUp()) if (frontSideUp())
addListener(tooltip); addListener(tooltip);
}
} catch (Exception e) {
e.printStackTrace();
} }
} }
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(); Matrix4 m = new Matrix4();
FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGB888, preview_w, preview_h, false); FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGB888, preview_w, preview_h, false);
frameBuffer.begin(); frameBuffer.begin();
m.setToOrtho2D(0,preview_h, preview_w, -preview_h); //So it renders flipped directly. m.setToOrtho2D(0,preview_h, preview_w, -preview_h); //So it renders flipped directly.
G.begin(preview_w, preview_h); g.begin(preview_w, preview_h);
G.setProjectionMatrix(m); g.setProjectionMatrix(m);
G.startClip(); g.startClip();
CardImageRenderer.drawCardImage(G, CardView.getCardForUi(card), false, 0, 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true); CardImageRenderer.drawCardImage(g, CardView.getCardForUi(card), false, 0, 0, preview_w, preview_h, CardRenderer.CardStackPosition.Top, Forge.enableUIMask.equals("Art"), true);
G.end(); g.end();
G.endClip(); g.endClip();
//Rendering ends here. Create a new Pixmap to Texture with mipmaps, otherwise will render as full black. //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()); Texture result = new Texture(Pixmap.createFromFrameBuffer(0, 0, preview_w, preview_h), Forge.isTextureFilteringEnabled());
frameBuffer.end(); frameBuffer.end();
G.dispose(); g.dispose();
frameBuffer.dispose(); frameBuffer.dispose();
return result; 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 frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, preview_w, preview_h, false);
frameBuffer.begin(); frameBuffer.begin();
m.setToOrtho2D(0,preview_h, preview_w, -preview_h); //So it renders flipped directly. m.setToOrtho2D(0,preview_h, preview_w, -preview_h); //So it renders flipped directly.
Graphics G = new Graphics(); getGraphics().begin(preview_w, preview_h);
G.begin(preview_w, preview_h); getGraphics().setProjectionMatrix(m);
G.setProjectionMatrix(m); getGraphics().startClip();
G.startClip();
//Draw item description panel. //Draw item description panel.
G.fillRect(new Color(0f, 0f, 0f, 0.96f), 0, 0, preview_w, preview_h); //Translucent background. getGraphics().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. getGraphics().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. getGraphics().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. 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.
G.drawRectLines(1, Color.WHITE, 6, icon_h + 2, preview_w - 12, preview_h - (icon_h + 6)); //Description border. getGraphics().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. getGraphics().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(); getGraphics().end();
G.endClip(); getGraphics().endClip();
generatedTooltip = new Texture(Pixmap.createFromFrameBuffer(0, 0, preview_w, preview_h), Forge.isTextureFilteringEnabled()); generatedTooltip = new Texture(Pixmap.createFromFrameBuffer(0, 0, preview_w, preview_h), Forge.isTextureFilteringEnabled());
frameBuffer.end(); frameBuffer.end();
G.dispose(); getGraphics().dispose();
frameBuffer.dispose(); frameBuffer.dispose();
} }
@@ -354,6 +361,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
if (holdTooltip != null) { if (holdTooltip != null) {
try { try {
hover = false; hover = false;
holdTooltip.tooltip_actor.clear();
holdTooltip.tooltip_actor.remove(); holdTooltip.tooltip_actor.remove();
} catch (Exception e){} } catch (Exception e){}
} }
@@ -430,7 +438,19 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
width = getWidth(); width = getWidth();
x = -getWidth() / 2; 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 (image != null) {
if (!sold) if (!sold)
batch.draw(ImageCache.croppedBorderImage(image), x, -getHeight() / 2, width, getHeight()); 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.setShader(null);
batch.begin(); 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) { private void applyProjectionMatrix(Batch batch) {
final Vector3 direction = new Vector3(0, 0, -1); final Vector3 direction = new Vector3(0, 0, -1);
final Vector3 up = new Vector3(0, 1, 0); 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.AssetLoaderParameters;
import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.assets.loaders.FileHandleResolver; 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.assets.loaders.resolvers.AbsoluteFileHandleResolver;
import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Pixmap;
@@ -44,6 +44,7 @@ public class Assets implements Disposable {
public Skin skin; public Skin skin;
public BitmapFont advDefaultFont, advBigFont; public BitmapFont advDefaultFont, advBigFont;
private Texture defaultImage, dummy; private Texture defaultImage, dummy;
private TextureParameter parameter;
public Assets() { public Assets() {
//init titlebg fallback //init titlebg fallback
fallback_skins.put(0, new Texture(GuiBase.isAndroid() fallback_skins.put(0, new Texture(GuiBase.isAndroid()
@@ -163,6 +164,20 @@ public class Assets implements Disposable {
tmxMap = new ObjectMap<>(); tmxMap = new ObjectMap<>();
return tmxMap; 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() { public Texture getDefaultImage() {
if (defaultImage == null) { if (defaultImage == null) {
FileHandle blankImage = Gdx.files.absolute(ForgeConstants.NO_CARD_FILE); FileHandle blankImage = Gdx.files.absolute(ForgeConstants.NO_CARD_FILE);
@@ -171,7 +186,7 @@ public class Assets implements Disposable {
if (defaultImage != null) if (defaultImage != null)
return defaultImage; return defaultImage;
//if not loaded yet, load to assetmanager //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()); manager.finishLoadingAsset(blankImage.path());
defaultImage = manager.get(blankImage.path()); defaultImage = manager.get(blankImage.path());
} else { } else {
@@ -232,7 +247,7 @@ public class Assets implements Disposable {
public synchronized <T> void load(String fileName, Class<T> type, AssetLoaderParameters<T> parameter) { public synchronized <T> void load(String fileName, Class<T> type, AssetLoaderParameters<T> parameter) {
if (type.equals(Texture.class)) { if (type.equals(Texture.class)) {
if (parameter == null) { if (parameter == null) {
parameter = (AssetLoaderParameters<T>) new TextureLoader.TextureParameter(); parameter = (AssetLoaderParameters<T>) new TextureParameter();
} }
final AssetLoaderParameters.LoadedCallback prevCallback = parameter.loadedCallback; final AssetLoaderParameters.LoadedCallback prevCallback = parameter.loadedCallback;

View File

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

View File

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