From 7a90db7995de71905003751786858b7681a88f3e Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 6 Aug 2015 00:31:50 +0200 Subject: [PATCH] * Fixed sluggishness of player selection. Reworked flag display in avatar image. --- .../mage/client/components/HoverButton.java | 21 +++++++-- .../java/mage/client/game/PlayerPanelExt.java | 46 ++++++++++--------- .../mage/sets/newphyrexia/GitaxianProbe.java | 21 +++++---- 3 files changed, 52 insertions(+), 36 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/components/HoverButton.java b/Mage.Client/src/main/java/mage/client/components/HoverButton.java index d7998fe5041..f9baab84a83 100644 --- a/Mage.Client/src/main/java/mage/client/components/HoverButton.java +++ b/Mage.Client/src/main/java/mage/client/components/HoverButton.java @@ -20,6 +20,8 @@ import mage.client.util.Command; */ public class HoverButton extends JPanel implements MouseListener { + static final int TOP_TEXT_IMAGE_GAP = 3; + private Image image; private Image hoverImage; private Image disabledImage; @@ -36,6 +38,7 @@ public class HoverButton extends JPanel implements MouseListener { private Dimension overlayImageSize; private String topText; + private Image topTextImage; private boolean isHovered = false; private boolean isSelected = false; @@ -45,7 +48,7 @@ public class HoverButton extends JPanel implements MouseListener { private Command observer = null; private Command onHover = null; private Color textColor = Color.white; - private Color textBGColor = Color.black; + private final Color textBGColor = Color.black; static final Font textFont = new Font("Arial", Font.PLAIN, 12); static final Font textFontMini = new Font("Arial", Font.PLAIN, 11); @@ -120,9 +123,12 @@ public class HoverButton extends JPanel implements MouseListener { } topTextOffsetX = calculateOffsetForTop(g2d, topText); g2d.setColor(textBGColor); - g2d.drawString(topText, topTextOffsetX + 1, 13); + g2d.drawString(topText, topTextOffsetX + 1, 14); g2d.setColor(textColor); - g2d.drawString(topText, topTextOffsetX, 12); + g2d.drawString(topText, topTextOffsetX, 13); + } + if (topTextImage != null) { + g.drawImage(topTextImage, 4, 3, this); } if (overlayImage != null) { g.drawImage(overlayImage, (imageSize.width - overlayImageSize.width) / 2, 10, this); @@ -168,7 +174,9 @@ public class HoverButton extends JPanel implements MouseListener { if (topTextOffsetX == -1) { // calculate once FontRenderContext frc = g2d.getFontRenderContext(); int textWidth = (int) textFont.getStringBounds(text, frc).getWidth(); - topTextOffsetX = (imageSize.width - textWidth) / 2; + int neededImageWidth = (topTextImage == null ? 0 : topTextImage.getWidth(this)); + int availableXWidth = imageSize.width - neededImageWidth; + topTextOffsetX = (availableXWidth - textWidth) / 2 + neededImageWidth; } return topTextOffsetX; } @@ -284,6 +292,11 @@ public class HoverButton extends JPanel implements MouseListener { this.topText = topText; } + public void setTopTextImage(Image topTextImage) { + this.topTextImage = topTextImage; + this.textOffsetX = -1; // rest for new clculation + } + public void setTextAlwaysVisible(boolean textAlwaysVisible) { this.textAlwaysVisible = textAlwaysVisible; } diff --git a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java index 11a79b265b9..01ffad75880 100644 --- a/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java +++ b/Mage.Client/src/main/java/mage/client/game/PlayerPanelExt.java @@ -36,7 +36,6 @@ package mage.client.game; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; -import java.awt.GridLayout; import java.awt.Image; import java.awt.Rectangle; import java.awt.event.ActionEvent; @@ -105,7 +104,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { private static final Border emptyBorder = BorderFactory.createEmptyBorder(0, 0, 0, 0); private int avatarId = -1; - private String flagName = ""; + private String flagName; private PriorityTimer timer; @@ -124,7 +123,7 @@ public class PlayerPanelExt extends javax.swing.JPanel { session = MageFrame.getSession(); cheat.setVisible(session.isTestMode()); cheat.setFocusable(false); - + flagName = null; if (priorityTime > 0) { long delay = 1000L; @@ -157,6 +156,25 @@ public class PlayerPanelExt extends javax.swing.JPanel { public void update(PlayerView player) { this.player = player; + if (flagName == null) { // do only once + avatar.setText(this.player.getName()); + if (!player.getUserData().getFlagName().equals(flagName)) { + flagName = player.getUserData().getFlagName(); + this.avatar.setTopTextImage(CountryUtil.getCountryFlagIcon(flagName).getImage()); + } + // TODO: Add the wins to the tooltiptext of the avatar + String countryname = CountryUtil.getCountryName(flagName); + if (countryname == null) { + countryname = "Unknown"; + } + String tooltip = "Name: " + player.getName() + "
Country: " + countryname; + avatar.setToolTipText(tooltip); + avatar.repaint(); + + // used if avatar image can't be used + this.btnPlayer.setText(player.getName()); + this.btnPlayer.setToolTipText(tooltip); + } int playerLife = player.getLife(); if (playerLife > 99) { Font font = lifeLabel.getFont(); @@ -235,16 +253,9 @@ public class PlayerPanelExt extends javax.swing.JPanel { Image image = ImageHelper.getImageFromResources(path); Rectangle r = new Rectangle(80, 80); BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); - this.avatar.update("player", resized, resized, resized, resized, r); - } - if (!player.getUserData().getFlagName().equals(flagName)) { - flagName = player.getUserData().getFlagName(); - this.avatarFlag.setIcon(CountryUtil.getCountryFlagIcon(flagName)); - this.avatarFlag.setToolTipText(CountryUtil.getCountryName(flagName)); - avatar.repaint(); + this.avatar.update(this.player.getName(), resized, resized, resized, resized, r); } } - this.avatar.setText(player.getName()); if (this.timer != null) { if (player.getPriorityTimeLeft() != Integer.MAX_VALUE) { String priorityTimeValue = getPriorityTimeLeftString(player); @@ -259,8 +270,6 @@ public class PlayerPanelExt extends javax.swing.JPanel { } } - this.btnPlayer.setText(player.getName()); - this.btnPlayer.setToolTipText("Life: " + player.getLife()); if (player.isActive()) { this.avatar.setBorder(greenBorder); this.btnPlayer.setBorder(greenBorder); @@ -324,15 +333,8 @@ public class PlayerPanelExt extends javax.swing.JPanel { Image image = ImageHelper.getImageFromResources(DEFAULT_AVATAR_PATH); BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r); - avatar = new HoverButton("player", resized, resized, resized, r); - avatar.setLayout(new GridLayout(4, 1, 0, 0)); - avatar.add(new JLabel()); - avatar.add(new JLabel()); - avatar.add(avatarFlag); - avatar.setAlignTextLeft(true); - avatarFlag.setHorizontalAlignment(JLabel.LEFT); - avatarFlag.setVerticalAlignment(JLabel.BOTTOM); - avatar.add(new JLabel()); + avatar = new HoverButton("", resized, resized, resized, r); + String showPlayerNamePermanently = MageFrame.getPreferences().get(PreferencesDialog.KEY_SHOW_PLAYER_NAMES_PERMANENTLY, "true"); if (showPlayerNamePermanently.equals("true")) { avatar.setTextAlwaysVisible(true); diff --git a/Mage.Sets/src/mage/sets/newphyrexia/GitaxianProbe.java b/Mage.Sets/src/mage/sets/newphyrexia/GitaxianProbe.java index 1dd4bfe1c4f..bf3054706e8 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/GitaxianProbe.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/GitaxianProbe.java @@ -25,17 +25,17 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.sets.newphyrexia; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Rarity; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; @@ -46,20 +46,19 @@ import mage.target.TargetPlayer; */ public class GitaxianProbe extends CardImpl { - public GitaxianProbe (UUID ownerId) { + public GitaxianProbe(UUID ownerId) { super(ownerId, 35, "Gitaxian Probe", Rarity.COMMON, new CardType[]{CardType.SORCERY}, "{UP}"); this.expansionSetCode = "NPH"; - // Look at target player's hand. this.getSpellAbility().addEffect(new GitaxianProbeEffect()); this.getSpellAbility().addTarget(new TargetPlayer()); // Draw a card. this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); - + } - public GitaxianProbe (final GitaxianProbe card) { + public GitaxianProbe(final GitaxianProbe card) { super(card); } @@ -71,6 +70,7 @@ public class GitaxianProbe extends CardImpl { } class GitaxianProbeEffect extends OneShotEffect { + GitaxianProbeEffect() { super(Outcome.DrawCard); staticText = "Look at target player's hand"; @@ -84,8 +84,9 @@ class GitaxianProbeEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Player player = game.getPlayer(targetPointer.getFirst(game, source)); - if (player != null && controller != null) { - controller.lookAtCards("Gitaxian Probe", player.getHand(), game); + MageObject sourceObject = source.getSourceObject(game); + if (player != null && controller != null && sourceObject != null) { + controller.lookAtCards(sourceObject.getIdName() + " (" + player.getName() + ")", player.getHand(), game); } return true; }