enable split card rendering in Cardbuilder

master
ShawnieBoy 2016-01-31 19:17:52 +00:00
parent 57b5114727
commit beb223b264
2 changed files with 45 additions and 5 deletions

View File

@ -37,6 +37,10 @@ public interface IRenderableCard {
return getCardDefinition().getTransformedDefinition();
}
default MagicCardDefinition getSplitDefinition() {
return getCardDefinition().getSplitDefinition();
}
default int getStartingLoyalty() {
return getCardDefinition().getStartingLoyalty();
}
@ -79,6 +83,10 @@ public interface IRenderableCard {
return getCardDefinition().isHidden();
}
default boolean isSecondHalf() {
return getCardDefinition().isSecondHalf();
}
default Character getRarityChar() {
return getCardDefinition().getRarityChar();
}

View File

@ -1,5 +1,7 @@
package magic.ui.cardBuilder.renderers;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import magic.model.MagicAbility;
@ -27,6 +29,9 @@ public class CardBuilder {
} else if (cardDef.isFlipCard()) {
image = makeFlipCard(cardDef);
} else if (cardDef.isSplitCard()) {
image = makeSplitCard(cardDef);
} else {
image = makeBasicCard(cardDef);
}
@ -58,6 +63,33 @@ public class CardBuilder {
return makeBasicCard(cardDef);
}
private static BufferedImage makeSplitCard(IRenderableCard cardDef) {
BufferedImage firstHalf;
BufferedImage secondHalf;
if (cardDef.isSecondHalf()) {
firstHalf = makeBasicCard(cardDef.getSplitDefinition());
secondHalf = makeBasicCard(cardDef);
} else {
firstHalf = makeBasicCard(cardDef);
secondHalf = makeBasicCard(cardDef.getSplitDefinition());
}
BufferedImage base = new BufferedImage(firstHalf.getHeight(), firstHalf.getWidth() * 2, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics2D = base.createGraphics();
//Transforms occur in reverse order
AffineTransform affineTransform1 = new AffineTransform();
affineTransform1.translate(0, firstHalf.getWidth() * 2);
affineTransform1.rotate(-Math.PI / 2, 0, 0);
graphics2D.drawImage(firstHalf, affineTransform1, null);
AffineTransform affineTransform2 = new AffineTransform();
affineTransform2.translate(0, secondHalf.getWidth());
affineTransform2.rotate(-Math.PI / 2, 0, 0);
graphics2D.drawImage(secondHalf, affineTransform2, null);
graphics2D.dispose();
return base;
}
private static BufferedImage makeToken(IRenderableCard cardDef) {
BufferedImage cardImage = Frame.getTokenFrameType(cardDef);
PTFrame.drawPTPanel(cardImage, cardDef);
@ -83,11 +115,11 @@ public class CardBuilder {
private static BufferedImage makeBasicCard(IRenderableCard cardDef) {
BufferedImage cardImage = cardDef.hasAbility(MagicAbility.Devoid) ? Frame.getColorlessFrameType(cardDef) : Frame.getBasicFrameType(cardDef);
Overlay.drawOverlay(cardImage, cardDef);
Overlay.drawTextOverlay(cardImage,cardDef);
if (cardDef.hasAbility(MagicAbility.LevelUp)){
PTFrame.drawLevellerPTPanels(cardImage,cardDef);
PTFrame.drawLevellerArrowText(cardImage,cardDef);
OracleText.drawLevellerOracleText(cardImage,cardDef);
Overlay.drawTextOverlay(cardImage, cardDef);
if (cardDef.hasAbility(MagicAbility.LevelUp)) {
PTFrame.drawLevellerPTPanels(cardImage, cardDef);
PTFrame.drawLevellerArrowText(cardImage, cardDef);
OracleText.drawLevellerOracleText(cardImage, cardDef);
} else {
PTFrame.drawPTPanel(cardImage, cardDef);
OracleText.drawOracleText(cardImage, cardDef);