clue plugin: move widget highlights to plugin

Co-authored-by: Hydrox6 <ikada@protonmail.ch>
This commit is contained in:
Adam
2019-04-13 10:33:26 -04:00
parent dd766b8700
commit 90f2b1ad9e
2 changed files with 67 additions and 60 deletions

View File

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

View File

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