clue plugin: move widget highlights to plugin
Co-authored-by: Hydrox6 <ikada@protonmail.ch>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user