XPGlobes: allow stacking vertically.

This commit is contained in:
Bram91
2020-10-10 10:23:48 +02:00
committed by Tomas Slusny
parent 54fd10491c
commit 5ef40cc6ca
3 changed files with 57 additions and 5 deletions

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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)
{