diff --git a/forge-adventure/pom.xml b/forge-adventure/pom.xml index 9b2fd342fe3..d2bc0fcd175 100644 --- a/forge-adventure/pom.xml +++ b/forge-adventure/pom.xml @@ -180,7 +180,7 @@ ${basedir}/${configSourceDirectory} - forge-adventure.sh, forge-adventure.command, forge-adventure.cmd + forge-adventure.sh, forge-adventure-mac.sh, forge-adventure.command, forge-adventure.cmd ${project.build.directory} . false diff --git a/forge-gui-mobile/src/forge/adventure/util/RewardActor.java b/forge-gui-mobile/src/forge/adventure/util/RewardActor.java index e1a1831c45b..a3d2dad441a 100644 --- a/forge-gui-mobile/src/forge/adventure/util/RewardActor.java +++ b/forge-gui-mobile/src/forge/adventure/util/RewardActor.java @@ -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(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(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); diff --git a/forge-gui-mobile/src/forge/assets/Assets.java b/forge-gui-mobile/src/forge/assets/Assets.java index bb64de2c90e..2e141b0d932 100644 --- a/forge-gui-mobile/src/forge/assets/Assets.java +++ b/forge-gui-mobile/src/forge/assets/Assets.java @@ -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 void load(String fileName, Class type, AssetLoaderParameters parameter) { if (type.equals(Texture.class)) { if (parameter == null) { - parameter = (AssetLoaderParameters) new TextureLoader.TextureParameter(); + parameter = (AssetLoaderParameters) new TextureParameter(); } final AssetLoaderParameters.LoadedCallback prevCallback = parameter.loadedCallback; diff --git a/forge-gui-mobile/src/forge/assets/FSkin.java b/forge-gui-mobile/src/forge/assets/FSkin.java index e5e2cf06010..c7695597fca 100644 --- a/forge-gui-mobile/src/forge/assets/FSkin.java +++ b/forge-gui-mobile/src/forge/assets/FSkin.java @@ -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)); diff --git a/forge-gui-mobile/src/forge/assets/FSkinImage.java b/forge-gui-mobile/src/forge/assets/FSkinImage.java index 7c4dd86a5a6..2e79623a888 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinImage.java +++ b/forge-gui-mobile/src/forge/assets/FSkinImage.java @@ -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); } diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java index 5370c8b6c16..7416358b574 100644 --- a/forge-gui-mobile/src/forge/assets/ImageCache.java +++ b/forge-gui-mobile/src/forge/assets/ImageCache.java @@ -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 q; static Set cardsLoaded; static Queue 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 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 keys) { if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DISABLE_CARD_IMAGES))