runelite-client: add projectiles to devtools
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.devtools;
|
package net.runelite.client.plugins.devtools;
|
||||||
|
|
||||||
|
import java.awt.BasicStroke;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
@@ -37,6 +38,7 @@ import java.awt.geom.Rectangle2D;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import net.runelite.api.Actor;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.DecorativeObject;
|
import net.runelite.api.DecorativeObject;
|
||||||
import net.runelite.api.GameObject;
|
import net.runelite.api.GameObject;
|
||||||
@@ -45,7 +47,9 @@ import net.runelite.api.Item;
|
|||||||
import net.runelite.api.ItemLayer;
|
import net.runelite.api.ItemLayer;
|
||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
import net.runelite.api.Node;
|
import net.runelite.api.Node;
|
||||||
|
import net.runelite.api.Perspective;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
|
import net.runelite.api.Projectile;
|
||||||
import net.runelite.api.Region;
|
import net.runelite.api.Region;
|
||||||
import net.runelite.api.Tile;
|
import net.runelite.api.Tile;
|
||||||
import net.runelite.api.WallObject;
|
import net.runelite.api.WallObject;
|
||||||
@@ -117,6 +121,11 @@ public class DevToolsOverlay extends Overlay
|
|||||||
renderInventory(graphics);
|
renderInventory(graphics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (plugin.isToggleProjectiles())
|
||||||
|
{
|
||||||
|
renderProjectiles(graphics);
|
||||||
|
}
|
||||||
|
|
||||||
renderWidgets(graphics);
|
renderWidgets(graphics);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -325,6 +334,64 @@ public class DevToolsOverlay extends Overlay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void renderProjectiles(Graphics2D graphics)
|
||||||
|
{
|
||||||
|
List<Projectile> 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)
|
public void renderWidgets(Graphics2D graphics)
|
||||||
{
|
{
|
||||||
Widget widget = plugin.currentWidget;
|
Widget widget = plugin.currentWidget;
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public class DevToolsPanel extends PluginPanel
|
|||||||
private JButton renderWallsBtn = new JButton();
|
private JButton renderWallsBtn = new JButton();
|
||||||
private JButton renderDecorBtn = new JButton();
|
private JButton renderDecorBtn = new JButton();
|
||||||
private JButton renderInventoryBtn = new JButton();
|
private JButton renderInventoryBtn = new JButton();
|
||||||
|
private JButton renderProjectilesBtn = new JButton();
|
||||||
|
|
||||||
private JLabel textLbl = new JLabel();
|
private JLabel textLbl = new JLabel();
|
||||||
private JLabel textColorLbl = new JLabel();
|
private JLabel textColorLbl = new JLabel();
|
||||||
@@ -92,7 +93,7 @@ public class DevToolsPanel extends PluginPanel
|
|||||||
private JPanel createOptionsPanel()
|
private JPanel createOptionsPanel()
|
||||||
{
|
{
|
||||||
JPanel container = new JPanel();
|
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 = new JButton("Players");
|
||||||
renderPlayersBtn.addActionListener(e ->
|
renderPlayersBtn.addActionListener(e ->
|
||||||
@@ -158,6 +159,14 @@ public class DevToolsPanel extends PluginPanel
|
|||||||
});
|
});
|
||||||
container.add(renderInventoryBtn);
|
container.add(renderInventoryBtn);
|
||||||
|
|
||||||
|
renderProjectilesBtn = new JButton("Projectiles");
|
||||||
|
renderProjectilesBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
|
highlightButton(renderProjectilesBtn);
|
||||||
|
plugin.toggleProjectiles();
|
||||||
|
});
|
||||||
|
container.add(renderProjectilesBtn);
|
||||||
|
|
||||||
JButton settingsSnapshotBtn = new JButton("Get Settings");
|
JButton settingsSnapshotBtn = new JButton("Get Settings");
|
||||||
settingsSnapshotBtn.addActionListener(settingsTracker::snapshot);
|
settingsSnapshotBtn.addActionListener(settingsTracker::snapshot);
|
||||||
container.add(settingsSnapshotBtn);
|
container.add(settingsSnapshotBtn);
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public class DevToolsPlugin extends Plugin
|
|||||||
private boolean toggleWalls;
|
private boolean toggleWalls;
|
||||||
private boolean toggleDecor;
|
private boolean toggleDecor;
|
||||||
private boolean toggleInventory;
|
private boolean toggleInventory;
|
||||||
|
private boolean toggleProjectiles;
|
||||||
|
|
||||||
Widget currentWidget;
|
Widget currentWidget;
|
||||||
int itemIndex = -1;
|
int itemIndex = -1;
|
||||||
@@ -135,6 +136,11 @@ public class DevToolsPlugin extends Plugin
|
|||||||
toggleInventory = !toggleInventory;
|
toggleInventory = !toggleInventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void toggleProjectiles()
|
||||||
|
{
|
||||||
|
toggleProjectiles = !toggleProjectiles;
|
||||||
|
}
|
||||||
|
|
||||||
boolean isTogglePlayers()
|
boolean isTogglePlayers()
|
||||||
{
|
{
|
||||||
return togglePlayers;
|
return togglePlayers;
|
||||||
@@ -175,4 +181,8 @@ public class DevToolsPlugin extends Plugin
|
|||||||
return toggleInventory;
|
return toggleInventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isToggleProjectiles()
|
||||||
|
{
|
||||||
|
return toggleProjectiles;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ import java.awt.RenderingHints;
|
|||||||
import java.awt.geom.Point2D;
|
import java.awt.geom.Point2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import net.runelite.api.Actor;
|
import net.runelite.api.Actor;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Perspective;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import net.runelite.api.SpritePixels;
|
import net.runelite.api.SpritePixels;
|
||||||
import net.runelite.api.TileObject;
|
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)
|
public static void setGraphicProperties(Graphics2D graphics)
|
||||||
{
|
{
|
||||||
graphics.setFont(FontManager.getRunescapeFont());
|
graphics.setFont(FontManager.getRunescapeFont());
|
||||||
|
|||||||
Reference in New Issue
Block a user