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.MenuAction;
import net.runelite.api.MenuEntry; import net.runelite.api.MenuEntry;
import net.runelite.api.NPC; import net.runelite.api.NPC;
import net.runelite.api.Point;
import net.runelite.api.TileObject; import net.runelite.api.TileObject;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayLayer;
@@ -78,8 +79,8 @@ class InteractHighlightOverlay extends Overlay
return; return;
} }
MenuEntry top = menuEntries[menuEntries.length - 1]; MenuEntry entry = client.isMenuOpen() ? hoveredMenuEntry(menuEntries) : menuEntries[menuEntries.length - 1];
MenuAction menuAction = top.getType(); MenuAction menuAction = entry.getType();
switch (menuAction) switch (menuAction)
{ {
@@ -90,10 +91,11 @@ class InteractHighlightOverlay extends Overlay
case GAME_OBJECT_THIRD_OPTION: case GAME_OBJECT_THIRD_OPTION:
case GAME_OBJECT_FOURTH_OPTION: case GAME_OBJECT_FOURTH_OPTION:
case GAME_OBJECT_FIFTH_OPTION: case GAME_OBJECT_FIFTH_OPTION:
case EXAMINE_OBJECT:
{ {
int x = top.getParam0(); int x = entry.getParam0();
int y = top.getParam1(); int y = entry.getParam1();
int id = top.getIdentifier(); int id = entry.getIdentifier();
TileObject tileObject = plugin.findTileObject(x, y, id); TileObject tileObject = plugin.findTileObject(x, y, id);
if (tileObject != null && config.objectShowHover() && (tileObject != plugin.getInteractedObject() || !config.objectShowInteract())) if (tileObject != null && config.objectShowHover() && (tileObject != plugin.getInteractedObject() || !config.objectShowInteract()))
{ {
@@ -108,8 +110,9 @@ class InteractHighlightOverlay extends Overlay
case NPC_THIRD_OPTION: case NPC_THIRD_OPTION:
case NPC_FOURTH_OPTION: case NPC_FOURTH_OPTION:
case NPC_FIFTH_OPTION: case NPC_FIFTH_OPTION:
case EXAMINE_NPC:
{ {
int id = top.getIdentifier(); int id = entry.getIdentifier();
NPC npc = plugin.findNpc(id); NPC npc = plugin.findNpc(id);
if (npc != null && config.npcShowHover() && (npc != plugin.getInteractedTarget() || !config.npcShowInteract())) if (npc != null && config.npcShowHover() && (npc != plugin.getInteractedTarget() || !config.npcShowInteract()))
{ {
@@ -155,4 +158,29 @@ class InteractHighlightOverlay extends Overlay
} }
return end; 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];
}
} }