From a4cfbc3b423516d488ab4d9cf3a21eb4172bdb98 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Mon, 9 Sep 2019 08:19:28 -0600 Subject: [PATCH] runelite-api: Use more general Shape for clickboxes and convex hulls --- .../src/main/java/net/runelite/api/Actor.java | 3 ++- .../main/java/net/runelite/api/DecorativeObject.java | 6 +++--- .../src/main/java/net/runelite/api/GameObject.java | 6 +++--- .../src/main/java/net/runelite/api/TileObject.java | 4 ++-- .../src/main/java/net/runelite/api/WallObject.java | 6 +++--- .../client/plugins/agility/AgilityOverlay.java | 4 ++-- .../blastfurnace/BlastFurnaceClickBoxOverlay.java | 4 ++-- .../client/plugins/devtools/DevToolsOverlay.java | 11 ++++++----- .../client/plugins/herbiboars/HerbiboarOverlay.java | 6 +++--- .../client/plugins/npchighlight/NpcSceneOverlay.java | 5 +++-- .../objectindicators/ObjectIndicatorsOverlay.java | 6 +++--- .../client/plugins/roguesden/RoguesDenOverlay.java | 7 ++++--- .../client/plugins/runecraft/AbyssOverlay.java | 4 ++-- .../client/plugins/slayer/TargetClickboxOverlay.java | 4 ++-- .../net/runelite/client/ui/overlay/OverlayUtil.java | 10 +++++----- 15 files changed, 45 insertions(+), 41 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Actor.java b/runelite-api/src/main/java/net/runelite/api/Actor.java index 2b35102832..a523555648 100644 --- a/runelite-api/src/main/java/net/runelite/api/Actor.java +++ b/runelite-api/src/main/java/net/runelite/api/Actor.java @@ -26,6 +26,7 @@ package net.runelite.api; import java.awt.Graphics2D; import java.awt.Polygon; +import java.awt.Shape; import java.awt.image.BufferedImage; import javax.annotation.Nullable; import net.runelite.api.annotations.VisibleForDevtools; @@ -218,7 +219,7 @@ public interface Actor extends Renderable * @return the convex hull * @see net.runelite.api.model.Jarvis */ - Polygon getConvexHull(); + Shape getConvexHull(); /** * Gets the world area that the actor occupies. diff --git a/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java b/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java index 145531fa5d..7dba1a3e65 100644 --- a/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java +++ b/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java @@ -24,7 +24,7 @@ */ package net.runelite.api; -import java.awt.Polygon; +import java.awt.Shape; /** * Represents a decorative object, such as an object on a wall. @@ -37,8 +37,8 @@ public interface DecorativeObject extends TileObject * @return the convex hull * @see net.runelite.api.model.Jarvis */ - Polygon getConvexHull(); - Polygon getConvexHull2(); + Shape getConvexHull(); + Shape getConvexHull2(); Renderable getRenderable(); Renderable getRenderable2(); diff --git a/runelite-api/src/main/java/net/runelite/api/GameObject.java b/runelite-api/src/main/java/net/runelite/api/GameObject.java index c721f35067..2dbf259795 100644 --- a/runelite-api/src/main/java/net/runelite/api/GameObject.java +++ b/runelite-api/src/main/java/net/runelite/api/GameObject.java @@ -24,7 +24,7 @@ */ package net.runelite.api; -import java.awt.Polygon; +import java.awt.Shape; import net.runelite.api.coords.Angle; /** @@ -54,12 +54,12 @@ public interface GameObject extends TileObject Point getSceneMaxLocation(); /** - * Gets the convex hull of the actors model. + * Gets the convex hull of the object's model. * * @return the convex hull * @see net.runelite.api.model.Jarvis */ - Polygon getConvexHull(); + Shape getConvexHull(); /** * Gets the orientation of the object. diff --git a/runelite-api/src/main/java/net/runelite/api/TileObject.java b/runelite-api/src/main/java/net/runelite/api/TileObject.java index e9012d29e4..7c6c606756 100644 --- a/runelite-api/src/main/java/net/runelite/api/TileObject.java +++ b/runelite-api/src/main/java/net/runelite/api/TileObject.java @@ -26,7 +26,7 @@ package net.runelite.api; import java.awt.Graphics2D; import java.awt.Polygon; -import java.awt.geom.Area; +import java.awt.Shape; import javax.annotation.Nullable; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; @@ -132,5 +132,5 @@ public interface TileObject * @return the clickable area */ @Nullable - Area getClickbox(); + Shape getClickbox(); } diff --git a/runelite-api/src/main/java/net/runelite/api/WallObject.java b/runelite-api/src/main/java/net/runelite/api/WallObject.java index c9016b4289..99e8236942 100644 --- a/runelite-api/src/main/java/net/runelite/api/WallObject.java +++ b/runelite-api/src/main/java/net/runelite/api/WallObject.java @@ -24,7 +24,7 @@ */ package net.runelite.api; -import java.awt.Polygon; +import java.awt.Shape; /** * Represents one or two walls on a tile @@ -63,8 +63,8 @@ public interface WallObject extends TileObject * @return the convex hull * @see net.runelite.api.model.Jarvis */ - Polygon getConvexHull(); - Polygon getConvexHull2(); + Shape getConvexHull(); + Shape getConvexHull2(); Renderable getRenderable1(); Renderable getRenderable2(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityOverlay.java index e9c205f64f..c012b945dc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityOverlay.java @@ -29,7 +29,7 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Polygon; -import java.awt.geom.Area; +import java.awt.Shape; import java.util.List; import javax.inject.Inject; import net.runelite.api.Client; @@ -90,7 +90,7 @@ class AgilityOverlay extends Overlay } return; } - Area objectClickbox = object.getClickbox(); + Shape objectClickbox = object.getClickbox(); if (objectClickbox != null) { AgilityShortcut agilityShortcut = obstacle.getShortcut(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceClickBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceClickBoxOverlay.java index 9dba17df30..ea09b36e63 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceClickBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceClickBoxOverlay.java @@ -27,7 +27,7 @@ package net.runelite.client.plugins.blastfurnace; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; -import java.awt.geom.Area; +import java.awt.Shape; import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.EquipmentInventorySlot; @@ -110,7 +110,7 @@ class BlastFurnaceClickBoxOverlay extends Overlay if (localLocation.distanceTo(location) <= MAX_DISTANCE) { - Area objectClickbox = object.getClickbox(); + Shape objectClickbox = object.getClickbox(); if (objectClickbox != null) { if (objectClickbox.contains(mousePosition.getX(), mousePosition.getY())) 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 457a86b766..aa2f55bd27 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 @@ -32,6 +32,7 @@ import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.Rectangle; +import java.awt.Shape; import java.awt.geom.Rectangle2D; import java.util.List; import javax.inject.Inject; @@ -286,10 +287,10 @@ class DevToolsOverlay extends Overlay // Draw a polygon around the convex hull // of the model vertices - Polygon p = gameObject.getConvexHull(); + Shape p = gameObject.getConvexHull(); if (p != null) { - graphics.drawPolygon(p); + graphics.draw(p); } } } @@ -330,16 +331,16 @@ class DevToolsOverlay extends Overlay OverlayUtil.renderTileOverlay(graphics, decorObject, "ID: " + decorObject.getId(), DEEP_PURPLE); } - Polygon p = decorObject.getConvexHull(); + Shape p = decorObject.getConvexHull(); if (p != null) { - graphics.drawPolygon(p); + graphics.draw(p); } p = decorObject.getConvexHull2(); if (p != null) { - graphics.drawPolygon(p); + graphics.draw(p); } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarOverlay.java index 653228cdb3..a97f5d9d49 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/herbiboars/HerbiboarOverlay.java @@ -28,7 +28,7 @@ import com.google.inject.Inject; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; -import java.awt.geom.Area; +import java.awt.Shape; import java.util.Set; import net.runelite.api.TileObject; import net.runelite.api.coords.WorldPoint; @@ -103,7 +103,7 @@ class HerbiboarOverlay extends Overlay { if (config.showClickBoxes()) { - Area clickbox = object.getClickbox(); + Shape clickbox = object.getClickbox(); if (clickbox != null) { graphics.setColor(config.getObjectColor()); @@ -129,7 +129,7 @@ class HerbiboarOverlay extends Overlay { if (config.showClickBoxes()) { - Area clickbox = object.getClickbox(); + Shape clickbox = object.getClickbox(); if (clickbox != null) { Color col = config.getObjectColor(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java index ae252aef93..fef1b03c8a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcSceneOverlay.java @@ -30,6 +30,7 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Polygon; +import java.awt.Shape; import java.text.DecimalFormat; import java.text.NumberFormat; import java.time.Instant; @@ -167,7 +168,7 @@ public class NpcSceneOverlay extends Overlay break; case HULL: - Polygon objectClickbox = actor.getConvexHull(); + Shape objectClickbox = actor.getConvexHull(); renderPoly(graphics, color, objectClickbox); break; @@ -185,7 +186,7 @@ public class NpcSceneOverlay extends Overlay } } - private void renderPoly(Graphics2D graphics, Color color, Polygon polygon) + private void renderPoly(Graphics2D graphics, Color color, Shape polygon) { if (polygon != null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java index 509b3f5bde..a61aa526dc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsOverlay.java @@ -26,7 +26,7 @@ package net.runelite.client.plugins.objectindicators; import java.awt.Dimension; import java.awt.Graphics2D; -import java.awt.Polygon; +import java.awt.Shape; import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.DecorativeObject; @@ -66,8 +66,8 @@ class ObjectIndicatorsOverlay extends Overlay continue; } - final Polygon polygon; - Polygon polygon2 = null; + final Shape polygon; + Shape polygon2 = null; if (object instanceof GameObject) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenOverlay.java index 4b5cc234e1..1dc0aa0bc6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/roguesden/RoguesDenOverlay.java @@ -28,6 +28,7 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Polygon; +import java.awt.Shape; import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.coords.LocalPoint; @@ -65,11 +66,11 @@ public class RoguesDenOverlay extends Overlay { if (tile.getPlane() == client.getPlane() && obstacle.getLocalLocation().distanceTo(playerLocation) < MAX_DISTANCE) { - Polygon p = tile.getGameObjects()[0].getConvexHull(); + Shape p = tile.getGameObjects()[0].getConvexHull(); if (p != null) { graphics.setColor(Color.CYAN); - graphics.drawPolygon(p); + graphics.draw(p); } } }); @@ -82,7 +83,7 @@ public class RoguesDenOverlay extends Overlay if (p != null) { graphics.setColor(Color.CYAN); - graphics.drawPolygon(p); + graphics.draw(p); } } }); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java index b4d3df3e18..0981628dc9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java @@ -26,7 +26,7 @@ package net.runelite.client.plugins.runecraft; import java.awt.Color; import java.awt.Polygon; -import java.awt.geom.Area; +import java.awt.Shape; import com.google.inject.Inject; import java.awt.Dimension; import java.awt.Graphics2D; @@ -105,7 +105,7 @@ class AbyssOverlay extends Overlay } Point mousePosition = client.getMouseCanvasPosition(); - Area objectClickbox = object.getClickbox(); + Shape objectClickbox = object.getClickbox(); if (objectClickbox != null) { if (objectClickbox.contains(mousePosition.getX(), mousePosition.getY())) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java index cc52cf9ac1..52b5b31865 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/TargetClickboxOverlay.java @@ -30,7 +30,7 @@ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; -import java.awt.Polygon; +import java.awt.Shape; import java.util.List; import javax.inject.Inject; import net.runelite.api.NPC; @@ -71,7 +71,7 @@ public class TargetClickboxOverlay extends Overlay private void renderTargetOverlay(Graphics2D graphics, NPC actor, Color color) { - Polygon objectClickbox = actor.getConvexHull(); + Shape objectClickbox = actor.getConvexHull(); if (objectClickbox != null) { graphics.setColor(color); 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 f15bc0124e..912abab8f4 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 @@ -31,8 +31,8 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.RenderingHints; +import java.awt.Shape; import java.awt.Stroke; -import java.awt.geom.Area; import java.awt.image.BufferedImage; import net.runelite.api.Actor; import net.runelite.api.Client; @@ -50,14 +50,14 @@ public class OverlayUtil private static final int MINIMAP_DOT_RADIUS = 4; private static final double UNIT = Math.PI / 1024.0d; - public static void renderPolygon(Graphics2D graphics, Polygon poly, Color color) + public static void renderPolygon(Graphics2D graphics, Shape poly, Color color) { graphics.setColor(color); final Stroke originalStroke = graphics.getStroke(); graphics.setStroke(new BasicStroke(2)); - graphics.drawPolygon(poly); + graphics.draw(poly); graphics.setColor(new Color(0, 0, 0, 50)); - graphics.fillPolygon(poly); + graphics.fill(poly); graphics.setStroke(originalStroke); } @@ -175,7 +175,7 @@ public class OverlayUtil renderImageLocation(client, graphics, localLocation, image, 0); } - public static void renderHoverableArea(Graphics2D graphics, Area area, net.runelite.api.Point mousePosition, Color fillColor, Color borderColor, Color borderHoverColor) + public static void renderHoverableArea(Graphics2D graphics, Shape area, net.runelite.api.Point mousePosition, Color fillColor, Color borderColor, Color borderHoverColor) { if (area != null) {