diff --git a/runelite-api/src/main/java/net/runelite/api/GraphicsObject.java b/runelite-api/src/main/java/net/runelite/api/GraphicsObject.java index 73ee342777..0c17af8a1d 100644 --- a/runelite-api/src/main/java/net/runelite/api/GraphicsObject.java +++ b/runelite-api/src/main/java/net/runelite/api/GraphicsObject.java @@ -60,11 +60,9 @@ public interface GraphicsObject extends Renderable int getLevel(); /** - * Gets the height of the graphic. - * - * @return the height + * Gets the z coordinate */ - int getHeight(); + int getZ(); /** * Checks if this spotanim is done animating diff --git a/runelite-api/src/main/java/net/runelite/api/Perspective.java b/runelite-api/src/main/java/net/runelite/api/Perspective.java index e5f2262965..256355d5fc 100644 --- a/runelite-api/src/main/java/net/runelite/api/Perspective.java +++ b/runelite-api/src/main/java/net/runelite/api/Perspective.java @@ -42,6 +42,7 @@ import net.runelite.api.geometry.SimplePolygon; import net.runelite.api.model.Jarvis; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; +import org.jetbrains.annotations.ApiStatus; /** * A utility class containing methods to help with conversion between @@ -677,21 +678,19 @@ public class Perspective * @param client the game client * @param model the model to calculate a clickbox for * @param orientation the orientation of the model (0-2048, where 0 is north) - * @param point the coordinate of the tile + * @param x x coord in local space + * @param z y coord in local space * @return the clickable area of the model */ @Nullable - public static Shape getClickbox(@Nonnull Client client, Model model, int orientation, LocalPoint point) + @ApiStatus.Internal + public static Shape getClickbox(@Nonnull Client client, Model model, int orientation, int x, int y, int z) { if (model == null) { return null; } - int x = point.getX(); - int y = point.getY(); - int z = getTileHeight(client, point, client.getPlane()); - SimplePolygon bounds = calculateAABB(client, model, orientation, x, y, z); if (bounds == null) 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 0153d01be9..b9d83901a4 100644 --- a/runelite-api/src/main/java/net/runelite/api/TileObject.java +++ b/runelite-api/src/main/java/net/runelite/api/TileObject.java @@ -53,6 +53,11 @@ public interface TileObject */ int getY(); + /** + * Gets the vertical coordinate of this object + */ + int getZ(); + /** * Gets the plane of the tile that the object is on. */ diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java index 6f56546547..c6c174edab 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/outline/ModelOutlineRenderer.java @@ -1016,15 +1016,13 @@ public class ModelOutlineRenderer private void drawOutline(GameObject gameObject, int outlineWidth, Color color, int feather) { - LocalPoint lp = gameObject.getLocalLocation(); Renderable renderable = gameObject.getRenderable(); if (renderable != null) { Model model = renderable instanceof Model ? (Model) renderable : renderable.getModel(); if (model != null) { - drawModelOutline(model, lp.getX(), lp.getY(), - Perspective.getTileHeight(client, lp, gameObject.getPlane()), + drawModelOutline(model, gameObject.getX(), gameObject.getY(), gameObject.getZ(), gameObject.getModelOrientation(), outlineWidth, color, feather); } } @@ -1032,15 +1030,13 @@ public class ModelOutlineRenderer private void drawOutline(GroundObject groundObject, int outlineWidth, Color color, int feather) { - LocalPoint lp = groundObject.getLocalLocation(); Renderable renderable = groundObject.getRenderable(); if (renderable != null) { Model model = renderable instanceof Model ? (Model) renderable : renderable.getModel(); if (model != null) { - drawModelOutline(model, lp.getX(), lp.getY(), - Perspective.getTileHeight(client, lp, client.getPlane()), + drawModelOutline(model, groundObject.getX(), groundObject.getY(), groundObject.getZ(), 0, outlineWidth, color, feather); } } @@ -1048,16 +1044,13 @@ public class ModelOutlineRenderer private void drawOutline(ItemLayer itemLayer, int outlineWidth, Color color, int feather) { - LocalPoint lp = itemLayer.getLocalLocation(); - Renderable bottomRenderable = itemLayer.getBottom(); if (bottomRenderable != null) { Model model = bottomRenderable instanceof Model ? (Model) bottomRenderable : bottomRenderable.getModel(); if (model != null) { - drawModelOutline(model, lp.getX(), lp.getY(), - Perspective.getTileHeight(client, lp, itemLayer.getPlane()) - itemLayer.getHeight(), + drawModelOutline(model, itemLayer.getX(), itemLayer.getY(), itemLayer.getZ() - itemLayer.getHeight(), 0, outlineWidth, color, feather); } } @@ -1068,8 +1061,7 @@ public class ModelOutlineRenderer Model model = middleRenderable instanceof Model ? (Model) middleRenderable : middleRenderable.getModel(); if (model != null) { - drawModelOutline(model, lp.getX(), lp.getY(), - Perspective.getTileHeight(client, lp, itemLayer.getPlane()) - itemLayer.getHeight(), + drawModelOutline(model, itemLayer.getX(), itemLayer.getY(), itemLayer.getZ() - itemLayer.getHeight(), 0, outlineWidth, color, feather); } } @@ -1080,8 +1072,7 @@ public class ModelOutlineRenderer Model model = topRenderable instanceof Model ? (Model) topRenderable : topRenderable.getModel(); if (model != null) { - drawModelOutline(model, lp.getX(), lp.getY(), - Perspective.getTileHeight(client, lp, itemLayer.getPlane()) - itemLayer.getHeight(), + drawModelOutline(model, itemLayer.getX(), itemLayer.getY(), itemLayer.getZ() - itemLayer.getHeight(), 0, outlineWidth, color, feather); } } @@ -1089,8 +1080,6 @@ public class ModelOutlineRenderer private void drawOutline(DecorativeObject decorativeObject, int outlineWidth, Color color, int feather) { - LocalPoint lp = decorativeObject.getLocalLocation(); - Renderable renderable1 = decorativeObject.getRenderable(); if (renderable1 != null) { @@ -1098,9 +1087,9 @@ public class ModelOutlineRenderer if (model != null) { drawModelOutline(model, - lp.getX() + decorativeObject.getXOffset(), - lp.getY() + decorativeObject.getYOffset(), - Perspective.getTileHeight(client, lp, decorativeObject.getPlane()), + decorativeObject.getX() + decorativeObject.getXOffset(), + decorativeObject.getY() + decorativeObject.getYOffset(), + decorativeObject.getZ(), 0, outlineWidth, color, feather); } } @@ -1112,8 +1101,7 @@ public class ModelOutlineRenderer if (model != null) { // Offset is not used for the second model - drawModelOutline(model, lp.getX(), lp.getY(), - Perspective.getTileHeight(client, lp, decorativeObject.getPlane()), + drawModelOutline(model, decorativeObject.getX(), decorativeObject.getY(), decorativeObject.getZ(), 0, outlineWidth, color, feather); } } @@ -1121,16 +1109,13 @@ public class ModelOutlineRenderer private void drawOutline(WallObject wallObject, int outlineWidth, Color color, int feather) { - LocalPoint lp = wallObject.getLocalLocation(); - Renderable renderable1 = wallObject.getRenderable1(); if (renderable1 != null) { Model model = renderable1 instanceof Model ? (Model) renderable1 : renderable1.getModel(); if (model != null) { - drawModelOutline(model, lp.getX(), lp.getY(), - Perspective.getTileHeight(client, lp, wallObject.getPlane()), + drawModelOutline(model, wallObject.getX(), wallObject.getY(), wallObject.getZ(), 0, outlineWidth, color, feather); } } @@ -1141,8 +1126,7 @@ public class ModelOutlineRenderer Model model = renderable2 instanceof Model ? (Model) renderable2 : renderable2.getModel(); if (model != null) { - drawModelOutline(model, lp.getX(), lp.getY(), - Perspective.getTileHeight(client, lp, wallObject.getPlane()), + drawModelOutline(model, wallObject.getX(), wallObject.getY(), wallObject.getZ(), 0, outlineWidth, color, feather); } } @@ -1180,7 +1164,7 @@ public class ModelOutlineRenderer Model model = graphicsObject.getModel(); if (model != null) { - drawModelOutline(model, lp.getX(), lp.getY(), graphicsObject.getHeight(), + drawModelOutline(model, lp.getX(), lp.getY(), graphicsObject.getZ(), 0, outlineWidth, color, feather); } }