From cacb69cea31d467c85ba1661be1e27681469fbcc Mon Sep 17 00:00:00 2001 From: Frederik Engels Date: Sun, 14 Jan 2018 09:28:49 -0500 Subject: [PATCH] runelite-client: add projectiles to devtools --- .../plugins/devtools/DevToolsOverlay.java | 67 +++++++++++++++++++ .../plugins/devtools/DevToolsPanel.java | 11 ++- .../plugins/devtools/DevToolsPlugin.java | 10 +++ .../client/ui/overlay/OverlayUtil.java | 24 +++++++ 4 files changed, 111 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index d4dc6d456f..56ba1f7c97 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -25,6 +25,7 @@ */ package net.runelite.client.plugins.devtools; +import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; @@ -37,6 +38,7 @@ import java.awt.geom.Rectangle2D; import java.util.List; import javax.annotation.Nullable; import javax.inject.Inject; +import net.runelite.api.Actor; import net.runelite.api.Client; import net.runelite.api.DecorativeObject; import net.runelite.api.GameObject; @@ -45,7 +47,9 @@ import net.runelite.api.Item; import net.runelite.api.ItemLayer; import net.runelite.api.NPC; import net.runelite.api.Node; +import net.runelite.api.Perspective; import net.runelite.api.Player; +import net.runelite.api.Projectile; import net.runelite.api.Region; import net.runelite.api.Tile; import net.runelite.api.WallObject; @@ -117,6 +121,11 @@ public class DevToolsOverlay extends Overlay renderInventory(graphics); } + if (plugin.isToggleProjectiles()) + { + renderProjectiles(graphics); + } + renderWidgets(graphics); return null; @@ -325,6 +334,64 @@ public class DevToolsOverlay extends Overlay } } + private void renderProjectiles(Graphics2D graphics) + { + List projectiles = client.getProjectiles(); + + for (Projectile projectile : projectiles) + { + int originX = projectile.getX1(); + int originY = projectile.getY1(); + + net.runelite.api.Point tilePoint = new net.runelite.api.Point(originX, originY); + Polygon poly = Perspective.getCanvasTilePoly(client, tilePoint); + + if (poly != null) + { + OverlayUtil.renderPolygon(graphics, poly, Color.RED); + } + + long projectileLength = projectile.getLength().toMillis(); + int projectileId = projectile.getId(); + Actor projectileInteracting = projectile.getInteracting(); + + String infoString = ""; + + if (projectileInteracting == null) + { + infoString += "AoE"; + } + else + { + infoString += "Targeted (T: " + projectileInteracting.getName() + ")"; + } + + infoString += " (ID: " + projectileId + ") (L: " + projectileLength + "ms)"; + + if (projectileInteracting != null) + { + OverlayUtil.renderActorOverlay(graphics, projectile.getInteracting(), infoString, Color.RED); + } + else + { + net.runelite.api.Point targetPoint = projectile.getTarget(); + OverlayUtil.renderTilePointOverlay(graphics, client, targetPoint, infoString, Color.RED); + } + + } + } + + public void renderProjectileOrigin(Graphics2D graphics, Projectile projectile, int floor, net.runelite.api.Point origin) + { + Polygon poly = Perspective.getCanvasTilePoly(client, origin); + + graphics.setColor(Color.RED); + graphics.setStroke(new BasicStroke(2)); + graphics.drawPolygon(poly); + graphics.setColor(Color.RED); + graphics.fillPolygon(poly); + } + public void renderWidgets(Graphics2D graphics) { Widget widget = plugin.currentWidget; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPanel.java index 6324222b1b..cd8d125da8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPanel.java @@ -60,6 +60,7 @@ public class DevToolsPanel extends PluginPanel private JButton renderWallsBtn = new JButton(); private JButton renderDecorBtn = new JButton(); private JButton renderInventoryBtn = new JButton(); + private JButton renderProjectilesBtn = new JButton(); private JLabel textLbl = new JLabel(); private JLabel textColorLbl = new JLabel(); @@ -92,7 +93,7 @@ public class DevToolsPanel extends PluginPanel private JPanel createOptionsPanel() { JPanel container = new JPanel(); - container.setLayout(new GridLayout(5, 2, 3, 3)); + container.setLayout(new GridLayout(6, 2, 3, 3)); renderPlayersBtn = new JButton("Players"); renderPlayersBtn.addActionListener(e -> @@ -158,6 +159,14 @@ public class DevToolsPanel extends PluginPanel }); container.add(renderInventoryBtn); + renderProjectilesBtn = new JButton("Projectiles"); + renderProjectilesBtn.addActionListener(e -> + { + highlightButton(renderProjectilesBtn); + plugin.toggleProjectiles(); + }); + container.add(renderProjectilesBtn); + JButton settingsSnapshotBtn = new JButton("Get Settings"); settingsSnapshotBtn.addActionListener(settingsTracker::snapshot); container.add(settingsSnapshotBtn); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index b0eec3328e..0cfce00c9b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -56,6 +56,7 @@ public class DevToolsPlugin extends Plugin private boolean toggleWalls; private boolean toggleDecor; private boolean toggleInventory; + private boolean toggleProjectiles; Widget currentWidget; int itemIndex = -1; @@ -135,6 +136,11 @@ public class DevToolsPlugin extends Plugin toggleInventory = !toggleInventory; } + void toggleProjectiles() + { + toggleProjectiles = !toggleProjectiles; + } + boolean isTogglePlayers() { return togglePlayers; @@ -175,4 +181,8 @@ public class DevToolsPlugin extends Plugin return toggleInventory; } + boolean isToggleProjectiles() + { + return toggleProjectiles; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java index cf8d8215ce..5d92f2f174 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayUtil.java @@ -38,6 +38,8 @@ import java.awt.RenderingHints; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import net.runelite.api.Actor; +import net.runelite.api.Client; +import net.runelite.api.Perspective; import net.runelite.api.Point; import net.runelite.api.SpritePixels; import net.runelite.api.TileObject; @@ -318,6 +320,28 @@ public class OverlayUtil } } + public static void renderTilePointOverlay(Graphics2D graphics, Client client, Point point, String text, Color color) + { + Polygon poly = Perspective.getCanvasTilePoly(client, point); + + if (poly != null) + { + renderPolygon(graphics, poly, color); + } + + Point minimapLocation = Perspective.worldToMiniMap(client, point.getX(), point.getY()); + if (minimapLocation != null) + { + renderMinimapLocation(graphics, minimapLocation, color); + } + + Point textLocation = Perspective.getCanvasTextLocation(client, graphics, point, text, 0); + if (textLocation != null) + { + renderTextLocation(graphics, textLocation, text, color); + } + } + public static void setGraphicProperties(Graphics2D graphics) { graphics.setFont(FontManager.getRunescapeFont());