From 5ef40cc6ca81680adf332c74a41c678aaa996928 Mon Sep 17 00:00:00 2001 From: Bram91 <7499230+Bram91@users.noreply.github.com> Date: Sat, 10 Oct 2020 10:23:48 +0200 Subject: [PATCH] XPGlobes: allow stacking vertically. --- .../plugins/xpglobes/XpGlobesConfig.java | 18 +++++++++++++ .../plugins/xpglobes/XpGlobesOverlay.java | 27 +++++++++++++++---- .../plugins/xpglobes/XpGlobesPlugin.java | 17 ++++++++++++ 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java index dd5773044a..c32a8c598a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesConfig.java @@ -171,4 +171,22 @@ public interface XpGlobesConfig extends Config { return 10; } + + @ConfigItem( + keyName = "alignOrbsVertically", + name = "Vertical Orbs", + description = "Aligns the orbs vertically instead of horizontally.", + hidden = true + ) + default boolean alignOrbsVertically() + { + return false; + } + + @ConfigItem( + keyName = "alignOrbsVertically", + name = "", + description = "" + ) + void setAlignOrbsVertically(Boolean alignOrbsVertically); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java index 4beb3f6347..23da426c22 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java @@ -40,6 +40,7 @@ import java.time.Instant; import java.util.List; import javax.inject.Inject; import net.runelite.api.Client; +import static net.runelite.api.MenuAction.RUNELITE_OVERLAY; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.Point; import net.runelite.client.game.SkillIconManager; @@ -63,6 +64,7 @@ public class XpGlobesOverlay extends Overlay private static final int PROGRESS_RADIUS_REMAINDER = 0; private static final int TOOLTIP_RECT_SIZE_X = 150; private static final Color DARK_OVERLAY_COLOR = new Color(0, 0, 0, 180); + static final String FLIP_ACTION = "Flip"; private final Client client; private final XpGlobesPlugin plugin; @@ -91,6 +93,7 @@ public class XpGlobesOverlay extends Overlay this.xpTooltip.getComponent().setPreferredSize(new Dimension(TOOLTIP_RECT_SIZE_X, 0)); setPosition(OverlayPosition.TOP_CENTER); getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY_CONFIG, OPTION_CONFIGURE, "XP Globes overlay")); + getMenuEntries().add(new OverlayMenuEntry(RUNELITE_OVERLAY, FLIP_ACTION, "XP Globes overlay")); } @Override @@ -103,18 +106,32 @@ public class XpGlobesOverlay extends Overlay return null; } - int curDrawX = 0; + int curDrawPosition = 0; for (final XpGlobe xpGlobe : xpGlobes) { int startXp = xpTrackerService.getStartGoalXp(xpGlobe.getSkill()); int goalXp = xpTrackerService.getEndGoalXp(xpGlobe.getSkill()); - renderProgressCircle(graphics, xpGlobe, startXp, goalXp, curDrawX, 0, getBounds()); - curDrawX += MINIMUM_STEP + config.xpOrbSize(); + if (config.alignOrbsVertically()) + { + renderProgressCircle(graphics, xpGlobe, startXp, goalXp, 0, curDrawPosition, getBounds()); + } + else + { + renderProgressCircle(graphics, xpGlobe, startXp, goalXp, curDrawPosition, 0, getBounds()); + } + curDrawPosition += MINIMUM_STEP + config.xpOrbSize(); } - // Get width of markers + // Get length of markers final int markersLength = (queueSize * (config.xpOrbSize())) + ((MINIMUM_STEP) * (queueSize - 1)); - return new Dimension(markersLength, config.xpOrbSize()); + if (config.alignOrbsVertically()) + { + return new Dimension(config.xpOrbSize(), markersLength); + } + else + { + return new Dimension(markersLength, config.xpOrbSize()); + } } private double getSkillProgress(int startXp, int currentXp, int goalXp) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java index 6c2e39301e..b692bda0b3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java @@ -35,11 +35,13 @@ import javax.inject.Inject; import lombok.Getter; import net.runelite.api.Client; import net.runelite.api.Experience; +import net.runelite.api.MenuAction; import net.runelite.api.Skill; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.StatChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.OverlayMenuClicked; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDescriptor; @@ -166,6 +168,21 @@ public class XpGlobesPlugin extends Plugin globeCache = new XpGlobe[Skill.values().length - 1]; } + @Subscribe + public void onOverlayMenuClicked(final OverlayMenuClicked event) + { + if (!(event.getEntry().getMenuAction() == MenuAction.RUNELITE_OVERLAY + && event.getOverlay() == overlay)) + { + return; + } + + if (event.getEntry().getOption().equals(XpGlobesOverlay.FLIP_ACTION)) + { + config.setAlignOrbsVertically(!config.alignOrbsVertically()); + } + } + @Subscribe public void onGameStateChanged(GameStateChanged event) {