mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 20:28:00 +00:00
refactor RewardActor
- fetched images online should update and appear immediately after download on Adventure mode on RewardScene (Shop, Loot)
This commit is contained in:
@@ -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);
|
||||||
toolTipImage = new Image(drawable);
|
if (toolTipImage == null)
|
||||||
tooltip = new Tooltip<Image>(toolTipImage);
|
toolTipImage = new Image(drawable);
|
||||||
holdTooltip = new HoldTooltip(new Image(drawable));
|
if (GuiBase.isAndroid()) {
|
||||||
tooltip.setInstant(true);
|
if (holdTooltip == null)
|
||||||
if (frontSideUp()) {
|
holdTooltip = new HoldTooltip(toolTipImage);
|
||||||
if (GuiBase.isAndroid())
|
if (frontSideUp())
|
||||||
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,45 +296,56 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setItemTooltips(Sprite icon) {
|
private void setItemTooltips(Sprite icon) {
|
||||||
float icon_w = 64f; float icon_h = 64f; //Sizes for the embedded icon. Could be made smaller on smaller resolutions.
|
if (generatedTooltip == null) {
|
||||||
Matrix4 m = new Matrix4();
|
float icon_w = 64f; float icon_h = 64f; //Sizes for the embedded icon. Could be made smaller on smaller resolutions.
|
||||||
ItemData item = getReward().getItem();
|
Matrix4 m = new Matrix4();
|
||||||
FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, preview_w, preview_h, false);
|
ItemData item = getReward().getItem();
|
||||||
frameBuffer.begin();
|
FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGBA8888, preview_w, preview_h, false);
|
||||||
m.setToOrtho2D(0,preview_h, preview_w, -preview_h); //So it renders flipped directly.
|
frameBuffer.begin();
|
||||||
Graphics G = new Graphics();
|
m.setToOrtho2D(0,preview_h, preview_w, -preview_h); //So it renders flipped directly.
|
||||||
G.begin(preview_w, preview_h);
|
Graphics G = new Graphics();
|
||||||
G.setProjectionMatrix(m);
|
G.begin(preview_w, preview_h);
|
||||||
G.startClip();
|
G.setProjectionMatrix(m);
|
||||||
//Draw item description panel.
|
G.startClip();
|
||||||
G.fillRect(new Color(0f, 0f, 0f, 0.96f), 0, 0, preview_w, preview_h); //Translucent background.
|
//Draw item description panel.
|
||||||
G.drawRectLines(2, Color.WHITE, 0, 0, preview_w, preview_h); //Add a border.
|
G.fillRect(new Color(0f, 0f, 0f, 0.96f), 0, 0, preview_w, preview_h); //Translucent background.
|
||||||
G.drawImage(icon, 2, 2, icon_w, icon_h); //Draw the item's icon.
|
G.drawRectLines(2, Color.WHITE, 0, 0, preview_w, preview_h); //Add a border.
|
||||||
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.drawImage(icon, 2, 2, icon_w, icon_h); //Draw the item's icon.
|
||||||
G.drawRectLines(1, Color.WHITE, 6, icon_h + 2, preview_w - 12, preview_h - (icon_h + 6)); //Description border.
|
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.drawText(item.getDescription(), FSkinFont.get(18), Color.WHITE, 10, icon_h + 8, preview_w - 10, preview_h - 4, true, Align.left, false); //Description.
|
G.drawRectLines(1, Color.WHITE, 6, icon_h + 2, preview_w - 12, preview_h - (icon_h + 6)); //Description border.
|
||||||
G.end();
|
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.endClip();
|
G.end();
|
||||||
Texture result = new Texture(Pixmap.createFromFrameBuffer(0, 0, preview_w, preview_h), Forge.isTextureFilteringEnabled());
|
G.endClip();
|
||||||
frameBuffer.end();
|
generatedTooltip = new Texture(Pixmap.createFromFrameBuffer(0, 0, preview_w, preview_h), Forge.isTextureFilteringEnabled());
|
||||||
G.dispose();
|
frameBuffer.end();
|
||||||
frameBuffer.dispose();
|
G.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);
|
||||||
toolTipImage = new Image(drawable);
|
|
||||||
tooltip = new Tooltip<>(toolTipImage);
|
if (toolTipImage == null)
|
||||||
holdTooltip = new HoldTooltip(new Image(drawable));
|
toolTipImage = 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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user