package magic.ui.widget.duel.viewer; import magic.ui.duel.viewerinfo.GameViewerInfo; import magic.ui.duel.viewerinfo.PlayerViewerInfo; import magic.ui.duel.viewerinfo.PermanentViewerInfo; import magic.ui.IChoiceViewer; import magic.ui.screen.duel.game.SwingGameController; import magic.ui.theme.Theme; import magic.ui.FontsAndBorders; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Dimension; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import magic.ui.duel.viewerinfo.CardViewerInfo; import magic.ui.utility.MagicStyle; @SuppressWarnings("serial") public class ImageCombatViewer extends JPanel implements IChoiceViewer { private final SwingGameController controller; private final ImagePermanentsViewer permanentsViewer; public ImageCombatViewer(final SwingGameController aController) { controller = aController; controller.registerChoiceViewer(this); setLayout(new BorderLayout(6,0)); setOpaque(false); final JPanel leftPanel=new JPanel(new BorderLayout()); leftPanel.setOpaque(false); add(leftPanel,BorderLayout.WEST); if (MagicStyle.getTheme().hasValue(Theme.ICON_SMALL_COMBAT)) { final JLabel combatLabel = new JLabel(MagicStyle.getTheme().getIcon(Theme.ICON_SMALL_COMBAT)); combatLabel.setOpaque(true); combatLabel.setBackground(MagicStyle.getTheme().getColor(Theme.COLOR_ICON_BACKGROUND)); combatLabel.setPreferredSize(new Dimension(24, 24)); combatLabel.setBorder(FontsAndBorders.BLACK_BORDER); leftPanel.add(combatLabel, BorderLayout.NORTH); } permanentsViewer=new ImagePermanentsViewer(controller); add(permanentsViewer,BorderLayout.CENTER); } public void update() { final SortedSet<PermanentViewerInfo> creatures = new TreeSet<>(PermanentViewerInfo.BLOCKED_NAME_COMPARATOR); final GameViewerInfo viewerInfo = controller.getViewerInfo(); final PlayerViewerInfo attackingPlayerInfo=viewerInfo.getAttackingPlayerInfo(); for (final PermanentViewerInfo permanentInfo : attackingPlayerInfo.permanents) { if (permanentInfo.attacking) { creatures.add(permanentInfo); } } //add in blockers whose attacker is destroyed final PlayerViewerInfo defendingPlayerInfo=viewerInfo.getDefendingPlayerInfo(); for (final PermanentViewerInfo permanentInfo : defendingPlayerInfo.permanents) { if (permanentInfo.blocking && permanentInfo.blockingInvalid) { creatures.add(permanentInfo); } } permanentsViewer.viewPermanents(creatures); } @Override public void showValidChoices(final Set<?> validChoices) { permanentsViewer.showValidChoices(validChoices); } public boolean highlightCard(CardViewerInfo cardInfo, boolean b) { final ImagePermanentViewer viewer = permanentsViewer.getViewer(cardInfo); permanentsViewer.highlightCard(viewer, b ? cardInfo.getId() : 0); return viewer != null; } }