refactor RewardActor

- fetched images online should update and appear immediately after download on Adventure mode on RewardScene (Shop, Loot)
This commit is contained in:
Anthony Calosa
2022-07-27 14:26:08 +08:00
parent e6066c6d41
commit 4855ddcf5c

View File

@@ -73,6 +73,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
if (generatedTooltip != null) if (generatedTooltip != null)
generatedTooltip.dispose(); generatedTooltip.dispose();
} }
if (T != null)
T.dispose();
} }
public Reward getReward() { public Reward getReward() {
@@ -81,7 +83,50 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
@Override @Override
public void onImageFetched() { public void onImageFetched() {
setCardImage(ImageCache.getImage(reward.getCard().getImageKey(false), false)); for (Actor a : getStage().getActors()) {
if (a instanceof RewardActor && a == this) {
((RewardActor) a).image = ImageCache.getImage(reward.getCard().getImageKey(false), false);
if (((RewardActor) a).image != null) {
try {
TextureRegionDrawable drawable = new TextureRegionDrawable(ImageCache.croppedBorderImage(((RewardActor) a).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 (((RewardActor) a).holdTooltip.tooltip_image.getDrawable() instanceof Texture) {
((Texture) ((RewardActor) a).holdTooltip.tooltip_image.getDrawable()).dispose();
}
Actor ht = ((RewardActor) a).holdTooltip.tooltip_actor.getCells().get(0).getActor();
if (ht != null && ht instanceof Image) {
if (((Image) ht).getDrawable() instanceof Texture) {
((Texture) ((Image) ht).getDrawable()).dispose();
}
}
((RewardActor) a).holdTooltip.tooltip_actor.removeActorAt(0, false);
((RewardActor) a).holdTooltip.tooltip_actor.add(toolTipImage);
} else {
Image renderedImage = ((RewardActor) a).tooltip.getActor();
if (renderedImage != null && renderedImage.getDrawable() instanceof Texture) {
((Texture) ((RewardActor) a).tooltip.getActor().getDrawable()).dispose();
}
((RewardActor) a).tooltip.setActor(toolTipImage);
}
if (T != null)
T.dispose();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
} }
public RewardActor(Reward reward, boolean flippable) { public RewardActor(Reward reward, boolean flippable) {
@@ -106,13 +151,6 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} }
T = renderPlaceholder(G, reward.getCard()); //Now we can render the card. T = renderPlaceholder(G, reward.getCard()); //Now we can render the card.
setCardImage(T); setCardImage(T);
if (image == null) {
if (T == null)
System.err.println("Error generating placeholder image for card: "+reward.getCard().getName());
else
image = T;
}
//Set the fetcher regardless. It'll replace the preview once it lands.
fetcher.fetchImage(reward.getCard().getImageKey(false), this); fetcher.fetchImage(reward.getCard().getImageKey(false), this);
} }
} }
@@ -217,14 +255,19 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f); drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f);
else else
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f); drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
if (toolTipImage == null)
toolTipImage = new Image(drawable); toolTipImage = new Image(drawable);
tooltip = new Tooltip<Image>(toolTipImage); if (GuiBase.isAndroid()) {
holdTooltip = new HoldTooltip(new Image(drawable)); if (holdTooltip == null)
tooltip.setInstant(true); holdTooltip = new HoldTooltip(toolTipImage);
if (frontSideUp()) { if (frontSideUp())
if (GuiBase.isAndroid())
addListener(holdTooltip); addListener(holdTooltip);
else
} else {
if (tooltip == null)
tooltip = new Tooltip<Image>(toolTipImage);
tooltip.setInstant(true);
if (frontSideUp())
addListener(tooltip); addListener(tooltip);
} }
} catch (Exception e) { } catch (Exception e) {
@@ -253,6 +296,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} }
private void setItemTooltips(Sprite icon) { private void setItemTooltips(Sprite icon) {
if (generatedTooltip == null) {
float icon_w = 64f; float icon_h = 64f; //Sizes for the embedded icon. Could be made smaller on smaller resolutions. float icon_w = 64f; float icon_h = 64f; //Sizes for the embedded icon. Could be made smaller on smaller resolutions.
Matrix4 m = new Matrix4(); Matrix4 m = new Matrix4();
ItemData item = getReward().getItem(); ItemData item = getReward().getItem();
@@ -272,26 +316,36 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
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.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.end();
G.endClip(); G.endClip();
Texture result = 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(); G.dispose();
frameBuffer.dispose(); frameBuffer.dispose();
}
//Rendering code ends here. //Rendering code ends here.
TextureRegionDrawable drawable = new TextureRegionDrawable(result); TextureRegionDrawable drawable = new TextureRegionDrawable(generatedTooltip);
if(Forge.isLandscapeMode()) if(Forge.isLandscapeMode())
drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f); drawable.setMinSize((Scene.getIntendedHeight() / RewardScene.CARD_WIDTH_TO_HEIGHT) * 0.95f, Scene.getIntendedHeight() * 0.95f);
else else
drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f); drawable.setMinSize(Scene.getIntendedWidth() * 0.95f, Scene.getIntendedWidth()* RewardScene.CARD_WIDTH_TO_HEIGHT * 0.95f);
if (toolTipImage == null)
toolTipImage = new Image(drawable); toolTipImage = new Image(drawable);
tooltip = new Tooltip<>(toolTipImage);
holdTooltip = new HoldTooltip(new Image(drawable));
tooltip.setInstant(true);
if (frontSideUp()) { if (frontSideUp()) {
if (GuiBase.isAndroid()) addListener(holdTooltip); if (GuiBase.isAndroid()) {
else addListener(tooltip); if (holdTooltip == null)
holdTooltip = new HoldTooltip(toolTipImage);
addListener(holdTooltip);
} else {
if (tooltip == null) {
tooltip = new Tooltip<>(toolTipImage);
tooltip.setInstant(true);
}
addListener(tooltip);
}
} }
generatedTooltip = result; //Dispose of this later.
} }
private boolean frontSideUp() { private boolean frontSideUp() {