package magic.ui.screen.duel.game; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JPanel; import javax.swing.SwingUtilities; import magic.model.MagicCardList; import magic.ui.duel.resolution.ResolutionProfileResult; import magic.ui.duel.resolution.ResolutionProfileType; import magic.ui.duel.viewerinfo.CardViewerInfo; import magic.ui.widget.duel.viewer.ImageBattlefieldViewer; import magic.ui.widget.duel.viewer.ImageCombatViewer; import magic.ui.widget.duel.viewer.PlayerZoneViewer; @SuppressWarnings("serial") public class BattlefieldPanel extends JPanel { private final BattlefieldTextOverlay textOverlay = new BattlefieldTextOverlay(); private final PlayerZoneViewer playerZoneViewer; public final ImageBattlefieldViewer imagePlayerPermanentViewer; public final ImageBattlefieldViewer imageOpponentPermanentViewer; private final ImageCombatViewer imageCombatViewer; public BattlefieldPanel(final SwingGameController controller) { playerZoneViewer = controller.getPlayerZoneViewer(); imagePlayerPermanentViewer = new ImageBattlefieldViewer(controller, false); imageOpponentPermanentViewer = new ImageBattlefieldViewer(controller, true); imageCombatViewer = new ImageCombatViewer(controller); playerZoneViewer.addPropertyChangeListener(PlayerZoneViewer.CP_PLAYER_ZONE, new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { textOverlay.setPlayerZoneName((String) evt.getNewValue()); repaint(); } }); setLayout(null); add(playerZoneViewer); add(imagePlayerPermanentViewer); add(imageOpponentPermanentViewer); add(imageCombatViewer); setOpaque(false); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (controller.waitingForUser() && e.getClickCount() == 2) { if (SwingUtilities.isLeftMouseButton(e)) { controller.actionClicked(); } else if (SwingUtilities.isRightMouseButton(e)) { controller.passKeyPressed(); } } } }); } public void doUpdate() { playerZoneViewer.update(); imagePlayerPermanentViewer.update(); imageOpponentPermanentViewer.update(); imageCombatViewer.update(); } public void showCards(final MagicCardList cards) { playerZoneViewer.showCards(cards); playerZoneViewer.setSelectedTab(5); } public void focusViewers(int handGraveyard) { playerZoneViewer.setSelectedTab(handGraveyard); } public void resizeComponents(ResolutionProfileResult result) { playerZoneViewer.setBounds(result.getBoundary(ResolutionProfileType.GameImageHandGraveyardViewer)); imagePlayerPermanentViewer.setBounds(result.getBoundary(ResolutionProfileType.GameImagePlayerPermanentViewer)); imageOpponentPermanentViewer.setBounds(result.getBoundary(ResolutionProfileType.GameImageOpponentPermanentViewer)); imageCombatViewer.setBounds(result.getBoundary(ResolutionProfileType.GameImageCombatViewer)); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); final Image overlayImage = textOverlay.getOverlayImage(getWidth(), getHeight()); g.drawImage(overlayImage, 0, 0, this); } public void highlightCard(CardViewerInfo cardInfo, boolean b) { if (!imagePlayerPermanentViewer.highlightCard(cardInfo, b)) if (!imageOpponentPermanentViewer.highlightCard(cardInfo, b)) imageCombatViewer.highlightCard(cardInfo, b); } }