magarena/src/magic/cardBuilder/renderers/TypeLine.java

103 lines
3.9 KiB
Java
Raw Normal View History

package magic.cardBuilder.renderers;
2015-12-19 11:11:16 -08:00
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
2020-01-15 12:02:42 -08:00
import magic.awt.MagicFont;
import magic.cardBuilder.CardResource;
2020-01-15 12:02:42 -08:00
import magic.cardBuilder.ResourceManager;
import magic.model.IRenderableCard;
import magic.model.MagicType;
2015-12-19 11:11:16 -08:00
public class TypeLine {
2016-10-10 04:09:03 -07:00
private static final Font cardTypeFont = MagicFont.JaceBelerenBold.get().deriveFont(Font.PLAIN, 16);
private static final Font cardTypeFontSmall = MagicFont.JaceBelerenBold.get().deriveFont(Font.PLAIN, 15);
private static final Font cardTypeFontVerySmall = MagicFont.JaceBelerenBold.get().deriveFont(Font.PLAIN, 14);
private static final Font cardTypeFontSmallest = MagicFont.JaceBelerenBold.get().deriveFont(Font.PLAIN, 13);
2015-12-19 11:11:16 -08:00
private static int padding;
static void drawCardTypeLine(BufferedImage cardImage, IRenderableCard cardDef) {
String cardType = getTypeLine(cardDef);
if (!cardType.isEmpty()) {
Graphics2D g2d = cardImage.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d.setColor(cardDef.isHidden() ? Color.WHITE : Color.BLACK);
2015-12-19 11:11:16 -08:00
g2d.setFont(getFontSize(cardType));
FontMetrics metrics = g2d.getFontMetrics();
int yPos;
if (cardDef.isToken()) {
2016-01-29 12:08:42 -08:00
yPos = cardDef.hasText() ? 359 : 434;
} else if (cardDef.isPlaneswalker() && OracleText.getPlaneswalkerAbilityCount(cardDef) == 4) {
2016-01-29 12:08:42 -08:00
yPos = 266;
2015-12-19 11:11:16 -08:00
} else {
2016-01-29 12:08:42 -08:00
yPos = 301;
2015-12-19 11:11:16 -08:00
}
g2d.drawString(cardType + ' ', 32, yPos + metrics.getAscent() + padding);
2015-12-19 11:11:16 -08:00
g2d.dispose();
}
}
private static Font getFontSize(CharSequence cardType) {
if (cardType.length() > 43) {
2015-12-19 11:11:16 -08:00
padding = 3;
return cardTypeFontSmallest;
}
2016-09-24 07:59:29 -07:00
if (cardType.length() > 39) {
2015-12-19 11:11:16 -08:00
padding = 2;
return cardTypeFontVerySmall;
}
2016-09-24 07:59:29 -07:00
if (cardType.length() > 36) {
2015-12-19 11:11:16 -08:00
padding = 2;
return cardTypeFontSmall;
}
padding = 1;
return cardTypeFont;
}
2015-12-19 14:58:23 -08:00
public static String getTypeLine(IRenderableCard cardDef) {
2015-12-19 11:11:16 -08:00
StringBuilder typeLine = new StringBuilder();
String subtype = cardDef.getSubTypeText();
MagicType.SUPERTYPES.stream().filter(cardDef::hasType).forEach(aSuperType -> typeLine.append(aSuperType).append(' '));
2015-12-19 11:11:16 -08:00
if (cardDef.isToken()) {
typeLine.append("Token ");
}
MagicType.TYPE_ORDER.stream().filter(cardDef::hasType).forEach(aType -> typeLine.append(aType).append(' '));
2015-12-19 11:11:16 -08:00
if (!subtype.isEmpty()) {
typeLine.append("— ");
typeLine.append(subtype.replaceAll(",", ""));
}
return typeLine.toString();
}
2016-01-05 10:15:41 -08:00
public static void drawRarity(BufferedImage cardImage, IRenderableCard cardDef) {
BufferedImage rarity = ResourceManager.getImage(CardResource.common);
if (cardDef.getRarityChar() == 'U') {
rarity = ResourceManager.getImage(CardResource.uncommon);
2016-01-05 10:15:41 -08:00
}
if (cardDef.getRarityChar() == 'R') {
rarity = ResourceManager.getImage(CardResource.rare);
2016-01-05 10:15:41 -08:00
}
if (cardDef.getRarityChar() == 'M') {
rarity = ResourceManager.getImage(CardResource.mythic);
2016-01-05 10:15:41 -08:00
}
Graphics2D g2d = cardImage.createGraphics();
2016-01-05 11:05:41 -08:00
int ypos = 297;
if (cardDef.isPlaneswalker() && OracleText.getPlaneswalkerAbilityCount(cardDef) > 3) {
2016-01-05 11:05:41 -08:00
ypos = 263;
}
if (cardDef.isToken()) {
2016-01-05 11:05:41 -08:00
ypos = cardDef.hasText() ? 356 : 431;
}
int xpos = 322;
g2d.drawImage(rarity, xpos, ypos, null);
2016-01-05 10:15:41 -08:00
}
2015-12-19 11:11:16 -08:00
}