Add WidgetItemOverlay

This simplifies the logic required for plugins to draw an overlay over an item.
This commit is contained in:
Adam
2019-04-10 19:16:37 -04:00
parent 6f117a16c1
commit 9b9aee3e2b
6 changed files with 145 additions and 18 deletions

View File

@@ -28,6 +28,7 @@ import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
@@ -108,6 +109,8 @@ import net.runelite.api.mixins.Shadow;
import net.runelite.api.vars.AccountType;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.api.widgets.WidgetItem;
import net.runelite.api.widgets.WidgetType;
import net.runelite.rs.api.RSChatLineBuffer;
import net.runelite.rs.api.RSClanMemberManager;
import net.runelite.rs.api.RSClient;
@@ -1324,8 +1327,11 @@ public abstract class RSClientMixin implements RSClient
@MethodHook("renderWidgetLayer")
@Inject
public static void renderWidgetLayer(Widget[] widgets, int parentId, int var2, int var3, int var4, int var5, int x, int y, int var8)
public static void renderWidgetLayer(Widget[] widgets, int parentId, int minX, int minY, int maxX, int maxY, int x, int y, int var8)
{
Callbacks callbacks = client.getCallbacks();
HashTable<WidgetNode> componentTable = client.getComponentTable();
for (Widget rlWidget : widgets)
{
RSWidget widget = (RSWidget) rlWidget;
@@ -1338,10 +1344,30 @@ public abstract class RSClientMixin implements RSClient
{
widget.setRenderParentId(parentId);
}
widget.setRenderX(x + widget.getRelativeX());
widget.setRenderY(y + widget.getRelativeY());
HashTable<WidgetNode> componentTable = client.getComponentTable();
final int renderX = x + widget.getRelativeX();
final int renderY = y + widget.getRelativeY();
widget.setRenderX(renderX);
widget.setRenderY(renderY);
final int widgetType = widget.getType();
if (widgetType == WidgetType.GRAPHIC && widget.getItemId() != -1)
{
if (renderX >= minX && renderX <= maxX && renderY >= minY && renderY <= maxY)
{
WidgetItem widgetItem = new WidgetItem(widget.getItemId(), widget.getItemQuantity(), -1, widget.getBounds());
callbacks.drawItem(widget.getItemId(), widgetItem);
}
}
else if (widgetType == WidgetType.INVENTORY)
{
Collection<WidgetItem> widgetItems = widget.getWidgetItems();
for (WidgetItem widgetItem : widgetItems)
{
callbacks.drawItem(widgetItem.getId(), widgetItem);
}
}
WidgetNode childNode = componentTable.get(widget.getId());
if (childNode != null)
{