package fr.lyrgard.hexScape.gui.desktop.view.game.leftPanel; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Image; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JPanel; import com.google.common.eventbus.Subscribe; import fr.lyrgard.hexScape.bus.GuiMessageBus; import fr.lyrgard.hexScape.gui.desktop.action.ShowCardAction; import fr.lyrgard.hexScape.gui.desktop.message.CardSelectedMessage; import fr.lyrgard.hexScape.message.GameLeftMessage; import fr.lyrgard.hexScape.message.PieceSelectedMessage; import fr.lyrgard.hexScape.message.PieceUnselectedMessage; import fr.lyrgard.hexScape.model.CurrentUserInfo; import fr.lyrgard.hexScape.model.Universe; import fr.lyrgard.hexScape.model.card.CardType; import fr.lyrgard.hexScape.model.game.Game; import fr.lyrgard.hexScape.model.piece.PieceInstance; import fr.lyrgard.hexScape.service.CardService; public class SelectedCardPanel extends JPanel { private static final long serialVersionUID = 2391039578032412686L; private Image image; private JPanel buttonPanel; public SelectedCardPanel() { setMinimumSize(new Dimension(UNDEFINED_CONDITION, 50)); //setPreferredSize(new Dimension(200, 200)); //setMaximumSize(new Dimension(-1, 200)); setLayout(new BorderLayout(0, 0)); buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); buttonPanel.setOpaque(false); this.add(buttonPanel,BorderLayout.PAGE_END); //setBorder(new LineBorder(Color.RED, 2)); GuiMessageBus.register(this); } private void displayCard(CardType cardType) { buttonPanel.removeAll(); image = null; if (cardType != null) { try { image = ImageIO.read(new File(cardType.getImagePath())); image = image.getScaledInstance(-1, 200, Image.SCALE_SMOOTH); } catch (IOException e) { e.printStackTrace(); } buttonPanel.add(new JButton(new ShowCardAction(cardType))); } validate(); repaint(); } @Subscribe public void onCardSelected(CardSelectedMessage message) { String cardTypeId = message.getCard().getCardTypeId(); CardType card = CardService.getInstance().getCardInventory().getCardsById().get(cardTypeId); displayCard(card); } @Subscribe public void onPieceSelected(PieceSelectedMessage message) { final String playerId = message.getPlayerId(); final String pieceId = message.getPieceId(); if (playerId != null && playerId.equals(CurrentUserInfo.getInstance().getPlayerId())) { EventQueue.invokeLater(new Runnable() { public void run() { Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); if (game != null) { PieceInstance piece = game.getPiece(pieceId); if (piece != null && piece.getCard() != null) { CardType card = CardService.getInstance().getCardInventory().getCardsById().get(piece.getCard().getCardTypeId()); displayCard(card); } } } }); } } @Subscribe public void onPieceUnselected(PieceUnselectedMessage message) { final String playerId = message.getPlayerId(); if (playerId != null && playerId.equals(CurrentUserInfo.getInstance().getPlayerId())) { EventQueue.invokeLater(new Runnable() { public void run() { buttonPanel.removeAll(); image = null; validate(); repaint(); } }); } } @Subscribe public void onGameLeft(GameLeftMessage message) { if (CurrentUserInfo.getInstance().getPlayer() == null) { // current player is null == we left the game EventQueue.invokeLater(new Runnable() { public void run() { buttonPanel.removeAll(); image = null; validate(); repaint(); } }); } } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { g.drawImage(image, 0, 0, null); } } }