package magic.ui.screen.wip.cardflow; import java.awt.Color; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.stream.Collectors; import javax.swing.JPanel; import magic.data.CardDefinitions; import magic.data.MagicIcon; import magic.model.MagicCardDefinition; import magic.model.MagicRandom; import magic.ui.MagicImages; import magic.ui.helpers.ImageHelper; import magic.ui.screen.HeaderFooterScreen; import magic.ui.screen.widget.MenuButton; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") public class CardFlowScreen extends HeaderFooterScreen implements ICardFlowListener { private static final Color BACKGROUND_COLOR = new Color(18, 30, 49); private final CardFlowPanel cardFlowPanel; public CardFlowScreen() { super("Cardflow Test Screen"); cardFlowPanel = new CardFlowPanel(); cardFlowPanel.setBackground(BACKGROUND_COLOR); final JPanel panel = new JPanel(new MigLayout("insets 0, aligny center")); panel.setOpaque(false); final int h = CardFlowPanel.MAX_IMAGE_SIZE.height + 20; panel.add(cardFlowPanel, "w 100%, h " + h + "!, aligny center"); setMainContent(panel); addToFooter( MenuButton.build(this::doScrollBack, MagicIcon.GO_BACK, "Scroll back", "Move back through cards. Can also use left arrow key."), MenuButton.build(this::doScrollForwards, MagicIcon.GO_NEXT, "Scroll forwards", "Move forward through cards. Can also use right arrow key.") ); cardFlowPanel.addListener(this); cardFlowPanel.setImages(getImages()); } private void doScrollForwards() { cardFlowPanel.doClickRight(); } private void doScrollBack() { cardFlowPanel.doClickLeft(); } private BufferedImage getTestImage(final Color aColor, final String text) { final BufferedImage image = ImageHelper.getCompatibleBufferedImage(CardFlowPanel.MAX_IMAGE_SIZE.width, CardFlowPanel.MAX_IMAGE_SIZE.height); final Graphics2D g2d = image.createGraphics(); g2d.setColor(aColor); g2d.fillRect(0, 0, image.getWidth(), image.getHeight()); g2d.setColor(Color.WHITE); g2d.setFont(getFont().deriveFont(80f)); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.drawString(text, 10, 80); g2d.drawString(text, image.getWidth() - 10 - 50, image.getHeight() - 20); g2d.dispose(); return image; } private List<BufferedImage> getRandomListOfCardImages(int count) { List<MagicCardDefinition> cards = new ArrayList<>(CardDefinitions.getDefaultPlayableCardDefs()); Collections.shuffle(cards, new Random(MagicRandom.nextRNGInt())); return cards.stream() .map(card -> MagicImages.getCardImage(card)) .limit(count) .collect(Collectors.toList()); } private List<BufferedImage> getImages() { final List<BufferedImage> images = new ArrayList<>(); images.add(getTestImage(Color.ORANGE, "0")); images.add(getTestImage(Color.BLUE, "1")); images.add(getTestImage(Color.MAGENTA, "2")); images.addAll(getRandomListOfCardImages(5)); images.add(getTestImage(Color.ORANGE, Integer.toString(images.size()))); images.add(getTestImage(Color.BLUE, Integer.toString(images.size()))); return images; } @Override public void setNewActiveImage(int activeImageIndex) { System.out.printf("setNewActiveImage = %d of %d\n", activeImageIndex, cardFlowPanel.getImagesCount() - 1); } }