project: Update mixins
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Shape;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.Perspective;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.geometry.Shapes;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
@@ -86,6 +86,11 @@ public abstract class RSBoundaryObjectMixin implements RSBoundaryObject
|
||||
return null;
|
||||
}
|
||||
|
||||
if (clickboxA != null && clickboxB != null)
|
||||
{
|
||||
return new Shapes(new Shape[]{clickboxA, clickboxB});
|
||||
}
|
||||
|
||||
if (clickboxA != null)
|
||||
{
|
||||
return clickboxA;
|
||||
@@ -94,11 +99,9 @@ public abstract class RSBoundaryObjectMixin implements RSBoundaryObject
|
||||
return clickboxB;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Polygon getConvexHull()
|
||||
public Shape getConvexHull()
|
||||
{
|
||||
RSModel model = getModelA();
|
||||
|
||||
@@ -108,6 +111,23 @@ public abstract class RSBoundaryObjectMixin implements RSBoundaryObject
|
||||
}
|
||||
|
||||
int tileHeight = Perspective.getTileHeight(client, new LocalPoint(getX(), getY()), client.getPlane());
|
||||
|
||||
return model.getConvexHull(getX(), getY(), 0, tileHeight);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Shape getConvexHull2()
|
||||
{
|
||||
RSModel model = getModelB();
|
||||
|
||||
if (model == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
int tileHeight = Perspective.getTileHeight(client, new LocalPoint(getX(), getY()), client.getPlane());
|
||||
|
||||
return model.getConvexHull(getX(), getY(), 0, tileHeight);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ import net.runelite.api.HintArrowType;
|
||||
import net.runelite.api.Ignore;
|
||||
import net.runelite.api.IndexDataBase;
|
||||
import net.runelite.api.IndexedSprite;
|
||||
import net.runelite.api.IntegerNode;
|
||||
import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.MenuOpcode;
|
||||
@@ -111,6 +112,7 @@ import net.runelite.api.mixins.Replace;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.api.vars.AccountType;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetConfig;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.api.widgets.WidgetItem;
|
||||
import net.runelite.api.widgets.WidgetType;
|
||||
@@ -215,6 +217,9 @@ public abstract class RSClientMixin implements RSClient
|
||||
@Inject
|
||||
private static boolean hideClanmateCastOptions = false;
|
||||
|
||||
@Inject
|
||||
private static boolean allWidgetsAreOpTargetable = false;
|
||||
|
||||
@Inject
|
||||
private static Set<String> unhiddenCasts = new HashSet<String>();
|
||||
|
||||
@@ -260,6 +265,13 @@ public abstract class RSClientMixin implements RSClient
|
||||
hideClanmateCastOptions = yes;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setAllWidgetsAreOpTargetable(boolean yes)
|
||||
{
|
||||
allWidgetsAreOpTargetable = yes;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setUnhiddenCasts(Set<String> casts)
|
||||
@@ -1820,4 +1832,28 @@ public abstract class RSClientMixin implements RSClient
|
||||
client.getCallbacks().post(VolumeChanged.class, volumeChanged);
|
||||
}
|
||||
}
|
||||
|
||||
@Replace("getWidgetClickMask")
|
||||
public static int getWidgetClickMask(Widget widget)
|
||||
{
|
||||
IntegerNode integerNode = (IntegerNode) client.getWidgetFlags().get(((long) widget.getId() << 32) + (long) widget.getIndex());
|
||||
|
||||
int widgetClickMask;
|
||||
|
||||
if (integerNode == null)
|
||||
{
|
||||
widgetClickMask = widget.getClickMask();
|
||||
}
|
||||
else
|
||||
{
|
||||
widgetClickMask = integerNode.getValue();
|
||||
}
|
||||
|
||||
if (allWidgetsAreOpTargetable)
|
||||
{
|
||||
widgetClickMask |= WidgetConfig.WIDGET_USE_TARGET;
|
||||
}
|
||||
|
||||
return widgetClickMask;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Shape;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.Perspective;
|
||||
@@ -60,7 +59,7 @@ public abstract class RSFloorDecorationMixin implements RSFloorDecoration
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Polygon getConvexHull()
|
||||
public Shape getConvexHull()
|
||||
{
|
||||
RSModel model = getModel();
|
||||
|
||||
@@ -70,6 +69,7 @@ public abstract class RSFloorDecorationMixin implements RSFloorDecoration
|
||||
}
|
||||
|
||||
int tileHeight = Perspective.getTileHeight(client, new LocalPoint(getX(), getY()), client.getPlane());
|
||||
|
||||
return model.getConvexHull(getX(), getY(), 0, tileHeight);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Shape;
|
||||
import net.runelite.api.Perspective;
|
||||
import net.runelite.api.Point;
|
||||
@@ -87,7 +86,7 @@ public abstract class RSGameObjectMixin implements RSGameObject
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Polygon getConvexHull()
|
||||
public Shape getConvexHull()
|
||||
{
|
||||
RSModel model = getModel();
|
||||
|
||||
@@ -97,6 +96,7 @@ public abstract class RSGameObjectMixin implements RSGameObject
|
||||
}
|
||||
|
||||
int tileHeight = Perspective.getTileHeight(client, new LocalPoint(getX(), getY()), client.getPlane());
|
||||
|
||||
return model.getConvexHull(getX(), getY(), getRsOrientation(), tileHeight);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,13 +24,11 @@
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import net.runelite.api.InventoryID;
|
||||
import net.runelite.api.Item;
|
||||
import net.runelite.api.events.ItemContainerChanged;
|
||||
import net.runelite.api.mixins.Copy;
|
||||
import net.runelite.api.mixins.FieldHook;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Replace;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSItemContainer;
|
||||
@@ -41,11 +39,8 @@ public abstract class RSItemContainerMixin implements RSItemContainer
|
||||
@Shadow("client")
|
||||
private static RSClient client;
|
||||
|
||||
@Inject
|
||||
static private int rl$lastCycle;
|
||||
|
||||
@Inject
|
||||
static private int rl$lastContainer;
|
||||
@Shadow("changedItemContainers")
|
||||
private static int[] changedItemContainers;
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
@@ -67,35 +62,22 @@ public abstract class RSItemContainerMixin implements RSItemContainer
|
||||
return items;
|
||||
}
|
||||
|
||||
@Copy("itemContainerSetItem")
|
||||
static void rs$itemContainerSetItem(int itemContainerId, int index, int itemId, int itemQuantity)
|
||||
@FieldHook("changedItemContainers")
|
||||
@Inject
|
||||
public static void onItemContainerUpdate(int idx)
|
||||
{
|
||||
}
|
||||
|
||||
@Replace("itemContainerSetItem")
|
||||
static void rl$itemContainerSetItem(int itemContainerId, int index, int itemId, int itemQuantity)
|
||||
{
|
||||
rs$itemContainerSetItem(itemContainerId, index, itemId, itemQuantity);
|
||||
|
||||
int cycle = client.getGameCycle();
|
||||
|
||||
if (rl$lastCycle == cycle && rl$lastContainer == itemContainerId)
|
||||
if (idx != -1)
|
||||
{
|
||||
// Limit item container updates to one per cycle per container
|
||||
return;
|
||||
int changedId = idx - 1 & 31;
|
||||
int containerId = changedItemContainers[changedId];
|
||||
|
||||
RSItemContainer changedContainer = (RSItemContainer) client.getItemContainers().get(containerId);
|
||||
|
||||
if (changedContainer != null)
|
||||
{
|
||||
ItemContainerChanged event = new ItemContainerChanged(containerId, changedContainer);
|
||||
client.getCallbacks().postDeferred(ItemContainerChanged.class, event);
|
||||
}
|
||||
}
|
||||
|
||||
InventoryID container = InventoryID.getValue(itemContainerId);
|
||||
|
||||
if (container == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
rl$lastCycle = cycle;
|
||||
rl$lastContainer = itemContainerId;
|
||||
|
||||
ItemContainerChanged event = new ItemContainerChanged(itemContainerId, client.getItemContainer(container));
|
||||
client.getCallbacks().postDeferred(ItemContainerChanged.class, event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,12 +24,11 @@
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Shape;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.Perspective;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.mixins.Copy;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.MethodHook;
|
||||
@@ -140,7 +139,7 @@ public abstract class RSModelMixin implements RSModel
|
||||
int[] trianglesZ = getTrianglesZ();
|
||||
|
||||
List<Vertex> vertices = getVertices();
|
||||
List<Triangle> triangles = new ArrayList<Triangle>(getTrianglesCount());
|
||||
List<Triangle> triangles = new ArrayList<>(getTrianglesCount());
|
||||
|
||||
for (int i = 0; i < getTrianglesCount(); ++i)
|
||||
{
|
||||
@@ -321,49 +320,14 @@ public abstract class RSModelMixin implements RSModel
|
||||
|
||||
@Override
|
||||
@Inject
|
||||
public Polygon getConvexHull(int localX, int localY, int orientation, int tileHeight)
|
||||
public Shape getConvexHull(int localX, int localY, int orientation, int tileHeight)
|
||||
{
|
||||
assert client.isClientThread();
|
||||
int[] x2d = new int[this.getVerticesCount()];
|
||||
int[] y2d = new int[this.getVerticesCount()];
|
||||
|
||||
List<Vertex> vertices = getVertices();
|
||||
Perspective.modelToCanvas(client, this.getVerticesCount(), localX, localY, tileHeight, orientation, this.getVerticesX(), this.getVerticesZ(), this.getVerticesY(), x2d, y2d);
|
||||
|
||||
// rotate vertices
|
||||
for (int i = 0; i < vertices.size(); ++i)
|
||||
{
|
||||
Vertex v = vertices.get(i);
|
||||
vertices.set(i, v.rotate(orientation));
|
||||
}
|
||||
|
||||
List<Point> points = new ArrayList<Point>();
|
||||
|
||||
for (Vertex v : vertices)
|
||||
{
|
||||
// Compute canvas location of vertex
|
||||
Point p = Perspective.localToCanvas(client,
|
||||
localX - v.getX(),
|
||||
localY - v.getZ(),
|
||||
tileHeight + v.getY());
|
||||
if (p != null)
|
||||
{
|
||||
points.add(p);
|
||||
}
|
||||
}
|
||||
|
||||
// Run Jarvis march algorithm
|
||||
points = Jarvis.convexHull(points);
|
||||
if (points == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Convert to a polygon
|
||||
Polygon p = new Polygon();
|
||||
for (Point point : points)
|
||||
{
|
||||
p.addPoint(point.getX(), point.getY());
|
||||
}
|
||||
|
||||
return p;
|
||||
return Jarvis.convexHull(x2d, y2d);
|
||||
}
|
||||
|
||||
@Inject
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Shape;
|
||||
import net.runelite.api.AnimationID;
|
||||
import net.runelite.api.NPCDefinition;
|
||||
import net.runelite.api.Perspective;
|
||||
@@ -178,7 +178,7 @@ public abstract class RSNPCMixin implements RSNPC
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Polygon getConvexHull()
|
||||
public Shape getConvexHull()
|
||||
{
|
||||
RSModel model = getModel();
|
||||
if (model == null)
|
||||
@@ -192,6 +192,7 @@ public abstract class RSNPCMixin implements RSNPC
|
||||
size * Perspective.LOCAL_HALF_TILE_SIZE - Perspective.LOCAL_HALF_TILE_SIZE + getY());
|
||||
|
||||
int tileHeight = Perspective.getTileHeight(client, tileHeightPoint, client.getPlane());
|
||||
|
||||
return model.getConvexHull(getX(), getY(), getOrientation(), tileHeight);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Shape;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import net.runelite.api.HeadIcon;
|
||||
import static net.runelite.api.HeadIcon.MAGIC;
|
||||
import static net.runelite.api.HeadIcon.MELEE;
|
||||
@@ -36,7 +36,6 @@ import static net.runelite.api.HeadIcon.RETRIBUTION;
|
||||
import static net.runelite.api.HeadIcon.SMITE;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.Perspective;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.SkullIcon;
|
||||
import static net.runelite.api.SkullIcon.DEAD_MAN_FIVE;
|
||||
import static net.runelite.api.SkullIcon.DEAD_MAN_FOUR;
|
||||
@@ -52,8 +51,6 @@ import net.runelite.api.mixins.MethodHook;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Replace;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.api.model.Triangle;
|
||||
import net.runelite.api.model.Vertex;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSModel;
|
||||
import net.runelite.rs.api.RSPlayer;
|
||||
@@ -148,58 +145,42 @@ public abstract class RSPlayerMixin implements RSPlayer
|
||||
return null;
|
||||
}
|
||||
|
||||
int[] x2d = new int[model.getVerticesCount()];
|
||||
int[] y2d = new int[model.getVerticesCount()];
|
||||
|
||||
int localX = getX();
|
||||
int localY = getY();
|
||||
|
||||
int orientation = getOrientation();
|
||||
|
||||
final int tileHeight = Perspective.getTileHeight(client, new LocalPoint(localX, localY), client.getPlane());
|
||||
|
||||
List<Triangle> triangles = model.getTriangles();
|
||||
Perspective.modelToCanvas(client, model.getVerticesCount(), localX, localY, tileHeight, getOrientation(), model.getVerticesX(), model.getVerticesZ(), model.getVerticesY(), x2d, y2d);
|
||||
ArrayList polys = new ArrayList(model.getTrianglesCount());
|
||||
|
||||
triangles = rotate(triangles, orientation);
|
||||
int[] trianglesX = model.getTrianglesX();
|
||||
int[] trianglesY = model.getTrianglesY();
|
||||
int[] trianglesZ = model.getTrianglesZ();
|
||||
|
||||
List<Polygon> polys = new ArrayList<Polygon>();
|
||||
for (Triangle triangle : triangles)
|
||||
for (int triangle = 0; triangle < model.getTrianglesCount(); ++triangle)
|
||||
{
|
||||
Vertex vx = triangle.getA();
|
||||
Vertex vy = triangle.getB();
|
||||
Vertex vz = triangle.getC();
|
||||
|
||||
System.err.println("vx: " + vx.getX() + " localX: " + localX);
|
||||
|
||||
Point x = Perspective.localToCanvas(client,
|
||||
localX - vx.getX(),
|
||||
localY - vx.getZ(),
|
||||
tileHeight + vx.getY());
|
||||
|
||||
Point y = Perspective.localToCanvas(client,
|
||||
localX - vy.getX(),
|
||||
localY - vy.getZ(),
|
||||
tileHeight + vy.getY());
|
||||
|
||||
Point z = Perspective.localToCanvas(client,
|
||||
localX - vz.getX(),
|
||||
localY - vz.getZ(),
|
||||
tileHeight + vz.getY());
|
||||
|
||||
int[] xx =
|
||||
{
|
||||
x.getX(), y.getX(), z.getX()
|
||||
x2d[trianglesX[triangle]], x2d[trianglesY[triangle]], x2d[trianglesZ[triangle]]
|
||||
};
|
||||
|
||||
int[] yy =
|
||||
{
|
||||
x.getY(), y.getY(), z.getY()
|
||||
y2d[trianglesX[triangle]], y2d[trianglesY[triangle]], y2d[trianglesZ[triangle]]
|
||||
};
|
||||
|
||||
polys.add(new Polygon(xx, yy, 3));
|
||||
}
|
||||
|
||||
return polys.toArray(new Polygon[polys.size()]);
|
||||
return (Polygon[]) polys.toArray(new Polygon[0]);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Polygon getConvexHull()
|
||||
public Shape getConvexHull()
|
||||
{
|
||||
RSModel model = getModel();
|
||||
if (model == null)
|
||||
@@ -208,29 +189,10 @@ public abstract class RSPlayerMixin implements RSPlayer
|
||||
}
|
||||
|
||||
int tileHeight = Perspective.getTileHeight(client, new LocalPoint(getX(), getY()), client.getPlane());
|
||||
|
||||
return model.getConvexHull(getX(), getY(), getOrientation(), tileHeight);
|
||||
}
|
||||
|
||||
@Inject
|
||||
private List<Triangle> rotate(List<Triangle> triangles, int orientation)
|
||||
{
|
||||
List<Triangle> rotatedTriangles = new ArrayList<Triangle>();
|
||||
for (Triangle triangle : triangles)
|
||||
{
|
||||
Vertex a = triangle.getA();
|
||||
Vertex b = triangle.getB();
|
||||
Vertex c = triangle.getC();
|
||||
|
||||
Triangle rotatedTriangle = new Triangle(
|
||||
a.rotate(orientation),
|
||||
b.rotate(orientation),
|
||||
c.rotate(orientation)
|
||||
);
|
||||
rotatedTriangles.add(rotatedTriangle);
|
||||
}
|
||||
return rotatedTriangles;
|
||||
}
|
||||
|
||||
@Copy("getModel")
|
||||
public abstract RSModel rs$getModel();
|
||||
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Shape;
|
||||
import java.awt.geom.Area;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.Perspective;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.geometry.Shapes;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
@@ -89,9 +88,8 @@ public abstract class RSWallDecorationMixin implements RSWallDecoration
|
||||
@Override
|
||||
public Shape getClickbox()
|
||||
{
|
||||
Area clickbox = new Area();
|
||||
|
||||
LocalPoint lp = getLocalLocation();
|
||||
|
||||
Shape clickboxA = Perspective.getClickbox(client, getModel1(), 0,
|
||||
new LocalPoint(lp.getX() + getXOffset(), lp.getY() + getYOffset()));
|
||||
Shape clickboxB = Perspective.getClickbox(client, getModel2(), 0, lp);
|
||||
@@ -101,6 +99,11 @@ public abstract class RSWallDecorationMixin implements RSWallDecoration
|
||||
return null;
|
||||
}
|
||||
|
||||
if (clickboxA != null && clickboxB != null)
|
||||
{
|
||||
return new Shapes(new Shape[]{clickboxA, clickboxB});
|
||||
}
|
||||
|
||||
if (clickboxA != null)
|
||||
{
|
||||
return clickboxA;
|
||||
@@ -111,7 +114,7 @@ public abstract class RSWallDecorationMixin implements RSWallDecoration
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Polygon getConvexHull()
|
||||
public Shape getConvexHull()
|
||||
{
|
||||
RSModel model = getModel1();
|
||||
|
||||
@@ -121,12 +124,13 @@ public abstract class RSWallDecorationMixin implements RSWallDecoration
|
||||
}
|
||||
|
||||
int tileHeight = Perspective.getTileHeight(client, new LocalPoint(getX(), getY()), client.getPlane());
|
||||
|
||||
return model.getConvexHull(getX() + getXOffset(), getY() + getYOffset(), 0, tileHeight);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Polygon getConvexHull2()
|
||||
public Shape getConvexHull2()
|
||||
{
|
||||
RSModel model = getModel2();
|
||||
|
||||
@@ -136,6 +140,7 @@ public abstract class RSWallDecorationMixin implements RSWallDecoration
|
||||
}
|
||||
|
||||
int tileHeight = Perspective.getTileHeight(client, new LocalPoint(getX(), getY()), client.getPlane());
|
||||
|
||||
return model.getConvexHull(getX(), getY(), 0, tileHeight);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user