mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
Fix so card avatar images draw reliably and at the correct aspect ratio
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -1236,6 +1236,7 @@ forge-gui-mobile/src/forge/assets/FTextureRegionImage.java -text
|
||||
forge-gui-mobile/src/forge/assets/ImageCache.java -text
|
||||
forge-gui-mobile/src/forge/assets/ImageLoader.java -text
|
||||
forge-gui-mobile/src/forge/assets/TextRenderer.java -text
|
||||
forge-gui-mobile/src/forge/card/CardAvatarImage.java -text
|
||||
forge-gui-mobile/src/forge/card/CardFaceSymbols.java -text
|
||||
forge-gui-mobile/src/forge/card/CardImageRenderer.java -text
|
||||
forge-gui-mobile/src/forge/card/CardListPreview.java -text
|
||||
|
||||
63
forge-gui-mobile/src/forge/card/CardAvatarImage.java
Normal file
63
forge-gui-mobile/src/forge/card/CardAvatarImage.java
Normal file
@@ -0,0 +1,63 @@
|
||||
package forge.card;
|
||||
|
||||
import forge.Graphics;
|
||||
import forge.assets.FImage;
|
||||
import forge.item.PaperCard;
|
||||
|
||||
public class CardAvatarImage implements FImage {
|
||||
private final String imageKey;
|
||||
private FImage image;
|
||||
|
||||
public CardAvatarImage(PaperCard card0) {
|
||||
this(card0.getImageKey(false));
|
||||
}
|
||||
public CardAvatarImage(String imageKey0) {
|
||||
imageKey = imageKey0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getWidth() {
|
||||
if (image != null) {
|
||||
return image.getHeight(); //image will be drawn at its height
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getHeight() {
|
||||
if (image != null) {
|
||||
return image.getHeight();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Graphics g, float x, float y, float w, float h) {
|
||||
if (image == null) { //attempt to retrieve card art if needed
|
||||
image = CardRenderer.getCardArt(imageKey, false, false);
|
||||
if (image == null) {
|
||||
return; //can't draw anything if can't be loaded yet
|
||||
}
|
||||
}
|
||||
|
||||
//draw scaled image into clipped region so it fills box while maintain aspect ratio
|
||||
g.startClip(x, y, w, h);
|
||||
|
||||
float aspectRatio = w / h;
|
||||
float imageAspectRatio = image.getWidth() / image.getHeight();
|
||||
if (imageAspectRatio > aspectRatio) {
|
||||
float w0 = w * imageAspectRatio / aspectRatio;
|
||||
x -= (w0 - w) / 2;
|
||||
w = w0;
|
||||
}
|
||||
else {
|
||||
float h0 = h * aspectRatio / imageAspectRatio;
|
||||
y -= (h0 - h) / 2;
|
||||
h = h0;
|
||||
}
|
||||
|
||||
image.draw(g, x, y, w, h);
|
||||
|
||||
g.endClip();
|
||||
}
|
||||
}
|
||||
@@ -20,11 +20,10 @@ import forge.GuiBase;
|
||||
import forge.LobbyPlayer;
|
||||
import forge.assets.FImage;
|
||||
import forge.assets.FSkin;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.assets.FSkinProp;
|
||||
import forge.assets.FTextureRegionImage;
|
||||
import forge.assets.ImageCache;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.card.CardAvatarImage;
|
||||
import forge.card.GameEntityPicker;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.FSideboardDialog;
|
||||
@@ -94,10 +93,7 @@ public class MatchController extends AbstractGuiGame {
|
||||
avatar = new FTextureRegionImage(FSkin.getAvatars().get(p.getAvatarIndex()));
|
||||
}
|
||||
else { //handle lobby players with art from cards
|
||||
avatar = CardRenderer.getCardArt(p.getAvatarCardImageKey(), false, false);
|
||||
if (avatar == null) { //use unknown avatar image if card image doesn't exist
|
||||
avatar = FSkinImage.UNKNOWN;
|
||||
}
|
||||
avatar = new CardAvatarImage(p.getAvatarCardImageKey());
|
||||
}
|
||||
}
|
||||
return avatar;
|
||||
|
||||
@@ -16,6 +16,7 @@ import forge.assets.FSkinColor;
|
||||
import forge.assets.FSkinFont;
|
||||
import forge.assets.FSkinImage;
|
||||
import forge.assets.FSkinTexture;
|
||||
import forge.card.CardAvatarImage;
|
||||
import forge.card.CardDetailUtil;
|
||||
import forge.card.CardRenderer;
|
||||
import forge.card.CardZoom;
|
||||
@@ -599,8 +600,8 @@ public class ConquestMultiverseScreen extends FScreen {
|
||||
|
||||
private void update() {
|
||||
event = model.getCurrentLocation().getEvent();
|
||||
playerAvatar.card = model.getSelectedCommander().getCard();
|
||||
opponentAvatar.card = event.getAvatarCard();
|
||||
playerAvatar.setCard(model.getSelectedCommander().getCard());
|
||||
opponentAvatar.setCard(event.getAvatarCard());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -655,21 +656,23 @@ public class ConquestMultiverseScreen extends FScreen {
|
||||
private class AvatarDisplay extends FDisplayObject {
|
||||
private final boolean forOpponent;
|
||||
private PaperCard card;
|
||||
private CardAvatarImage image;
|
||||
|
||||
private AvatarDisplay(boolean forOpponent0) {
|
||||
forOpponent = forOpponent0;
|
||||
}
|
||||
|
||||
public void setCard(PaperCard card0) {
|
||||
if (card == card0) { return; }
|
||||
card = card0;
|
||||
image = new CardAvatarImage(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Graphics g) {
|
||||
if (card == null) { return; }
|
||||
|
||||
FImage image = CardRenderer.getCardArt(card);
|
||||
if (image == null) { return; }
|
||||
|
||||
float w = getWidth();
|
||||
float h = getHeight();
|
||||
g.drawImage(image, 0, 0, w, h);
|
||||
if (image != null) {
|
||||
image.draw(g, 0, 0, getWidth(), getHeight());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user