devtools: Add Interacting arrow devtool
This commit is contained in:
@@ -232,6 +232,14 @@ public class DevToolsPanel extends PluginPanel
|
|||||||
});
|
});
|
||||||
container.add(oculusOrbBtn);
|
container.add(oculusOrbBtn);
|
||||||
|
|
||||||
|
final JButton interactingBtn = new JButton("Interacting");
|
||||||
|
interactingBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
|
highlightButton(interactingBtn);
|
||||||
|
plugin.toggleInteracting();
|
||||||
|
});
|
||||||
|
container.add(interactingBtn);
|
||||||
|
|
||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ public class DevToolsPlugin extends Plugin
|
|||||||
private boolean toggleCamera;
|
private boolean toggleCamera;
|
||||||
private boolean toggleWorldMapLocation;
|
private boolean toggleWorldMapLocation;
|
||||||
private boolean toggleTileLocation;
|
private boolean toggleTileLocation;
|
||||||
|
private boolean toggleInteracting;
|
||||||
|
|
||||||
Widget currentWidget;
|
Widget currentWidget;
|
||||||
int itemIndex = -1;
|
int itemIndex = -1;
|
||||||
@@ -358,6 +359,11 @@ public class DevToolsPlugin extends Plugin
|
|||||||
toggleTileLocation = !toggleTileLocation;
|
toggleTileLocation = !toggleTileLocation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void toggleInteracting()
|
||||||
|
{
|
||||||
|
toggleInteracting = !toggleInteracting;
|
||||||
|
}
|
||||||
|
|
||||||
boolean isTogglePlayers()
|
boolean isTogglePlayers()
|
||||||
{
|
{
|
||||||
return togglePlayers;
|
return togglePlayers;
|
||||||
@@ -447,4 +453,9 @@ public class DevToolsPlugin extends Plugin
|
|||||||
{
|
{
|
||||||
return toggleTileLocation;
|
return toggleTileLocation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isToggleInteracting()
|
||||||
|
{
|
||||||
|
return toggleInteracting;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,8 +29,10 @@ import java.awt.Color;
|
|||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Polygon;
|
import java.awt.Polygon;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.GeneralPath;
|
import java.awt.geom.GeneralPath;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Stream;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import net.runelite.api.Actor;
|
import net.runelite.api.Actor;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
@@ -53,6 +55,7 @@ public class SceneOverlay extends Overlay
|
|||||||
private static final Color LOCAL_VALID_MOVEMENT_COLOR = new Color(141, 220, 26);
|
private static final Color LOCAL_VALID_MOVEMENT_COLOR = new Color(141, 220, 26);
|
||||||
private static final Color VALID_MOVEMENT_COLOR = new Color(73, 122, 18);
|
private static final Color VALID_MOVEMENT_COLOR = new Color(73, 122, 18);
|
||||||
private static final Color LINE_OF_SIGHT_COLOR = new Color(204, 42, 219);
|
private static final Color LINE_OF_SIGHT_COLOR = new Color(204, 42, 219);
|
||||||
|
private static final Color INTERACTING_COLOR = Color.CYAN;
|
||||||
|
|
||||||
private static final int LOCAL_TILE_SIZE = Perspective.LOCAL_TILE_SIZE;
|
private static final int LOCAL_TILE_SIZE = Perspective.LOCAL_TILE_SIZE;
|
||||||
private static final int CHUNK_SIZE = 8;
|
private static final int CHUNK_SIZE = 8;
|
||||||
@@ -60,6 +63,14 @@ public class SceneOverlay extends Overlay
|
|||||||
private static final int CULL_CHUNK_BORDERS_RANGE = 16;
|
private static final int CULL_CHUNK_BORDERS_RANGE = 16;
|
||||||
private static final int STROKE_WIDTH = 4;
|
private static final int STROKE_WIDTH = 4;
|
||||||
private static final int CULL_LINE_OF_SIGHT_RANGE = 10;
|
private static final int CULL_LINE_OF_SIGHT_RANGE = 10;
|
||||||
|
private static final int INTERACTING_SHIFT = -16;
|
||||||
|
|
||||||
|
private static final Polygon ARROW_HEAD = new Polygon(
|
||||||
|
new int[]{0, -3, 3},
|
||||||
|
new int[]{0, -5, -5},
|
||||||
|
3
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
private final Client client;
|
private final Client client;
|
||||||
private final DevToolsPlugin plugin;
|
private final DevToolsPlugin plugin;
|
||||||
@@ -96,6 +107,11 @@ public class SceneOverlay extends Overlay
|
|||||||
renderValidMovement(graphics);
|
renderValidMovement(graphics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (plugin.isToggleInteracting())
|
||||||
|
{
|
||||||
|
renderInteracting(graphics);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,4 +362,49 @@ public class SceneOverlay extends Overlay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void renderInteracting(Graphics2D graphics)
|
||||||
|
{
|
||||||
|
Stream.concat(
|
||||||
|
client.getPlayers().stream(),
|
||||||
|
client.getNpcs().stream()
|
||||||
|
).forEach(fa ->
|
||||||
|
{
|
||||||
|
Actor ta = fa.getInteracting();
|
||||||
|
if (ta == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalPoint fl = fa.getLocalLocation();
|
||||||
|
Point fs = Perspective.worldToCanvas(client, fl.getX(), fl.getY(), client.getPlane(), fa.getLogicalHeight() / 2);
|
||||||
|
if (fs == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int fsx = fs.getX();
|
||||||
|
int fsy = fs.getY() - INTERACTING_SHIFT;
|
||||||
|
|
||||||
|
LocalPoint tl = ta.getLocalLocation();
|
||||||
|
Point ts = Perspective.worldToCanvas(client, tl.getX(), tl.getY(), client.getPlane(), ta.getLogicalHeight() / 2);
|
||||||
|
if (ts == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int tsx = ts.getX();
|
||||||
|
int tsy = ts.getY() - INTERACTING_SHIFT;
|
||||||
|
|
||||||
|
graphics.setColor(INTERACTING_COLOR);
|
||||||
|
graphics.drawLine(fsx, fsy, tsx, tsy);
|
||||||
|
|
||||||
|
AffineTransform t = new AffineTransform();
|
||||||
|
t.translate(tsx, tsy);
|
||||||
|
t.rotate(tsx - fsx, tsy - fsy);
|
||||||
|
t.rotate(Math.PI / -2);
|
||||||
|
AffineTransform ot = graphics.getTransform();
|
||||||
|
graphics.setTransform(t);
|
||||||
|
graphics.fill(ARROW_HEAD);
|
||||||
|
graphics.setTransform(ot);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user