diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/views/VField.java b/forge-gui-desktop/src/main/java/forge/screens/match/views/VField.java index a2a5abbae7a..48ce1c8cd08 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/views/VField.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/views/VField.java @@ -73,10 +73,11 @@ public class VField implements IVDoc { private final PlayerDetailsPanel detailsPanel; // Avatar area - private final FLabel lblAvatar = new FLabel.Builder().fontAlign(SwingConstants.CENTER).iconScaleFactor(1.0f).build(); - private final FLabel lblLife = new FLabel.Builder().fontAlign(SwingConstants.CENTER).fontStyle(Font.BOLD).build(); - private final FLabel lblPoison = new FLabel.Builder().fontAlign(SwingConstants.CENTER).fontStyle(Font.BOLD).icon(FSkin.getImage(FSkinProp.IMG_ZONE_POISON)).iconInBackground().build(); - private final FLabel lblEnergy = new FLabel.Builder().fontAlign(SwingConstants.CENTER).fontStyle(Font.BOLD).icon(FSkin.getImage(FSkinProp.IMG_ENERGY)).iconInBackground().build(); + private final FLabel lblAvatar = new FLabel.Builder().fontAlign(SwingConstants.CENTER).iconScaleFactor(1.0f).build(); + private final FLabel lblLife = new FLabel.Builder().fontAlign(SwingConstants.CENTER).fontStyle(Font.BOLD).build(); + private final FLabel lblPoison = new FLabel.Builder().fontAlign(SwingConstants.CENTER).fontStyle(Font.BOLD).icon(FSkin.getImage(FSkinProp.IMG_ZONE_POISON)).iconInBackground().build(); + private final FLabel lblEnergy = new FLabel.Builder().fontAlign(SwingConstants.CENTER).fontStyle(Font.BOLD).icon(FSkin.getImage(FSkinProp.IMG_ENERGY)).iconInBackground().build(); + private final FLabel lblExperience = new FLabel.Builder().fontAlign(SwingConstants.CENTER).fontStyle(Font.BOLD).icon(FSkin.getImage(FSkinProp.IMG_EXPERIENCE)).iconInBackground().build(); private final PhaseIndicator phaseIndicator = new PhaseIndicator(); @@ -110,6 +111,7 @@ public class VField implements IVDoc { lblLife.setFocusable(false); lblPoison.setFocusable(false); lblEnergy.setFocusable(false); + lblExperience.setFocusable(false); avatarArea.setOpaque(false); avatarArea.setBackground(FSkin.getColor(FSkin.Colors.CLR_HOVER)); @@ -212,6 +214,28 @@ public class VField implements IVDoc { detailsPanel.updateZones(); } + private void addLblExperience() { + if (lblExperience.isShowing() || lblEnergy.isShowing()) { + return; // energy takes precedence + } + if (lblExperience.isShowing() || lblPoison.isShowing()) { + return; // poison takes precedence + } + avatarArea.remove(lblLife); + lblLife.setIcon(FSkin.getImage(FSkinProp.ICO_QUEST_LIFE)); + avatarArea.add(lblLife, "w 50%!, h 20px!, split 2"); + avatarArea.add(lblExperience, "w 50%!, h 20px!, wrap"); + } + + private void removeLblExperience() { + if (!lblExperience.isShowing()) { + return; + } + avatarArea.remove(lblExperience); + avatarArea.remove(lblLife); + avatarArea.add(lblLife, "w 100%!, h 20px!, wrap"); + } + private void addLblEnergy() { if (lblEnergy.isShowing() || lblPoison.isShowing()) { return; // poison takes precedence @@ -262,9 +286,11 @@ public class VField implements IVDoc { // Update poison and/or energy counters, poison counters take precedence final int poison = player.getCounters(CounterType.POISON); final int energy = player.getCounters(CounterType.ENERGY); + final int experience = player.getCounters(CounterType.EXPERIENCE); if (poison > 0) { removeLblEnergy(); + removeLblExperience(); addLblPoison(); lblPoison.setText(String.valueOf(poison)); if (poison < POISON_CRITICAL) { @@ -277,6 +303,7 @@ public class VField implements IVDoc { } if (energy > 0) { + removeLblExperience(); if (poison == 0) { addLblEnergy(); lblEnergy.setText(String.valueOf(energy)); @@ -285,6 +312,15 @@ public class VField implements IVDoc { removeLblEnergy(); } + if (experience > 0) { + if (poison == 0 && energy == 0) { + addLblExperience(); + lblExperience.setText(String.valueOf(experience)); + } + } else { + removeLblExperience(); + } + final boolean highlighted = isHighlighted(); this.avatarArea.setBorder(highlighted ? borderAvatarHighlighted : borderAvatarSimple ); this.avatarArea.setOpaque(highlighted); diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java b/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java index 7d014df58a6..735b2ec4a07 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java @@ -85,6 +85,7 @@ public class CardFaceSymbols { MANA_IMAGES.put("S", FSkin.getImage(FSkinProp.IMG_MANA_SNOW, manaImageSize, manaImageSize)); MANA_IMAGES.put("T", FSkin.getImage(FSkinProp.IMG_TAP, manaImageSize, manaImageSize)); MANA_IMAGES.put("E", FSkin.getImage(FSkinProp.IMG_ENERGY, 40, 40)); + MANA_IMAGES.put("EXPERIENCE", FSkin.getImage(FSkinProp.IMG_EXPERIENCE, 40, 30)); MANA_IMAGES.put("slash", FSkin.getImage(FSkinProp.IMG_SLASH, manaImageSize, manaImageSize)); MANA_IMAGES.put("attack", FSkin.getImage(FSkinProp.IMG_ATTACK, 32, 32)); MANA_IMAGES.put("defend", FSkin.getImage(FSkinProp.IMG_DEFEND, 32, 32)); diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/FSkin.java b/forge-gui-desktop/src/main/java/forge/toolbox/FSkin.java index 4e76ed2a9bd..f836186b723 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/FSkin.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/FSkin.java @@ -1285,6 +1285,7 @@ public class FSkin { addEncodingSymbol("S", FSkinProp.IMG_MANA_SNOW); addEncodingSymbol("T", FSkinProp.IMG_TAP); addEncodingSymbol("E", FSkinProp.IMG_ENERGY); + addEncodingSymbol("EXPERIENCE", FSkinProp.IMG_EXPERIENCE); // Set look and feel after skin loaded FView.SINGLETON_INSTANCE.setSplashProgessBarMessage("Setting look and feel..."); diff --git a/forge-gui/res/skins/default/sprite_icons.png b/forge-gui/res/skins/default/sprite_icons.png index 3aa2bba6d5f..d00063b2f4e 100644 Binary files a/forge-gui/res/skins/default/sprite_icons.png and b/forge-gui/res/skins/default/sprite_icons.png differ diff --git a/forge-gui/src/main/java/forge/assets/FSkinProp.java b/forge-gui/src/main/java/forge/assets/FSkinProp.java index 9443252d2c6..2a3fd620fd6 100644 --- a/forge-gui/src/main/java/forge/assets/FSkinProp.java +++ b/forge-gui/src/main/java/forge/assets/FSkinProp.java @@ -130,6 +130,7 @@ public enum FSkinProp { IMG_COUNTERS3 (new int[] {80, 320, 80, 80}, PropType.IMAGE), IMG_COUNTERS_MULTI (new int[] {80, 400, 80, 80}, PropType.IMAGE), IMG_ENERGY (new int[] {320, 120, 40, 40}, PropType.IMAGE), + IMG_EXPERIENCE (new int[] {280, 120, 40, 30}, PropType.IMAGE), //foils FOIL_01 (new int[] {0, 0, 400, 570}, PropType.FOIL),