interact highlight: support menu option mouseover

Co-authored-by: superiorser9 <superiorser9@gmail.com>
This commit is contained in:
Adam
2022-01-31 20:20:01 -05:00
parent 302b57de8e
commit f283871f50

View File

@@ -33,6 +33,7 @@ import net.runelite.api.Client;
import net.runelite.api.MenuAction;
import net.runelite.api.MenuEntry;
import net.runelite.api.NPC;
import net.runelite.api.Point;
import net.runelite.api.TileObject;
import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer;
@@ -78,8 +79,8 @@ class InteractHighlightOverlay extends Overlay
return;
}
MenuEntry top = menuEntries[menuEntries.length - 1];
MenuAction menuAction = top.getType();
MenuEntry entry = client.isMenuOpen() ? hoveredMenuEntry(menuEntries) : menuEntries[menuEntries.length - 1];
MenuAction menuAction = entry.getType();
switch (menuAction)
{
@@ -90,10 +91,11 @@ class InteractHighlightOverlay extends Overlay
case GAME_OBJECT_THIRD_OPTION:
case GAME_OBJECT_FOURTH_OPTION:
case GAME_OBJECT_FIFTH_OPTION:
case EXAMINE_OBJECT:
{
int x = top.getParam0();
int y = top.getParam1();
int id = top.getIdentifier();
int x = entry.getParam0();
int y = entry.getParam1();
int id = entry.getIdentifier();
TileObject tileObject = plugin.findTileObject(x, y, id);
if (tileObject != null && config.objectShowHover() && (tileObject != plugin.getInteractedObject() || !config.objectShowInteract()))
{
@@ -108,8 +110,9 @@ class InteractHighlightOverlay extends Overlay
case NPC_THIRD_OPTION:
case NPC_FOURTH_OPTION:
case NPC_FIFTH_OPTION:
case EXAMINE_NPC:
{
int id = top.getIdentifier();
int id = entry.getIdentifier();
NPC npc = plugin.findNpc(id);
if (npc != null && config.npcShowHover() && (npc != plugin.getInteractedTarget() || !config.npcShowInteract()))
{
@@ -155,4 +158,29 @@ class InteractHighlightOverlay extends Overlay
}
return end;
}
private MenuEntry hoveredMenuEntry(final MenuEntry[] menuEntries)
{
final int menuX = client.getMenuX();
final int menuY = client.getMenuY();
final int menuWidth = client.getMenuWidth();
final Point mousePosition = client.getMouseCanvasPosition();
int dy = mousePosition.getY() - menuY;
dy -= 19; // Height of Choose Option
if (dy < 0)
{
return menuEntries[menuEntries.length - 1];
}
int idx = dy / 15; // Height of each menu option
idx = menuEntries.length - 1 - idx;
if (mousePosition.getX() > menuX && mousePosition.getX() < menuX + menuWidth
&& idx >= 0 && idx < menuEntries.length)
{
return menuEntries[idx];
}
return menuEntries[menuEntries.length - 1];
}
}