diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java index 7baf54a3ca..aeeb514cc4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpInfoBox.java @@ -30,6 +30,8 @@ import java.awt.Color; import java.awt.Dimension; import java.io.IOException; import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JMenuItem; @@ -88,10 +90,13 @@ class XpInfoBox extends JPanel private final JLabel actionsLeft = new JLabel(); private final JMenuItem pauseSkill = new JMenuItem("Pause"); + private final XpTrackerConfig xpTrackerConfig; + private boolean paused = false; - XpInfoBox(XpTrackerPlugin xpTrackerPlugin, Client client, JPanel panel, Skill skill, SkillIconManager iconManager) throws IOException + XpInfoBox(XpTrackerPlugin xpTrackerPlugin, XpTrackerConfig xpTrackerConfig, Client client, JPanel panel, Skill skill, SkillIconManager iconManager) throws IOException { + this.xpTrackerConfig = xpTrackerConfig; this.panel = panel; this.skill = skill; @@ -207,6 +212,24 @@ class XpInfoBox extends JPanel ? "200M" : "Lvl. " + xpSnapshotSingle.getEndLevel()); + // Add intermediate level positions to progressBar + final List positions = new ArrayList<>(); + if (xpTrackerConfig.showIntermediateLevels() && xpSnapshotSingle.getEndLevel() - xpSnapshotSingle.getStartLevel() > 1) + { + for (int level = xpSnapshotSingle.getStartLevel() + 1; level < xpSnapshotSingle.getEndLevel(); level++) + { + double relativeStartExperience = Experience.getXpForLevel(level) - xpSnapshotSingle.getStartGoalXp(); + double relativeEndExperience = xpSnapshotSingle.getEndGoalXp() - xpSnapshotSingle.getStartGoalXp(); + positions.add(relativeStartExperience / relativeEndExperience); + } + + progressBar.setPositions(positions); + } + else + { + progressBar.setPositions(positions); + } + progressBar.setToolTipText(String.format( HTML_TOOL_TIP_TEMPLATE, xpSnapshotSingle.getActionsInSession(), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java index 680528e2c6..9dfde5c14a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpPanel.java @@ -63,7 +63,7 @@ class XpPanel extends PluginPanel /* This displays the "No exp gained" text */ private final PluginErrorPanel errorPanel = new PluginErrorPanel(); - XpPanel(XpTrackerPlugin xpTrackerPlugin, Client client, SkillIconManager iconManager) + XpPanel(XpTrackerPlugin xpTrackerPlugin, XpTrackerConfig xpTrackerConfig, Client client, SkillIconManager iconManager) { super(); @@ -143,7 +143,7 @@ class XpPanel extends PluginPanel { break; } - infoBoxes.put(skill, new XpInfoBox(xpTrackerPlugin, client, infoBoxPanel, skill, iconManager)); + infoBoxes.put(skill, new XpInfoBox(xpTrackerPlugin, xpTrackerConfig, client, infoBoxPanel, skill, iconManager)); } } catch (IOException e) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java index 9a53523a50..d32abf2aa9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerConfig.java @@ -55,6 +55,17 @@ public interface XpTrackerConfig extends Config @ConfigItem( position = 2, + keyName = "intermediateLevelMarkers", + name = "Show intermediate level markers", + description = "Marks intermediate levels on the progressbar" + ) + default boolean showIntermediateLevels() + { + return false; + } + + @ConfigItem( + position = 3, keyName = "pauseSkillAfter", name = "Auto pause after", description = "Configures how many minutes passes before pausing a skill while in game and there's no XP, 0 means disabled" diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index 8c652db6f1..061b970117 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -118,7 +118,7 @@ public class XpTrackerPlugin extends Plugin @Override protected void startUp() throws Exception { - xpPanel = new XpPanel(this, client, skillIconManager); + xpPanel = new XpPanel(this, xpTrackerConfig, client, skillIconManager); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "/skill_icons/overall.png"); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java b/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java index 0c36df1161..c88a762859 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/components/ProgressBar.java @@ -28,6 +28,8 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; +import java.util.ArrayList; +import java.util.List; import javax.swing.JLabel; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; @@ -46,6 +48,9 @@ public class ProgressBar extends DimmableJPanel @Setter private int value; + @Setter + private List positions = new ArrayList<>(); + private final JLabel leftLabel = new JShadowedLabel(); private final JLabel rightLabel = new JShadowedLabel(); private final JLabel centerLabel = new JShadowedLabel(); @@ -89,6 +94,17 @@ public class ProgressBar extends DimmableJPanel super.paint(g); g.setColor(getForeground()); g.fillRect(0, 0, topWidth, 16); + g.setColor(getForeground().darker()); + + for (final Double position : positions) + { + final int xCord = (int) (getSize().width * (position)); + if (xCord > topWidth) + { + g.fillRect(xCord, 0, 1, 16); + } + } + super.paintComponents(g); } @@ -142,4 +158,4 @@ public class ProgressBar extends DimmableJPanel return (value * 100) / maximumValue; } -} \ No newline at end of file +}