client: Misc

This commit is contained in:
Owain van Brakel
2020-03-11 08:30:49 +01:00
parent b9e55b5f76
commit 38e57e6eeb
6 changed files with 410 additions and 0 deletions

View File

@@ -36,6 +36,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import static net.runelite.api.Constants.TILE_FLAG_BRIDGE;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.geometry.RectangleUnion;
import net.runelite.api.geometry.Shapes;
import net.runelite.api.geometry.SimplePolygon;
@@ -760,4 +761,119 @@ public class Perspective
return new Point(xOffset, yOffset);
}
/**
* Calculates a polygon line from 2 LocalPoints
*
* @param client the game client
* @param startLocation start location of the polygon
* @param endLocation end location of the polygon
* @return a {@link Polygon}
*/
private static Polygon linePoly(@Nonnull Client client, @Nonnull LocalPoint startLocation, @Nonnull LocalPoint endLocation)
{
LocalPoint startPoint = new LocalPoint(
startLocation.getX() - (LOCAL_TILE_SIZE / 2),
startLocation.getY() + (LOCAL_TILE_SIZE / 2));
LocalPoint endPoint = new LocalPoint(
endLocation.getX() - (LOCAL_TILE_SIZE / 2),
endLocation.getY() + (LOCAL_TILE_SIZE / 2));
int plane = client.getPlane();
Point p1 = Perspective.localToCanvas(client, startPoint, plane);
Point p2 = Perspective.localToCanvas(client, endPoint, plane);
if (p1 != null && p2 != null)
{
Polygon polygon = new Polygon();
polygon.addPoint(p1.getX(), p1.getY());
polygon.addPoint(p2.getX(), p2.getY());
return polygon;
}
return null;
}
/**
* Calculates a list of polygon lines with 2 Worldpoints
* Start location is the South-West WorldPoint, end location is the North-East WorldPoint
* @param client the game client
* @param startLocation start location of the polygon
* @param endLocation end location of the polygon
* @return a {@link List} of {@link Polygon}
*/
public static List<Polygon> getLinePolyList(@Nonnull Client client, @Nonnull WorldPoint startLocation, @Nonnull WorldPoint endLocation)
{
List<Polygon> pList = new ArrayList<>();
int sizeX = Math.abs(endLocation.getX() - startLocation.getX()) + 1;
int sizeY = Math.abs(endLocation.getY() - startLocation.getY()) + 1;
//HANDLE NORTH
for (int i = 0; i < sizeX; i++)
{
WorldPoint startPoint = new WorldPoint(startLocation.getX() + i, startLocation.getY() + sizeY - 1, startLocation.getPlane());
WorldPoint endPoint = new WorldPoint(startLocation.getX() + (i + 1), startLocation.getY() + sizeY - 1, startLocation.getPlane());
LocalPoint localPointStart = LocalPoint.fromWorld(client, startPoint);
LocalPoint localPointEnd = LocalPoint.fromWorld(client, endPoint);
if (localPointStart != null && localPointEnd != null)
{
Polygon p = linePoly(client, localPointStart, localPointEnd);
if (p != null)
{
pList.add(p);
}
}
}
//HANDLE SOUTH
for (int i = 0; i < sizeX; i++)
{
WorldPoint startPoint = new WorldPoint(startLocation.getX() + i, startLocation.getY() - 1, startLocation.getPlane());
WorldPoint endPoint = new WorldPoint(startLocation.getX() + (i + 1), startLocation.getY() - 1, startLocation.getPlane());
LocalPoint localPointStart = LocalPoint.fromWorld(client, startPoint);
LocalPoint localPointEnd = LocalPoint.fromWorld(client, endPoint);
if (localPointStart != null && localPointEnd != null)
{
Polygon p = linePoly(client, localPointStart, localPointEnd);
if (p != null)
{
pList.add(p);
}
}
}
//HANDLE WEST
for (int j = 0; j < sizeY; j++)
{
WorldPoint startPoint = new WorldPoint(startLocation.getX(), startLocation.getY() + (j - 1), startLocation.getPlane());
WorldPoint endPoint = new WorldPoint(startLocation.getX(), startLocation.getY() + j, startLocation.getPlane());
LocalPoint localPointStart = LocalPoint.fromWorld(client, startPoint);
LocalPoint localPointEnd = LocalPoint.fromWorld(client, endPoint);
if (localPointStart != null && localPointEnd != null)
{
Polygon p = linePoly(client, localPointStart, localPointEnd);
if (p != null)
{
pList.add(p);
}
}
}
//HANDLE EAST
for (int j = 0; j < sizeY; j++)
{
WorldPoint startPoint = new WorldPoint(startLocation.getX() + sizeX, startLocation.getY() + (j - 1), startLocation.getPlane());
WorldPoint endPoint = new WorldPoint(startLocation.getX() + sizeX, startLocation.getY() + j, startLocation.getPlane());
LocalPoint localPointStart = LocalPoint.fromWorld(client, startPoint);
LocalPoint localPointEnd = LocalPoint.fromWorld(client, endPoint);
if (localPointStart != null && localPointEnd != null)
{
Polygon p = linePoly(client, localPointStart, localPointEnd);
if (p != null)
{
pList.add(p);
}
}
}
return pList;
}
}

View File

@@ -405,6 +405,15 @@ public enum Varbits
*/
KINGDOM_FAVOR(72),
KINGDOM_COFFER(74),
KINGDOM_WORKERS_WOOD(81),
KINGDOM_WORKERS_HERBS(82),
KINGDOM_WORKERS_FISHING(83),
KINGDOM_WORKERS_MINING(84),
KINGDOM_WORKERS_FISH_COOKED_BUTTON(135), // 0 - Raw, 1 - Cooked
KINGDOM_WORKERS_HARDWOOD(2131),
KINGDOM_WORKERS_FARM(2132),
KINGDOM_WORKERS_HARDWOOD_BUTTON(2133), // 0 - Mahogany, 1 - Teak, 2 - Both
KINGDOM_WORKERS_HERBS_BUTTON(2134), // 0 - Herbs, 1 - Flax
/**
* The Hand in the Sand quest status

View File

@@ -730,6 +730,7 @@ public class WidgetID
static final int LIGHT_BOX = 1;
static final int LIGHT_BOX_WINDOW = 2;
static final int LIGHT_BULB_CONTAINER = 3;
static final int LIGHT_BOX_BUTTON_CONTAINER = 6;
static final int BUTTON_A = 8;
static final int BUTTON_B = 9;
static final int BUTTON_C = 10;

View File

@@ -443,6 +443,7 @@ public enum WidgetInfo
LIGHT_BOX(WidgetID.LIGHT_BOX_GROUP_ID, WidgetID.LightBox.LIGHT_BOX),
LIGHT_BOX_CONTENTS(WidgetID.LIGHT_BOX_GROUP_ID, WidgetID.LightBox.LIGHT_BULB_CONTAINER),
LIGHT_BOX_BUTTON_CONTAINER(WidgetID.LIGHT_BOX_GROUP_ID, WidgetID.LightBox.LIGHT_BOX_BUTTON_CONTAINER),
LIGHT_BOX_BUTTON_A(WidgetID.LIGHT_BOX_GROUP_ID, WidgetID.LightBox.BUTTON_A),
LIGHT_BOX_BUTTON_B(WidgetID.LIGHT_BOX_GROUP_ID, WidgetID.LightBox.BUTTON_B),
LIGHT_BOX_BUTTON_C(WidgetID.LIGHT_BOX_GROUP_ID, WidgetID.LightBox.BUTTON_C),