From a557fc7f250797f07c97abad513b7b16a38f5fb8 Mon Sep 17 00:00:00 2001 From: Samuel Beresford Date: Mon, 30 Apr 2018 18:45:34 +0100 Subject: [PATCH] Adds skill progress bar to hiscore panel Matches existing progress bar (look&feel) as xp tracker --- .../client/plugins/hiscore/HiscorePanel.java | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java index bde455a2ec..889058b681 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java @@ -52,6 +52,7 @@ import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JProgressBar; import javax.swing.JTextArea; import javax.swing.JToggleButton; import javax.swing.UIManager; @@ -132,6 +133,7 @@ public class HiscorePanel extends PluginPanel private final JPanel statsPanel = new JPanel(); private final ButtonGroup endpointButtonGroup = new ButtonGroup(); private final JTextArea details = new JTextArea(); + private final JProgressBar progressBar; private List endpointButtons; @@ -275,6 +277,16 @@ public class HiscorePanel extends PluginPanel detailsPanel.add(details, BorderLayout.CENTER); + progressBar = new JProgressBar(); + progressBar.setStringPainted(true); + progressBar.setValue(0); + progressBar.setMinimum(0); + progressBar.setMaximum(100); + progressBar.setBackground(Color.RED); + progressBar.setVisible(false); + + detailsPanel.add(progressBar, BorderLayout.SOUTH); + c.gridx = 0; c.gridy = 4; gridBag.setConstraints(detailsPanel, c); @@ -339,6 +351,7 @@ public class HiscorePanel extends PluginPanel } String text; + int progress = -1; switch (skillName) { case "Combat": @@ -426,7 +439,16 @@ public class HiscorePanel extends PluginPanel else { int currentLevel = Experience.getLevelForXp((int) requestedSkill.getExperience()); - remainingXp = (currentLevel + 1 <= Experience.MAX_VIRT_LEVEL) ? StackFormatter.formatNumber(Experience.getXpForLevel(currentLevel + 1) - requestedSkill.getExperience()) : "0"; + int currentXp = (int) requestedSkill.getExperience(); + int xpForCurrentLevel = Experience.getXpForLevel(currentLevel); + int xpForNextLevel = currentLevel + 1 <= Experience.MAX_VIRT_LEVEL ? Experience.getXpForLevel(currentLevel + 1) : -1; + + remainingXp = xpForNextLevel != -1 ? StackFormatter.formatNumber(xpForNextLevel - currentXp) : "0"; + + double xpGained = currentXp - xpForCurrentLevel; + double xpGoal = xpForNextLevel != -1 ? xpForNextLevel - xpForCurrentLevel : 100; + progress = (int) ((xpGained / xpGoal) * 100f); + } text = "Skill: " + skillName + System.lineSeparator() + "Rank: " + rank + System.lineSeparator() @@ -438,6 +460,18 @@ public class HiscorePanel extends PluginPanel details.setFont(UIManager.getFont("Label.font")); details.setText(text); + + if (progress >= 0) + { + progressBar.setVisible(true); + progressBar.setValue(progress); + progressBar.setBackground(Color.getHSBColor((progress / 100.f) * (120.f / 360.f), 1, 1)); + } + else + { + progressBar.setVisible(false); + } + } @Override @@ -502,6 +536,7 @@ public class HiscorePanel extends PluginPanel { String lookup = input.getText(); details.setText("Loading..."); + progressBar.setVisible(false); lookup = sanitize(lookup); @@ -526,6 +561,7 @@ public class HiscorePanel extends PluginPanel { log.warn("Error fetching Hiscore data " + ex.getMessage()); details.setText("Error fetching Hiscore data"); + progressBar.setVisible(false); return; } @@ -571,6 +607,7 @@ public class HiscorePanel extends PluginPanel // Clear details panel details.setFont(UIManager.getFont("Label.font").deriveFont(Font.ITALIC)); details.setText("Hover over a skill for details"); + progressBar.setVisible(false); } private static String sanitize(String lookup)