diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollEmoteOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollEmoteOverlay.java index f996aa6d76..4528b0a7be 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollEmoteOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollEmoteOverlay.java @@ -24,13 +24,8 @@ */ package net.runelite.client.plugins.cluescrolls; -import java.awt.Color; import java.awt.Dimension; -import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.geom.Area; import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.widgets.Widget; @@ -40,21 +35,14 @@ import net.runelite.client.plugins.cluescrolls.clues.EmoteClue; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; -import net.runelite.client.ui.overlay.OverlayUtil; -import net.runelite.client.ui.overlay.components.TextComponent; -public class ClueScrollEmoteOverlay extends Overlay +class ClueScrollEmoteOverlay extends Overlay { - private static final Color HIGHLIGHT_BORDER_COLOR = Color.ORANGE; - private static final Color HIGHLIGHT_HOVER_BORDER_COLOR = HIGHLIGHT_BORDER_COLOR.darker(); - private static final Color HIGHLIGHT_FILL_COLOR = new Color(0, 255, 0, 20); - private final ClueScrollPlugin plugin; private final Client client; - private final TextComponent textComponent = new TextComponent(); @Inject - public ClueScrollEmoteOverlay(ClueScrollPlugin plugin, Client client) + private ClueScrollEmoteOverlay(ClueScrollPlugin plugin, Client client) { setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_WIDGETS); @@ -67,7 +55,7 @@ public class ClueScrollEmoteOverlay extends Overlay { ClueScroll clue = plugin.getClue(); - if (clue == null || !(clue instanceof EmoteClue)) + if (!(clue instanceof EmoteClue)) { return null; } @@ -97,56 +85,16 @@ public class ClueScrollEmoteOverlay extends Overlay { if (emoteWidget.getSpriteId() == emoteClue.getFirstEmote().getSpriteId()) { - highlightWidget(graphics, emoteWindow, emoteWidget, - emoteClue.getSecondEmote() != null ? "1st" : ""); + plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null, + emoteClue.getSecondEmote() != null ? "1st" : null); } else if (emoteClue.getSecondEmote() != null && emoteWidget.getSpriteId() == emoteClue.getSecondEmote().getSpriteId()) { - highlightWidget(graphics, emoteWindow, emoteWidget, "2nd"); + plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null, "2nd"); } } return null; } - - private void highlightWidget(Graphics2D graphics, Widget window, Widget widget, String text) - { - net.runelite.api.Point canvasLocation = widget.getCanvasLocation(); - - if (canvasLocation == null) - { - return; - } - - // Don't draw outside the emotes window - net.runelite.api.Point windowLocation = window.getCanvasLocation(); - - if (windowLocation.getY() > canvasLocation.getY() + widget.getHeight() - || windowLocation.getY() + window.getHeight() < canvasLocation.getY()) - { - return; - } - - // Visible area of emote widget - Area widgetArea = new Area( - new Rectangle( - canvasLocation.getX(), - Math.max(canvasLocation.getY(), windowLocation.getY()), - widget.getWidth(), - Math.min( - Math.min(windowLocation.getY() + window.getHeight() - canvasLocation.getY(), widget.getHeight()), - Math.min(canvasLocation.getY() + widget.getHeight() - windowLocation.getY(), widget.getHeight())))); - - OverlayUtil.renderHoverableArea(graphics, widgetArea, client.getMouseCanvasPosition(), - HIGHLIGHT_FILL_COLOR, HIGHLIGHT_BORDER_COLOR, HIGHLIGHT_HOVER_BORDER_COLOR); - - FontMetrics fontMetrics = graphics.getFontMetrics(); - - textComponent.setPosition(new Point( - canvasLocation.getX() + widget.getWidth() / 2 - fontMetrics.stringWidth(text) / 2, - canvasLocation.getY() + fontMetrics.getHeight())); - textComponent.setText(text); - textComponent.render(graphics); - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index d28ef92949..7a00f88c73 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -26,10 +26,15 @@ */ package net.runelite.client.plugins.cluescrolls; +import com.google.common.base.MoreObjects; import com.google.inject.Binder; import com.google.inject.Provides; +import java.awt.Color; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.geom.Area; import java.awt.image.BufferedImage; -import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -48,6 +53,7 @@ import net.runelite.api.ItemComposition; import net.runelite.api.ItemID; import net.runelite.api.NPC; import net.runelite.api.ObjectComposition; +import net.runelite.api.Point; import net.runelite.api.Scene; import net.runelite.api.Tile; import net.runelite.api.TileObject; @@ -84,6 +90,8 @@ import net.runelite.client.plugins.cluescrolls.clues.ObjectClueScroll; import net.runelite.client.plugins.cluescrolls.clues.TextClueScroll; import net.runelite.client.plugins.cluescrolls.clues.ThreeStepCrypticClue; import net.runelite.client.ui.overlay.OverlayManager; +import net.runelite.client.ui.overlay.OverlayUtil; +import net.runelite.client.ui.overlay.components.TextComponent; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.Text; @@ -96,7 +104,9 @@ import net.runelite.client.util.Text; @Slf4j public class ClueScrollPlugin extends Plugin { - private static final Duration WAIT_DURATION = Duration.ofMinutes(4); + private static final Color HIGHLIGHT_BORDER_COLOR = Color.ORANGE; + private static final Color HIGHLIGHT_HOVER_BORDER_COLOR = HIGHLIGHT_BORDER_COLOR.darker(); + private static final Color HIGHLIGHT_FILL_COLOR = new Color(0, 255, 0, 20); @Getter private ClueScroll clue; @@ -143,6 +153,8 @@ public class ClueScrollPlugin extends Plugin private Integer clueItemId; private boolean worldMapPointsSet = false; + private final TextComponent textComponent = new TextComponent(); + @Provides ClueScrollConfig getConfig(ConfigManager configManager) { @@ -668,4 +680,51 @@ public class ClueScrollPlugin extends Plugin checkClueNPCs(clue, client.getCachedNPCs()); this.clue = clue; } + + void highlightWidget(Graphics2D graphics, Widget toHighlight, Widget container, Rectangle padding, String text) + { + padding = MoreObjects.firstNonNull(padding, new Rectangle()); + + Point canvasLocation = toHighlight.getCanvasLocation(); + + if (canvasLocation == null) + { + return; + } + + Point windowLocation = container.getCanvasLocation(); + + if (windowLocation.getY() > canvasLocation.getY() + toHighlight.getHeight() + || windowLocation.getY() + container.getHeight() < canvasLocation.getY()) + { + return; + } + + // Visible area of widget + Area widgetArea = new Area( + new Rectangle( + canvasLocation.getX() - padding.x, + Math.max(canvasLocation.getY(), windowLocation.getY()) - padding.y, + toHighlight.getWidth() + padding.x + padding.width, + Math.min( + Math.min(windowLocation.getY() + container.getHeight() - canvasLocation.getY(), toHighlight.getHeight()), + Math.min(canvasLocation.getY() + toHighlight.getHeight() - windowLocation.getY(), toHighlight.getHeight())) + padding.y + padding.height + )); + + OverlayUtil.renderHoverableArea(graphics, widgetArea, client.getMouseCanvasPosition(), + HIGHLIGHT_FILL_COLOR, HIGHLIGHT_BORDER_COLOR, HIGHLIGHT_HOVER_BORDER_COLOR); + + if (text == null) + { + return; + } + + FontMetrics fontMetrics = graphics.getFontMetrics(); + + textComponent.setPosition(new java.awt.Point( + canvasLocation.getX() + toHighlight.getWidth() / 2 - fontMetrics.stringWidth(text) / 2, + canvasLocation.getY() + fontMetrics.getHeight())); + textComponent.setText(text); + textComponent.render(graphics); + } }