package magic.ui.widget.duel.sidebar;
import java.awt.Color;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.CompoundBorder;
import magic.data.MagicIcon;
import magic.model.MagicMessage;
import magic.ui.MagicImages;
import magic.ui.screen.duel.game.SwingGameController;
import magic.ui.widget.message.TextLabel;
import magic.ui.FontsAndBorders;
import net.miginfocom.swing.MigLayout;
@SuppressWarnings("serial")
class MessagePanel extends JPanel {
private static final CompoundBorder SEPARATOR_BORDER = BorderFactory.createCompoundBorder(
BorderFactory.createMatteBorder(0, 0, 1, 0, Color.GRAY),
FontsAndBorders.EMPTY_BORDER
);
private static int lastTurn = 0;
private static int textLabelWidth = 0;
private final MagicMessage message;
MessagePanel(final MagicMessage message0, final JComponent container, SwingGameController aController) {
message = message0;
setOpaque(false);
setBorder(SEPARATOR_BORDER);
setMessagePanelLayout(container, aController);
}
MagicMessage getMessage() {
return message;
}
private void setMessagePanelLayout(final JComponent container, SwingGameController aController) {
final int GAP = 8; // pixels
setLayout(new MigLayout("insets 0, gap " + GAP, "[][][grow,right]", "[top]"));
JPanel playerPanel = getPlayerPanel();
JPanel turnPanel = getTurnPanel();
final Insets insets1 = container.getInsets();
final Insets insets2 = SEPARATOR_BORDER.getBorderInsets(this);
final int totalInsets = insets1.left + insets1.right + insets2.left + insets2.right;
if (textLabelWidth == 0) {
textLabelWidth =
container.getWidth() -
playerPanel.getPreferredSize().width -
turnPanel.getPreferredSize().width -
totalInsets -
(GAP * 2);
}
final TextLabel textLabel = new TextLabel(
message.getText(),
LogStackViewer.MESSAGE_FONT,
textLabelWidth,
false,
LogStackViewer.CHOICE_COLOR,
aController
);
add(playerPanel);
add(textLabel);
add(turnPanel);
}
private JPanel getTurnPanel() {
final JPanel turnPanel = new JPanel(new MigLayout("insets 0, gap 0, flowy"));
turnPanel.setOpaque(false);
turnPanel.add(getTurnLabel(), "w 100%");
turnPanel.add(getPhaseLabel(), "w 100%");
return turnPanel;
}
private JLabel getPhaseLabel() {
final JLabel phaseLabel=new JLabel(message.getPhaseType().getAbbreviation());
phaseLabel.setFont(FontsAndBorders.FONT0);
phaseLabel.setHorizontalAlignment(JLabel.RIGHT);
return phaseLabel;
}
private JLabel getTurnLabel() {
final int messageTurn = message.getTurn();
final JLabel turnLabel = new JLabel(String.format("%03d", messageTurn));
turnLabel.setFont(lastTurn != messageTurn ? FontsAndBorders.FONT1 : FontsAndBorders.FONT0);
turnLabel.setHorizontalAlignment(JLabel.RIGHT);
lastTurn = messageTurn;
return turnLabel;
}
/**
* Displays the player avatar & health.
*/
private JPanel getPlayerPanel() {
final JPanel playerPanel = new JPanel(new MigLayout("insets 0", "[]2[]"));
playerPanel.setOpaque(false);
playerPanel.add(getPlayerAvatar());
playerPanel.add(getPlayerLifePanel());
return playerPanel;
}
private JPanel getPlayerLifePanel() {
final JPanel lifePanel = new JPanel(new MigLayout("insets 0, gap 0, flowy"));
lifePanel.setOpaque(false);
final int life=message.getLife();
final JLabel lifeLabel=new JLabel(String.valueOf(Math.abs(life)));
lifeLabel.setHorizontalAlignment(SwingConstants.CENTER);
if (life<=0) {
lifeLabel.setForeground(Color.RED);
}
lifePanel.add(new JLabel(MagicImages.getIcon(MagicIcon.REGENERATED)), "center");
lifePanel.add(lifeLabel, "w 100%");
return lifePanel;
}
private JLabel getPlayerAvatar() {
return new JLabel(MagicImages.getIconSize1(message.getPlayer().getPlayerDefinition()));
}
}