#Update Meld Transform

This commit is contained in:
Anthony Calosa
2021-09-25 17:34:36 +08:00
parent 215268cf81
commit af2d02e9f2
2 changed files with 57 additions and 6 deletions

View File

@@ -388,6 +388,43 @@ public class CardRenderer {
return cardArt; 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) { 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(); final CardStateView state = card.getCurrentState();
if (card.getId() > 0) { if (card.getId() > 0) {

View File

@@ -5,6 +5,7 @@ import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.animation.ForgeAnimation; import forge.animation.ForgeAnimation;
import forge.assets.FSkin; import forge.assets.FSkin;
import forge.card.CardImageRenderer;
import forge.card.CardRenderer; import forge.card.CardRenderer;
import forge.card.CardRenderer.CardStackPosition; import forge.card.CardRenderer.CardStackPosition;
import forge.card.CardStateName; import forge.card.CardStateName;
@@ -200,7 +201,7 @@ public class FCardPanel extends FDisplayObject {
} }
} }
private class CardTransformAnimation extends ForgeAnimation { private class CardTransformAnimation extends ForgeAnimation {
private static final float DURATION = 0.18f; private float DURATION = 0.18f;
private float progress = 0; private float progress = 0;
private void drawCard(Graphics g, CardView card, float x, float y, float w, float h) { 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 x2 = x + (w - (w*mod))/2;
float w2 = w*mod; float w2 = w*mod;
float h2 = h*mod; float h2 = h*mod;
float gap = (h/2) - (percentage*(h/2));
if (card.getCurrentState().getState() == CardStateName.Original) { if (card.getCurrentState().getState() == CardStateName.Original) {
DURATION = 0.16f;
//rollback //rollback
CardRenderer.drawCardWithOverlays(g, card, x2, y, w2, h, getStackPosition()); CardRenderer.drawCardWithOverlays(g, card, x2, y, w2, h, getStackPosition());
} else if (card.hasAlternateState() && (card.getCurrentState().getState() == CardStateName.Flipped } else {
|| card.getCurrentState().getState() == CardStateName.Transformed || card.getCurrentState().getState() == CardStateName.Meld)) {
//transform //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()); CardRenderer.drawCardWithOverlays(g, card, x2, y, w2, h, getStackPosition());
else if (card.getCurrentState().getState() == CardStateName.Meld) } else if (card.getCurrentState().getState() == CardStateName.Meld) {
CardRenderer.drawCardWithOverlays(g, card, x2, y2, w2, h2, getStackPosition()); 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 @Override