runelite-client: some work on widget overlays
can't figure out how to only render whats on screen and some positions are off, when others aren't
This commit is contained in:
@@ -176,6 +176,15 @@ public class Client
|
||||
return client.getBaseY();
|
||||
}
|
||||
|
||||
public Widget[][] getWidgets()
|
||||
{
|
||||
return Arrays.stream(client.getWidgets())
|
||||
.map(parent -> parent != null ? Arrays.stream(parent)
|
||||
.map(child -> child != null ? new Widget(this, child) : null)
|
||||
.toArray(Widget[]::new) : null
|
||||
).toArray(Widget[][]::new);
|
||||
}
|
||||
|
||||
public Widget getWidget(int groupId, int childId)
|
||||
{
|
||||
net.runelite.rs.api.Widget[][] widgets = client.getWidgets();
|
||||
@@ -204,6 +213,11 @@ public class Client
|
||||
return client.getWidgetPositionsY();
|
||||
}
|
||||
|
||||
public boolean[] getValidInterfaces()
|
||||
{
|
||||
return client.getValidInterfaces();
|
||||
}
|
||||
|
||||
public String[] getPlayerOptions()
|
||||
{
|
||||
return client.getPlayerOptions();
|
||||
|
||||
@@ -43,9 +43,8 @@ public class Region
|
||||
.map(tile1 -> Arrays.stream(tile1)
|
||||
.map(tile2 -> Arrays.stream(tile2)
|
||||
.map(tile3 -> new Tile(client, tile3))
|
||||
.toArray(i -> new Tile[i])
|
||||
)
|
||||
.toArray(i -> new Tile[i][])
|
||||
).toArray(i -> new Tile[i][][]);
|
||||
.toArray(Tile[]::new)
|
||||
).toArray(Tile[][]::new)
|
||||
).toArray(Tile[][][]::new);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,6 +45,16 @@ public class Widget
|
||||
this.widget = widget;
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return widget.getId();
|
||||
}
|
||||
|
||||
public int getType()
|
||||
{
|
||||
return widget.getType();
|
||||
}
|
||||
|
||||
public Widget getParent()
|
||||
{
|
||||
net.runelite.rs.api.Widget parent = widget.getParent();
|
||||
@@ -67,22 +77,45 @@ public class Widget
|
||||
return widget.getRelativeY();
|
||||
}
|
||||
|
||||
public String getText()
|
||||
{
|
||||
return widget.getText();
|
||||
}
|
||||
|
||||
public boolean isHidden()
|
||||
{
|
||||
return widget.isHidden();
|
||||
}
|
||||
|
||||
public Point getCanvasLocation()
|
||||
{
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
Widget cur;
|
||||
|
||||
int boundsIndex = widget.getBoundsIndex();
|
||||
if (boundsIndex != -1)
|
||||
for (cur = this; cur.getParent() != null; cur = cur.getParent())
|
||||
{
|
||||
int[] widgetBoundsWidth = client.getWidgetPositionsX();
|
||||
int[] widgetBoundsHeight = client.getWidgetPositionsY();
|
||||
|
||||
x += widgetBoundsWidth[boundsIndex];
|
||||
y += widgetBoundsHeight[boundsIndex];
|
||||
x += cur.getRelativeX();
|
||||
y += cur.getRelativeY();
|
||||
}
|
||||
|
||||
for (Widget cur = this; cur != null; cur = cur.getParent())
|
||||
// cur is now the root
|
||||
int[] widgetBoundsWidth = client.getWidgetPositionsX();
|
||||
int[] widgetBoundsHeight = client.getWidgetPositionsY();
|
||||
|
||||
int boundsIndex = cur.widget.getBoundsIndex();
|
||||
if (boundsIndex != -1)
|
||||
{
|
||||
x += widgetBoundsWidth[boundsIndex];
|
||||
y += widgetBoundsHeight[boundsIndex];
|
||||
|
||||
if (cur.getType() > 0)
|
||||
{
|
||||
x += cur.getRelativeX();
|
||||
y += cur.getRelativeY();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
x += cur.getRelativeX();
|
||||
y += cur.getRelativeY();
|
||||
@@ -101,6 +134,12 @@ public class Widget
|
||||
return widget.getHeight();
|
||||
}
|
||||
|
||||
public Rectangle getBounds()
|
||||
{
|
||||
Point canvasLocation = getCanvasLocation();
|
||||
return new Rectangle(canvasLocation.getX(), canvasLocation.getY(), getWidth(), getHeight());
|
||||
}
|
||||
|
||||
public Collection<WidgetItem> getWidgetItems()
|
||||
{
|
||||
int[] itemIds = widget.getItemIds();
|
||||
|
||||
@@ -56,6 +56,7 @@ public class DevTools extends Plugin
|
||||
private boolean toggleWalls;
|
||||
private boolean toggleDecor;
|
||||
private boolean toggleInventory;
|
||||
private boolean toggleWidgets;
|
||||
|
||||
private Font font;
|
||||
|
||||
@@ -145,6 +146,11 @@ public class DevTools extends Plugin
|
||||
toggleInventory = !toggleInventory;
|
||||
}
|
||||
|
||||
public void toggleWidgets()
|
||||
{
|
||||
toggleWidgets = !toggleWidgets;
|
||||
}
|
||||
|
||||
public boolean isTogglePlayers()
|
||||
{
|
||||
return togglePlayers;
|
||||
@@ -184,4 +190,9 @@ public class DevTools extends Plugin
|
||||
{
|
||||
return toggleInventory;
|
||||
}
|
||||
|
||||
public boolean isToggleWidgets()
|
||||
{
|
||||
return toggleWidgets;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +107,11 @@ public class DevToolsOverlay extends Overlay
|
||||
renderInventory(graphics);
|
||||
}
|
||||
|
||||
if (tools.isToggleWidgets())
|
||||
{
|
||||
renderWidgets(graphics);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -389,4 +394,45 @@ public class DevToolsOverlay extends Overlay
|
||||
}
|
||||
}
|
||||
|
||||
private void renderWidgets(Graphics2D graphics)
|
||||
{
|
||||
Widget[][] widgets = client.getWidgets();
|
||||
boolean[] validInterfaces = client.getValidInterfaces();
|
||||
|
||||
int idx = -1;
|
||||
|
||||
for (Widget[] children : widgets)
|
||||
{
|
||||
++idx;
|
||||
|
||||
if (!validInterfaces[idx])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (children == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Widget child : children)
|
||||
{
|
||||
if (child == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (child.getText() == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Rectangle rectangle = child.getBounds();
|
||||
//graphics.draw(rectangle);
|
||||
|
||||
graphics.drawString(child.getText(), (int) rectangle.getX(), (int) rectangle.getY());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ public class DevToolsPanel extends PluginPanel
|
||||
private JButton renderWallsBtn = new JButton();
|
||||
private JButton renderDecorBtn = new JButton();
|
||||
private JButton renderInventoryBtn = new JButton();
|
||||
private JButton renderWidgetsBtn = new JButton();
|
||||
|
||||
public DevToolsPanel(DevTools tools)
|
||||
{
|
||||
@@ -50,64 +51,80 @@ public class DevToolsPanel extends PluginPanel
|
||||
setVisible(true);
|
||||
|
||||
JPanel container = new JPanel();
|
||||
container.setLayout(new GridLayout(4, 2, 3, 3));
|
||||
container.setLayout(new GridLayout(5, 2, 3, 3));
|
||||
add(container);
|
||||
|
||||
renderPlayersBtn = new JButton("Players");
|
||||
renderPlayersBtn.addActionListener(e -> {
|
||||
renderPlayersBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderPlayersBtn);
|
||||
tools.togglePlayers();
|
||||
});
|
||||
container.add(renderPlayersBtn);
|
||||
|
||||
renderNpcsBtn = new JButton("NPCs");
|
||||
renderNpcsBtn.addActionListener(e -> {
|
||||
renderNpcsBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderNpcsBtn);
|
||||
tools.toggleNpcs();
|
||||
});
|
||||
container.add(renderNpcsBtn);
|
||||
|
||||
renderGroundItemsBtn = new JButton("Ground Items");
|
||||
renderGroundItemsBtn.addActionListener(e -> {
|
||||
renderGroundItemsBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderGroundItemsBtn);
|
||||
tools.toggleGroundItems();
|
||||
});
|
||||
container.add(renderGroundItemsBtn);
|
||||
|
||||
renderGroundObjectsBtn = new JButton("Ground Objects");
|
||||
renderGroundObjectsBtn.addActionListener(e -> {
|
||||
renderGroundObjectsBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderGroundObjectsBtn);
|
||||
tools.toggleGroundObjects();
|
||||
});
|
||||
container.add(renderGroundObjectsBtn);
|
||||
|
||||
renderGameObjectsBtn = new JButton("Game Objects");
|
||||
renderGameObjectsBtn.addActionListener(e -> {
|
||||
renderGameObjectsBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderGameObjectsBtn);
|
||||
tools.toggleGameObjects();
|
||||
});
|
||||
container.add(renderGameObjectsBtn);
|
||||
|
||||
renderWallsBtn = new JButton("Walls");
|
||||
renderWallsBtn.addActionListener(e -> {
|
||||
renderWallsBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderWallsBtn);
|
||||
tools.toggleWalls();
|
||||
});
|
||||
container.add(renderWallsBtn);
|
||||
|
||||
renderDecorBtn = new JButton("Decorations");
|
||||
renderDecorBtn.addActionListener(e -> {
|
||||
renderDecorBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderDecorBtn);
|
||||
tools.toggleDecor();
|
||||
});
|
||||
container.add(renderDecorBtn);
|
||||
|
||||
renderInventoryBtn = new JButton("Inventory");
|
||||
renderInventoryBtn.addActionListener(e -> {
|
||||
renderInventoryBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderInventoryBtn);
|
||||
tools.toggleInventory();
|
||||
});
|
||||
container.add(renderInventoryBtn);
|
||||
|
||||
renderWidgetsBtn = new JButton("Widgets");
|
||||
renderWidgetsBtn.addActionListener(e ->
|
||||
{
|
||||
highlightButton(renderWidgetsBtn);
|
||||
tools.toggleWidgets();
|
||||
});
|
||||
container.add(renderWidgetsBtn);
|
||||
}
|
||||
|
||||
private void highlightButton(JButton button)
|
||||
|
||||
Reference in New Issue
Block a user