npcindicators: add true highlight & fix for slayer. (#1078)
* Add true location to render styles. * Add true location to npc indicators. * Fix true location in slayer
This commit is contained in:
@@ -33,6 +33,7 @@ import java.awt.Polygon;
|
|||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
@@ -43,6 +44,7 @@ import net.runelite.api.NPCDefinition;
|
|||||||
import net.runelite.api.Perspective;
|
import net.runelite.api.Perspective;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
|
import net.runelite.api.coords.WorldArea;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.client.graphics.ModelOutlineRenderer;
|
import net.runelite.client.graphics.ModelOutlineRenderer;
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
import net.runelite.client.ui.overlay.Overlay;
|
||||||
@@ -169,7 +171,7 @@ public class NpcSceneOverlay extends Overlay
|
|||||||
break;
|
break;
|
||||||
case TILE:
|
case TILE:
|
||||||
int size = 1;
|
int size = 1;
|
||||||
final NPCDefinition composition = actor.getTransformedDefinition();
|
NPCDefinition composition = actor.getTransformedDefinition();
|
||||||
if (composition != null)
|
if (composition != null)
|
||||||
{
|
{
|
||||||
size = composition.getSize();
|
size = composition.getSize();
|
||||||
@@ -194,6 +196,23 @@ public class NpcSceneOverlay extends Overlay
|
|||||||
case GLOW:
|
case GLOW:
|
||||||
modelOutliner.drawOutline(actor, 8, color, TRANSPARENT);
|
modelOutliner.drawOutline(actor, 8, color, TRANSPARENT);
|
||||||
break;
|
break;
|
||||||
|
case TRUE_LOCATIONS:
|
||||||
|
size = 1;
|
||||||
|
composition = actor.getTransformedDefinition();
|
||||||
|
|
||||||
|
if (composition != null)
|
||||||
|
{
|
||||||
|
size = composition.getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
final WorldPoint wp = actor.getWorldLocation();
|
||||||
|
final Color squareColor = color;
|
||||||
|
|
||||||
|
getSquare(wp, size).forEach(square ->
|
||||||
|
{
|
||||||
|
drawTile(graphics, square, squareColor, 1, 255, 50);
|
||||||
|
});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.isDrawNames() && actor.getName() != null)
|
if (plugin.isDrawNames() && actor.getName() != null)
|
||||||
@@ -231,4 +250,39 @@ public class NpcSceneOverlay extends Overlay
|
|||||||
graphics.fill(polygon);
|
graphics.fill(polygon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<WorldPoint> getSquare(WorldPoint npcLoc, int npcSize)
|
||||||
|
{
|
||||||
|
return new WorldArea(npcLoc.getX(), npcLoc.getY(), npcSize, npcSize, npcLoc.getPlane()).toWorldPointList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawTile(Graphics2D graphics, WorldPoint point, Color color, int strokeWidth, int outlineAlpha, int fillAlpha)
|
||||||
|
{
|
||||||
|
WorldPoint playerLocation = client.getLocalPlayer().getWorldLocation();
|
||||||
|
|
||||||
|
if (point.distanceTo(playerLocation) >= 32)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalPoint lp = LocalPoint.fromWorld(client, point);
|
||||||
|
|
||||||
|
if (lp == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Polygon poly = Perspective.getCanvasTilePoly(client, lp);
|
||||||
|
|
||||||
|
if (poly == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha));
|
||||||
|
graphics.setStroke(new BasicStroke(strokeWidth));
|
||||||
|
graphics.draw(poly);
|
||||||
|
graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
|
||||||
|
graphics.fill(poly);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,5 +33,6 @@ public enum RenderStyle
|
|||||||
THIN_OUTLINE,
|
THIN_OUTLINE,
|
||||||
OUTLINE,
|
OUTLINE,
|
||||||
THIN_GLOW,
|
THIN_GLOW,
|
||||||
GLOW
|
GLOW,
|
||||||
|
TRUE_LOCATIONS
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,10 +26,12 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.slayer;
|
package net.runelite.client.plugins.slayer;
|
||||||
|
|
||||||
|
import java.awt.BasicStroke;
|
||||||
import java.awt.Color;
|
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.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
@@ -39,6 +41,7 @@ import net.runelite.api.NPCDefinition;
|
|||||||
import net.runelite.api.Perspective;
|
import net.runelite.api.Perspective;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
|
import net.runelite.api.coords.WorldArea;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.client.graphics.ModelOutlineRenderer;
|
import net.runelite.client.graphics.ModelOutlineRenderer;
|
||||||
import net.runelite.client.ui.overlay.Overlay;
|
import net.runelite.client.ui.overlay.Overlay;
|
||||||
@@ -155,16 +158,10 @@ public class TargetClickboxOverlay extends Overlay
|
|||||||
}
|
}
|
||||||
|
|
||||||
WorldPoint wp = actor.getWorldLocation();
|
WorldPoint wp = actor.getWorldLocation();
|
||||||
lp = LocalPoint.fromWorld(client, wp);
|
getSquare(wp, size).forEach(square ->
|
||||||
|
|
||||||
if (lp == null)
|
|
||||||
{
|
{
|
||||||
return;
|
drawTile(graphics, square, color, 1, 255, 50);
|
||||||
}
|
});
|
||||||
|
|
||||||
tilePoly = Perspective.getCanvasTileAreaPoly(client, lp, size);
|
|
||||||
|
|
||||||
OverlayUtil.renderPolygon(graphics, tilePoly, color);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,4 +176,39 @@ public class TargetClickboxOverlay extends Overlay
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<WorldPoint> getSquare(WorldPoint npcLoc, int npcSize)
|
||||||
|
{
|
||||||
|
return new WorldArea(npcLoc.getX(), npcLoc.getY(), npcSize, npcSize, npcLoc.getPlane()).toWorldPointList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawTile(Graphics2D graphics, WorldPoint point, Color color, int strokeWidth, int outlineAlpha, int fillAlpha)
|
||||||
|
{
|
||||||
|
WorldPoint playerLocation = client.getLocalPlayer().getWorldLocation();
|
||||||
|
|
||||||
|
if (point.distanceTo(playerLocation) >= 32)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalPoint lp = LocalPoint.fromWorld(client, point);
|
||||||
|
|
||||||
|
if (lp == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Polygon poly = Perspective.getCanvasTilePoly(client, lp);
|
||||||
|
|
||||||
|
if (poly == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), outlineAlpha));
|
||||||
|
graphics.setStroke(new BasicStroke(strokeWidth));
|
||||||
|
graphics.draw(poly);
|
||||||
|
graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), fillAlpha));
|
||||||
|
graphics.fill(poly);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user