From fdb5193c3ed2b04b3ab50c33084d2a82aaf662a5 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 17 Nov 2017 17:34:03 -0500 Subject: [PATCH] runelite-api: add distance methods to actor and tile queries --- .../net/runelite/api/queries/ActorQuery.java | 20 +++++++++++++++++++ .../runelite/api/queries/TileObjectQuery.java | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/queries/ActorQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/ActorQuery.java index d12e61c126..026d4654da 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/ActorQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/ActorQuery.java @@ -24,6 +24,7 @@ */ package net.runelite.api.queries; +import static java.lang.Math.abs; import net.runelite.api.Actor; import net.runelite.api.Point; import net.runelite.api.Query; @@ -93,4 +94,23 @@ public abstract class ActorQuery extends Qu predicate = and(a -> a.getInteracting().equals(a)); return (QueryType) this; } + + @SuppressWarnings("unchecked") + public QueryType isWithinDistance(Point to, int distance) + { + predicate = and(a -> a.getLocalLocation().distanceTo(to) <= distance); + return (QueryType) this; + } + + @SuppressWarnings("unchecked") + public QueryType isWithinArea(Point from, int area) + { + predicate = and(a -> + { + Point localLocation = a.getLocalLocation(); + return abs(localLocation.getX() - from.getX()) < area + && abs(localLocation.getY() - from.getY()) < area; + }); + return (QueryType) this; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/queries/TileObjectQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/TileObjectQuery.java index 743fa5581d..d51c5d460c 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/TileObjectQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/TileObjectQuery.java @@ -24,6 +24,7 @@ */ package net.runelite.api.queries; +import static java.lang.Math.abs; import net.runelite.api.Client; import net.runelite.api.Point; import net.runelite.api.Query; @@ -89,4 +90,23 @@ public abstract class TileObjectQuery predicate = and(object -> object.getLocalLocation().equals(location)); return (QueryType) this; } + + @SuppressWarnings("unchecked") + public QueryType isWithinDistance(Point to, int distance) + { + predicate = and(a -> a.getLocalLocation().distanceTo(to) <= distance); + return (QueryType) this; + } + + @SuppressWarnings("unchecked") + public QueryType isWithinArea(Point from, int area) + { + predicate = and(a -> + { + Point localLocation = a.getLocalLocation(); + return abs(localLocation.getX() - from.getX()) < area + && abs(localLocation.getY() - from.getY()) < area; + }); + return (QueryType) this; + } }