Add conversion methods to WorldPoint and LocalPoint
This commit is contained in:
@@ -47,6 +47,11 @@
|
|||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.findbugs</groupId>
|
||||||
|
<artifactId>jsr305</artifactId>
|
||||||
|
<version>1.3.9</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ public class Perspective
|
|||||||
* @param point world location
|
* @param point world location
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public static boolean isWorldInScene(Client client, Point point)
|
public static boolean isWorldInScene(Client client, Point point)
|
||||||
{
|
{
|
||||||
int x = point.getX();
|
int x = point.getX();
|
||||||
@@ -276,6 +277,7 @@ public class Perspective
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static Point worldToLocal(Client client, Point point)
|
public static Point worldToLocal(Client client, Point point)
|
||||||
{
|
{
|
||||||
if (!isWorldInScene(client, point))
|
if (!isWorldInScene(client, point))
|
||||||
@@ -292,6 +294,7 @@ public class Perspective
|
|||||||
return new Point(x, y);
|
return new Point(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static Point localToWorld(Client client, Point point)
|
public static Point localToWorld(Client client, Point point)
|
||||||
{
|
{
|
||||||
int x = (point.getX() >>> LOCAL_COORD_BITS) + client.getBaseX();
|
int x = (point.getX() >>> LOCAL_COORD_BITS) + client.getBaseX();
|
||||||
@@ -299,6 +302,7 @@ public class Perspective
|
|||||||
return new Point(x, y);
|
return new Point(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static Point regionToWorld(Client client, Point point)
|
public static Point regionToWorld(Client client, Point point)
|
||||||
{
|
{
|
||||||
int baseX = client.getBaseX();
|
int baseX = client.getBaseX();
|
||||||
@@ -308,6 +312,7 @@ public class Perspective
|
|||||||
return new Point(x, y);
|
return new Point(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static Point regionToLocal(Client client, Point point)
|
public static Point regionToLocal(Client client, Point point)
|
||||||
{
|
{
|
||||||
int x = point.getX() << LOCAL_COORD_BITS;
|
int x = point.getX() << LOCAL_COORD_BITS;
|
||||||
|
|||||||
@@ -0,0 +1,113 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018 Abex
|
||||||
|
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.api.coords;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import lombok.Value;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Perspective;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A LocolPoint is a Two-Dimensional point in the local coordinate space. Because the local coordinate space moves,
|
||||||
|
* it is not safe to keep a LocalPoint after a loading zone. The unit is 1/128th of a Tile
|
||||||
|
*/
|
||||||
|
@Value
|
||||||
|
public class LocalPoint
|
||||||
|
{
|
||||||
|
private final int x, y;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a LocalPoint of the center of the passed tile
|
||||||
|
*
|
||||||
|
* @return LocalPoint if in scene, otherwise null
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public static LocalPoint fromWorld(Client client, WorldPoint world)
|
||||||
|
{
|
||||||
|
if (client.getPlane() != world.getPlane())
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return fromWorld(client, world.getX(), world.getY());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a LocalPoint of the center of the passed tile
|
||||||
|
*
|
||||||
|
* @return LocalPoint if in scene, otherwise null
|
||||||
|
*/
|
||||||
|
public static LocalPoint fromWorld(Client client, int x, int y)
|
||||||
|
{
|
||||||
|
if (!WorldPoint.isInScene(client, x, y))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int baseX = client.getBaseX();
|
||||||
|
int baseY = client.getBaseY();
|
||||||
|
|
||||||
|
return fromRegion(x - baseX, y - baseY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the distance from this point to another point
|
||||||
|
*
|
||||||
|
* @param other
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int distanceTo(LocalPoint other)
|
||||||
|
{
|
||||||
|
return (int) Math.hypot(getX() - other.getX(), getY() - other.getY());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a LocalPoint of the center of the passed tile
|
||||||
|
*/
|
||||||
|
public static LocalPoint fromRegion(int x, int y)
|
||||||
|
{
|
||||||
|
return new LocalPoint(
|
||||||
|
(x << Perspective.LOCAL_COORD_BITS) + (1 << Perspective.LOCAL_COORD_BITS - 1) - 1,
|
||||||
|
(y << Perspective.LOCAL_COORD_BITS) + (1 << Perspective.LOCAL_COORD_BITS - 1) - 1
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the X coordinate in Region space (tiles)
|
||||||
|
*/
|
||||||
|
public int getRegionX()
|
||||||
|
{
|
||||||
|
return x >>> Perspective.LOCAL_COORD_BITS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Y coordinate in Region space (tiles)
|
||||||
|
*/
|
||||||
|
public int getRegionY()
|
||||||
|
{
|
||||||
|
return y >>> Perspective.LOCAL_COORD_BITS;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 Abex
|
* Copyright (c) 2018 Abex
|
||||||
|
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -25,8 +26,13 @@
|
|||||||
package net.runelite.api.coords;
|
package net.runelite.api.coords;
|
||||||
|
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.Perspective;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WorldPoint is a Three-Dimensional point representing the location of a Tile
|
||||||
|
*/
|
||||||
@Value
|
@Value
|
||||||
public class WorldPoint
|
public class WorldPoint
|
||||||
{
|
{
|
||||||
@@ -34,21 +40,99 @@ public class WorldPoint
|
|||||||
* The X coordinate of the Point.
|
* The X coordinate of the Point.
|
||||||
* Units are in tiles
|
* Units are in tiles
|
||||||
*/
|
*/
|
||||||
private final int X;
|
private final int x;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Y coordinate of the Point.
|
* The Y coordinate of the Point.
|
||||||
* Units are in tiles
|
* Units are in tiles
|
||||||
*/
|
*/
|
||||||
private final int Y;
|
private final int y;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The plane coordinate of the Point.
|
* The plane coordinate of the Point.
|
||||||
*/
|
*/
|
||||||
private final int plane;
|
private final int plane;
|
||||||
|
|
||||||
|
public static boolean isInScene(Client client, int x, int y)
|
||||||
|
{
|
||||||
|
int baseX = client.getBaseX();
|
||||||
|
int baseY = client.getBaseY();
|
||||||
|
|
||||||
|
int maxX = baseX + Perspective.SCENE_SIZE;
|
||||||
|
int maxY = baseY + Perspective.SCENE_SIZE;
|
||||||
|
|
||||||
|
return x >= baseX && x < maxX && y >= baseY && y < maxY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInScene(Client client)
|
||||||
|
{
|
||||||
|
return client.getPlane() == plane && isInScene(client, x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a WorldPoint containing the passed LocalPoint
|
||||||
|
*/
|
||||||
|
public static WorldPoint fromLocal(Client client, LocalPoint local)
|
||||||
|
{
|
||||||
|
return fromLocal(client, local.getX(), local.getY(), client.getPlane());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a WorldPoint containing the passed local coordinates
|
||||||
|
*/
|
||||||
|
public static WorldPoint fromLocal(Client client, int x, int y, int plane)
|
||||||
|
{
|
||||||
|
return new WorldPoint(
|
||||||
|
(x >>> Perspective.LOCAL_COORD_BITS) + client.getBaseX(),
|
||||||
|
(y >>> Perspective.LOCAL_COORD_BITS) + client.getBaseY(),
|
||||||
|
plane
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the distance from this point to another point. Returns Integer.MAX_VALUE if other is on
|
||||||
|
* a different plane.
|
||||||
|
*
|
||||||
|
* @param other
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int distanceTo(WorldPoint other)
|
||||||
|
{
|
||||||
|
if (other.plane != plane)
|
||||||
|
{
|
||||||
|
return Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int) Math.hypot(getX() - other.getX(), getY() - other.getY());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the distance from this point to another point.
|
||||||
|
*
|
||||||
|
* @param other
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int distanceTo2D(WorldPoint other)
|
||||||
|
{
|
||||||
|
return (int) Math.hypot(getX() - other.getX(), getY() - other.getY());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a WorldPoint from the passed region coords
|
||||||
|
*/
|
||||||
|
public static WorldPoint fromRegion(Client client, int x, int y, int plane)
|
||||||
|
{
|
||||||
|
return new WorldPoint(
|
||||||
|
x + client.getBaseX(),
|
||||||
|
y + client.getBaseY(),
|
||||||
|
plane
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public Point toPoint()
|
public Point toPoint()
|
||||||
{
|
{
|
||||||
return new Point(X, Y);
|
return new Point(x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user