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:
Ganom
2019-07-22 03:38:56 -04:00
committed by Kyleeld
parent 512d53d04b
commit 4db6403e65
3 changed files with 98 additions and 11 deletions

View File

@@ -33,6 +33,7 @@ import java.awt.Polygon;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.time.Instant;
import java.util.List;
import java.util.Locale;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -43,6 +44,7 @@ import net.runelite.api.NPCDefinition;
import net.runelite.api.Perspective;
import net.runelite.api.Point;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldArea;
import net.runelite.api.coords.WorldPoint;
import net.runelite.client.graphics.ModelOutlineRenderer;
import net.runelite.client.ui.overlay.Overlay;
@@ -169,7 +171,7 @@ public class NpcSceneOverlay extends Overlay
break;
case TILE:
int size = 1;
final NPCDefinition composition = actor.getTransformedDefinition();
NPCDefinition composition = actor.getTransformedDefinition();
if (composition != null)
{
size = composition.getSize();
@@ -194,6 +196,23 @@ public class NpcSceneOverlay extends Overlay
case GLOW:
modelOutliner.drawOutline(actor, 8, color, TRANSPARENT);
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)
@@ -231,4 +250,39 @@ public class NpcSceneOverlay extends Overlay
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);
}
}

View File

@@ -33,5 +33,6 @@ public enum RenderStyle
THIN_OUTLINE,
OUTLINE,
THIN_GLOW,
GLOW
GLOW,
TRUE_LOCATIONS
}

View File

@@ -26,10 +26,12 @@
*/
package net.runelite.client.plugins.slayer;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -39,6 +41,7 @@ import net.runelite.api.NPCDefinition;
import net.runelite.api.Perspective;
import net.runelite.api.Point;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldArea;
import net.runelite.api.coords.WorldPoint;
import net.runelite.client.graphics.ModelOutlineRenderer;
import net.runelite.client.ui.overlay.Overlay;
@@ -155,16 +158,10 @@ public class TargetClickboxOverlay extends Overlay
}
WorldPoint wp = actor.getWorldLocation();
lp = LocalPoint.fromWorld(client, wp);
if (lp == null)
getSquare(wp, size).forEach(square ->
{
return;
}
tilePoly = Perspective.getCanvasTileAreaPoly(client, lp, size);
OverlayUtil.renderPolygon(graphics, tilePoly, color);
drawTile(graphics, square, color, 1, 255, 50);
});
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);
}
}