From af2d02e9f228a8c22eccde11c8df7d122111b760 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 25 Sep 2021 17:34:36 +0800 Subject: [PATCH] #Update Meld Transform --- .../src/forge/card/CardRenderer.java | 37 +++++++++++++++++++ .../src/forge/toolbox/FCardPanel.java | 26 ++++++++++--- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/forge-gui-mobile/src/forge/card/CardRenderer.java b/forge-gui-mobile/src/forge/card/CardRenderer.java index 9b009eb4e41..a484528b293 100644 --- a/forge-gui-mobile/src/forge/card/CardRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardRenderer.java @@ -388,6 +388,43 @@ public class CardRenderer { return cardArt; } + public static FImageComplex getMeldCardParts(final String imageKey, boolean bottom) { + FImageComplex cardArt; + if (!bottom) { + cardArt = cardArtCache.get("Meld_primary_"+imageKey); + } else { + cardArt = cardArtCache.get("Meld_secondary_"+imageKey); + } + + if (cardArt == null) { + Texture image = new CachedCardImage(imageKey) { + @Override + public void onImageFetched() { + ImageCache.clear(); + cardArtCache.remove("Meld_primary_" + imageKey); + cardArtCache.remove("Meld_secondary_" + imageKey); + } + }.getImage(); + if (image != null) { + if (image == ImageCache.defaultImage) { + cardArt = CardImageRenderer.forgeArt; + } else { + float x = 0; + float w = image.getWidth(); + float h = image.getHeight()/2f; + float y = bottom ? h : 0; + cardArt = new FTextureRegionImage(new TextureRegion(image, Math.round(x), Math.round(y), Math.round(w), Math.round(h))); + + } + if (!bottom) + cardArtCache.put("Meld_primary_"+imageKey, cardArt); + else + cardArtCache.put("Meld_secondary_"+imageKey, cardArt); + } + } + return cardArt; + } + public static void drawCardListItem(Graphics g, FSkinFont font, FSkinColor foreColor, CardView card, int count, String suffix, float x, float y, float w, float h, boolean compactMode) { final CardStateView state = card.getCurrentState(); if (card.getId() > 0) { diff --git a/forge-gui-mobile/src/forge/toolbox/FCardPanel.java b/forge-gui-mobile/src/forge/toolbox/FCardPanel.java index 45921c9f7b9..518d60de14b 100644 --- a/forge-gui-mobile/src/forge/toolbox/FCardPanel.java +++ b/forge-gui-mobile/src/forge/toolbox/FCardPanel.java @@ -5,6 +5,7 @@ import forge.Forge; import forge.Graphics; import forge.animation.ForgeAnimation; import forge.assets.FSkin; +import forge.card.CardImageRenderer; import forge.card.CardRenderer; import forge.card.CardRenderer.CardStackPosition; import forge.card.CardStateName; @@ -200,7 +201,7 @@ public class FCardPanel extends FDisplayObject { } } private class CardTransformAnimation extends ForgeAnimation { - private static final float DURATION = 0.18f; + private float DURATION = 0.18f; private float progress = 0; private void drawCard(Graphics g, CardView card, float x, float y, float w, float h) { @@ -216,16 +217,29 @@ public class FCardPanel extends FDisplayObject { float x2 = x + (w - (w*mod))/2; float w2 = w*mod; float h2 = h*mod; + float gap = (h/2) - (percentage*(h/2)); if (card.getCurrentState().getState() == CardStateName.Original) { + DURATION = 0.16f; //rollback CardRenderer.drawCardWithOverlays(g, card, x2, y, w2, h, getStackPosition()); - } else if (card.hasAlternateState() && (card.getCurrentState().getState() == CardStateName.Flipped - || card.getCurrentState().getState() == CardStateName.Transformed || card.getCurrentState().getState() == CardStateName.Meld)) { + } else { //transform - if (card.getCurrentState().getState() == CardStateName.Transformed || card.getCurrentState().getState() == CardStateName.Flipped) + if (card.getCurrentState().getState() == CardStateName.Transformed || card.getCurrentState().getState() == CardStateName.Flipped) { + DURATION = 0.16f; CardRenderer.drawCardWithOverlays(g, card, x2, y, w2, h, getStackPosition()); - else if (card.getCurrentState().getState() == CardStateName.Meld) - CardRenderer.drawCardWithOverlays(g, card, x2, y2, w2, h2, getStackPosition()); + } else if (card.getCurrentState().getState() == CardStateName.Meld) { + if (CardRenderer.getMeldCardParts(card.getCurrentState().getImageKey(), false) == CardImageRenderer.forgeArt) { + DURATION = 0.18f; + CardRenderer.drawCardWithOverlays(g, card, x2, y2, w2, h2, getStackPosition()); + } else { + //Meld Animation merging + DURATION = 0.25f; + //top card + g.drawImage(CardRenderer.getMeldCardParts(card.getCurrentState().getImageKey(), false), x, y-gap, w, h/2); + //bottom card + g.drawImage(CardRenderer.getMeldCardParts(card.getCurrentState().getImageKey(), true), x, y+h/2+gap, w, h/2); + } + } } } @Override