From fdfe1513d245fff8311cf112c25afe9c2fbef0c2 Mon Sep 17 00:00:00 2001 From: Ben Moyer Date: Mon, 5 Feb 2018 16:11:53 -0800 Subject: [PATCH] Add theoretical boost to item stat overlay --- .../plugins/itemstats/ItemStatConfig.java | 33 ++++++++-- .../plugins/itemstats/ItemStatOverlay.java | 63 ++++++++++++------- .../client/plugins/itemstats/StatBoost.java | 1 + .../client/plugins/itemstats/StatChange.java | 1 + .../client/plugins/itemstats/TooltipMode.java | 55 ---------------- 5 files changed, 70 insertions(+), 83 deletions(-) delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/itemstats/TooltipMode.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatConfig.java index cf2e11c056..7eec4c8a96 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatConfig.java @@ -37,13 +37,36 @@ import net.runelite.client.config.ConfigItem; public interface ItemStatConfig extends Config { @ConfigItem( - keyName = "tooltipMode", - name = "Tooltip mode", - description = "How to show tooltip values" + keyName = "relative", + name = "Show Relative", + description = "Show relative stat change in tooltip" ) - default TooltipMode tooltipMode() + + default boolean relative() { - return TooltipMode.BOTH; + return true; + } + + @ConfigItem( + keyName = "absolute", + name = "Show Absolute", + description = "Show absolute stat change in tooltip" + ) + + default boolean absolute() + { + return true; + } + + @ConfigItem( + keyName = "theoretical", + name = "Show Theoretical", + description = "Show theoretical stat change in tooltip" + ) + + default boolean theoretical() + { + return false; } @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatOverlay.java index 7863d3a9fb..be9dcb8b91 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatOverlay.java @@ -56,11 +56,11 @@ public class ItemStatOverlay extends Overlay @Override public Dimension render(Graphics2D graphics, Point parent) { - TooltipMode tooltipMode = config.tooltipMode(); - if (tooltipMode == TooltipMode.OFF) + if (!config.relative() && !config.absolute() && !config.theoretical()) { return null; } + WidgetItem[] inventory = queryRunner.runQuery(new InventoryWidgetItemQuery()); Point mousePos = new Point(client.getMouseCanvasPosition().getX(), client.getMouseCanvasPosition().getY()); for (WidgetItem item : inventory) @@ -74,27 +74,7 @@ public class ItemStatOverlay extends Overlay StatsChanges statsChanges = change.calculate(client); for (StatChange c : statsChanges.getStatChanges()) { - b.append(""); - if (tooltipMode.isRelative()) - { - b.append(c.getRelative()); - } - if (tooltipMode == TooltipMode.BOTH) - { - b.append(" ("); - } - if (tooltipMode.isAbsolute()) - { - b.append(c.getAbsolute()); - } - if (tooltipMode == TooltipMode.BOTH) - { - b.append(")"); - } - b.append(" ").append(c.getStat().getName()); - b.append("
"); + b.append(buildStatChangeString(c)); } tooltipManager.add(new Tooltip(b.toString())); } @@ -102,4 +82,41 @@ public class ItemStatOverlay extends Overlay } return null; } + + private String buildStatChangeString(StatChange c) + { + StringBuilder b = new StringBuilder(); + b.append(""); + + if (config.relative()) + { + b.append(c.getRelative()); + } + + if (config.theoretical()) + { + b.append("/"); + b.append(c.getTheoretical()); + } + + if (config.absolute() && (config.relative() || config.theoretical())) + { + b.append(" ("); + } + if (config.absolute()) + { + b.append(c.getAbsolute()); + } + + if (config.absolute() && (config.relative() || config.theoretical())) + { + b.append(")"); + } + b.append(" ").append(c.getStat().getName()); + b.append("
"); + + return b.toString(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatBoost.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatBoost.java index 5badc47830..1bc59d7412 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatBoost.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatBoost.java @@ -90,6 +90,7 @@ public abstract class StatBoost extends SingleEffect } out.setAbsolute(Integer.toString(newValue)); out.setRelative(String.format("%+d", delta)); + out.setTheoretical(String.format("%+d", calcedDelta)); return out; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatChange.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatChange.java index ab46421c16..23540ef78d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatChange.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/StatChange.java @@ -36,5 +36,6 @@ public class StatChange private Stat stat; private String relative; private String absolute; + private String theoretical; private Positivity positivity; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/TooltipMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/TooltipMode.java deleted file mode 100644 index b7303e655f..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/TooltipMode.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2018 Abex - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.itemstats; - -import lombok.AllArgsConstructor; - -@AllArgsConstructor -public enum TooltipMode -{ - OFF("Off", 0x0), - RELATIVE("Relative", 0x1), - ABSOLUTE("Absolute", 0x2), - BOTH("Both", 0x3); - - private final String display; - private final int value; - - public boolean isRelative() - { - return (value & 0x01) != 0; - } - - public boolean isAbsolute() - { - return (value & 0x02) != 0; - } - - @Override - public String toString() - { - return display; - } -}