fix interface rendering (Thanks blue!)

This commit is contained in:
TheRealNull
2020-12-20 17:30:24 -05:00
parent 473fe2fa43
commit 4667a5a076

View File

@@ -30,6 +30,7 @@ import com.google.common.cache.CacheBuilder;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
@@ -243,6 +244,9 @@ public abstract class RSClientMixin implements RSClient
@Inject
private List<String> outdatedScripts = new ArrayList<>();
@Inject
private static ArrayList<WidgetItem> widgetItems = new ArrayList<>();
@Inject
@Override
public void setPrintMenuActions(boolean yes)
@@ -1523,7 +1527,7 @@ public abstract class RSClientMixin implements RSClient
@MethodHook("drawInterface")
@Inject
public static void renderWidgetLayer(Widget[] widgets, int parentId, int minX, int minY, int maxX, int maxY, int x, int y, int var8)
public static void preRenderWidgetLayer(Widget[] widgets, int parentId, int minX, int minY, int maxX, int maxY, int x, int y, int var8)
{
Callbacks callbacks = client.getCallbacks();
@SuppressWarnings("unchecked") HashTable<WidgetNode> componentTable = client.getComponentTable();
@@ -1546,23 +1550,6 @@ public abstract class RSClientMixin implements RSClient
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(), widget, null);
//TODO:IMPLEMENT
//callbacks.drawItem(widget.getItemId(), widgetItem);
}
}
else if (widgetType == WidgetType.INVENTORY)
{
List<WidgetItem> widgetItems = widget.getWidgetItems();
//TODO:IMPLEMENT
//callbacks.drawLayer(rlWidget, widgetItems);
}
WidgetNode childNode = componentTable.get(widget.getId());
if (childNode != null)
@@ -1586,6 +1573,87 @@ public abstract class RSClientMixin implements RSClient
}
}
@Inject
@MethodHook(value = "drawInterface", end = true)
public static void postRenderWidgetLayer(Widget[] widgets, int parentId, int minX, int minY, int maxX, int maxY, int x, int y, int var8)
{
Callbacks callbacks = client.getCallbacks();
int oldSize = widgetItems.size();
for (Widget rlWidget : widgets)
{
RSWidget widget = (RSWidget) rlWidget;
if (widget == null || widget.getRSParentId() != parentId || widget.isSelfHidden())
{
continue;
}
int type = widget.getType();
if (type == WidgetType.GRAPHIC && widget.getItemId() != -1)
{
final int renderX = x + widget.getRelativeX();
final int renderY = y + widget.getRelativeY();
if (renderX >= minX && renderX <= maxX && renderY >= minY && renderY <= maxY)
{
WidgetItem widgetItem = new WidgetItem(widget.getItemId(), widget.getItemQuantity(), -1, widget.getBounds(), widget, null);
widgetItems.add(widgetItem);
}
}
else if (type == WidgetType.INVENTORY)
{
widgetItems.addAll(widget.getWidgetItems());
}
}
List<WidgetItem> subList = Collections.emptyList();
if (oldSize < widgetItems.size())
{
if (oldSize > 0)
{
subList = widgetItems.subList(oldSize, widgetItems.size());
}
else
{
subList = widgetItems;
}
}
if (parentId == 0xabcdabcd)
{
widgetItems.clear();
}
else if (parentId != -1)
{
Widget widget = client.getWidget(parentId);
Widget[] children = widget.getChildren();
if (children == null || children == widgets)
{
callbacks.drawLayer(widget, subList);
}
}
else
{
int group = -1;
for (Widget widget : widgets)
{
if (widget != null)
{
group = WidgetInfo.TO_GROUP(widget.getId());
break;
}
}
if (group == -1)
{
return;
}
callbacks.drawInterface(group, widgetItems);
widgetItems.clear();
}
}
@Inject
@Override
public RSTileItem getLastItemDespawn()