Add WidgetItemOverlay
This simplifies the logic required for plugins to draw an overlay over an item.
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user