From 77c7532177dd8e1b84d8bb02030d1fc4e9377547 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 22 Apr 2018 17:38:41 -0400 Subject: [PATCH] devtools: show instance location information --- .../main/java/net/runelite/api/Constants.java | 2 ++ .../plugins/devtools/LocationOverlay.java | 26 ++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Constants.java b/runelite-api/src/main/java/net/runelite/api/Constants.java index f069647d64..c4b6b19a57 100644 --- a/runelite-api/src/main/java/net/runelite/api/Constants.java +++ b/runelite-api/src/main/java/net/runelite/api/Constants.java @@ -34,4 +34,6 @@ public class Constants public static final Dimension GAME_FIXED_SIZE = new Dimension(GAME_FIXED_WIDTH, GAME_FIXED_HEIGHT); public static final double GAME_FIXED_ASPECT_RATIO = (double) GAME_FIXED_WIDTH / (double) GAME_FIXED_HEIGHT; public static final int CLIENT_DEFAULT_ZOOM = 512; + public static final int CHUNK_SIZE = 8; + public static final int REGION_SIZE = 104; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/LocationOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/LocationOverlay.java index 346318da4b..b6be559835 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/LocationOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/LocationOverlay.java @@ -29,6 +29,8 @@ import java.awt.Dimension; import java.awt.Graphics2D; import javax.inject.Inject; import net.runelite.api.Client; +import static net.runelite.api.Constants.CHUNK_SIZE; +import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; @@ -39,8 +41,6 @@ public class LocationOverlay extends Overlay private final Client client; private final DevToolsPlugin plugin; - private PanelComponent panelComponent; - @Inject LocationOverlay(Client client, DevToolsPlugin plugin) { @@ -57,14 +57,34 @@ public class LocationOverlay extends Overlay return null; } - panelComponent = new PanelComponent(); + PanelComponent panelComponent = new PanelComponent(); WorldPoint localWorld = client.getLocalPlayer().getWorldLocation(); + LocalPoint localPoint = client.getLocalPlayer().getLocalLocation(); int regionX = localWorld.getX() >> 6; int regionY = localWorld.getY() >> 6; int regionID = regionX << 8 | regionY; + if (client.isInInstancedRegion()) + { + panelComponent.setWidth(150); + panelComponent.getLines().add(new PanelComponent.Line("Instance")); + + int[][][] instanceTemplateChunks = client.getInstanceTemplateChunks(); + int z = client.getPlane(); + int chunkData = instanceTemplateChunks[z][localPoint.getRegionX() / CHUNK_SIZE][localPoint.getRegionY() / CHUNK_SIZE]; + + int rotation = chunkData >> 1 & 0x3; + int chunkY = (chunkData >> 3 & 0x7FF) * CHUNK_SIZE; + int chunkX = (chunkData >> 14 & 0x3FF) * CHUNK_SIZE; + + panelComponent.getLines().add(new PanelComponent.Line( + "Chunk " + localPoint.getRegionX() / CHUNK_SIZE + "," + localPoint.getRegionY() / CHUNK_SIZE, + rotation + " " + chunkX + " " + chunkY + )); + } + panelComponent.getLines().add(new PanelComponent.Line( "Tile", localWorld.getX() + ", " + localWorld.getY() + ", " + client.getPlane()