diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 01c92b393f..4cceee7c05 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -107,6 +107,8 @@ public interface Client extends GameEngine int getMouseCurrentButton(); + Tile getSelectedRegionTile(); + boolean isDraggingWidget(); Widget getDraggedWidget(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java index 8616973e73..52027da29e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/groundmarkers/GroundMarkerPlugin.java @@ -30,7 +30,6 @@ import com.google.common.eventbus.Subscribe; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.google.inject.Provides; -import java.awt.Polygon; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -43,13 +42,9 @@ import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import static net.runelite.api.Constants.CHUNK_SIZE; -import static net.runelite.api.Constants.REGION_SIZE; import net.runelite.api.GameState; import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; -import net.runelite.api.Perspective; -import net.runelite.api.Point; -import net.runelite.api.Region; import net.runelite.api.Tile; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; @@ -284,19 +279,8 @@ public class GroundMarkerPlugin extends Plugin return; } - MenuEntry[] menuEntries = client.getMenuEntries(); - - // get tile coordinates off of walk here entry - for (int i = 0; i < menuEntries.length; i++) - { - MenuEntry menuEntry = menuEntries[i]; - if (menuEntry.getOption().equals(WALK_HERE)) - { - Point target = new Point(menuEntry.getParam0(), menuEntry.getParam1()); - markTile(target); - break; - } - } + Tile target = client.getSelectedRegionTile(); + markTile(target.getLocalLocation()); } @Override @@ -317,10 +301,8 @@ public class GroundMarkerPlugin extends Plugin return overlay; } - protected void markTile(Point ptMouse) + protected void markTile(LocalPoint localPoint) { - LocalPoint localPoint = getTile(ptMouse); - if (localPoint == null) { return; @@ -380,46 +362,4 @@ public class GroundMarkerPlugin extends Plugin loadPoints(); } - - /** - * Find the tile which the given mouse point is in - * @param mouse - * @return - */ - private LocalPoint getTile(Point mouse) - { - Region region = client.getRegion(); - Tile[][][] tiles = region.getTiles(); - int z = client.getPlane(); - - java.awt.Point gameMouse = new java.awt.Point(mouse.getX(), mouse.getY()); - - for (int x = 0; x < REGION_SIZE; ++x) - { - for (int y = 0; y < REGION_SIZE; ++y) - { - Tile tile = tiles[z][x][y]; - - if (tile == null) - { - continue; - } - - LocalPoint local = tile.getLocalLocation(); - Polygon poly = Perspective.getCanvasTilePoly(client, local); - - if (poly == null) - { - continue; - } - - if (poly.contains(gameMouse)) - { - return local; - } - } - } - - return null; - } } \ No newline at end of file diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 754644c6ec..0bee27153b 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -54,6 +54,7 @@ import net.runelite.api.Projectile; import net.runelite.api.Setting; import net.runelite.api.Skill; import net.runelite.api.SpritePixels; +import net.runelite.api.Tile; import net.runelite.api.Varbits; import net.runelite.api.WidgetNode; import net.runelite.api.coords.LocalPoint; @@ -158,6 +159,21 @@ public abstract class RSClientMixin implements RSClient interpolateObjectAnimations = interpolate; } + @Inject + @Override + public Tile getSelectedRegionTile() + { + int tileX = getSelectedRegionTileX(); + int tileY = getSelectedRegionTileY(); + + if (tileX == -1 || tileY == -1) + { + return null; + } + + return getRegion().getTiles()[getPlane()][tileX][tileY]; + } + @Inject @Override public List getPlayers() diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index 574cae7adc..e1c5ba235a 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -116,6 +116,12 @@ public interface RSClient extends RSGameEngine, Client @Override int getMouseCurrentButton(); + @Import("selectedRegionTileX") + int getSelectedRegionTileX(); + + @Import("selectedRegionTileY") + int getSelectedRegionTileY(); + @Import("draggingWidget") @Override boolean isDraggingWidget();