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();
|
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)
|
public Widget getWidget(int groupId, int childId)
|
||||||
{
|
{
|
||||||
net.runelite.rs.api.Widget[][] widgets = client.getWidgets();
|
net.runelite.rs.api.Widget[][] widgets = client.getWidgets();
|
||||||
@@ -204,6 +213,11 @@ public class Client
|
|||||||
return client.getWidgetPositionsY();
|
return client.getWidgetPositionsY();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean[] getValidInterfaces()
|
||||||
|
{
|
||||||
|
return client.getValidInterfaces();
|
||||||
|
}
|
||||||
|
|
||||||
public String[] getPlayerOptions()
|
public String[] getPlayerOptions()
|
||||||
{
|
{
|
||||||
return client.getPlayerOptions();
|
return client.getPlayerOptions();
|
||||||
|
|||||||
@@ -43,9 +43,8 @@ public class Region
|
|||||||
.map(tile1 -> Arrays.stream(tile1)
|
.map(tile1 -> Arrays.stream(tile1)
|
||||||
.map(tile2 -> Arrays.stream(tile2)
|
.map(tile2 -> Arrays.stream(tile2)
|
||||||
.map(tile3 -> new Tile(client, tile3))
|
.map(tile3 -> new Tile(client, tile3))
|
||||||
.toArray(i -> new Tile[i])
|
.toArray(Tile[]::new)
|
||||||
)
|
).toArray(Tile[][]::new)
|
||||||
.toArray(i -> new Tile[i][])
|
).toArray(Tile[][][]::new);
|
||||||
).toArray(i -> new Tile[i][][]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,16 @@ public class Widget
|
|||||||
this.widget = widget;
|
this.widget = widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getId()
|
||||||
|
{
|
||||||
|
return widget.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getType()
|
||||||
|
{
|
||||||
|
return widget.getType();
|
||||||
|
}
|
||||||
|
|
||||||
public Widget getParent()
|
public Widget getParent()
|
||||||
{
|
{
|
||||||
net.runelite.rs.api.Widget parent = widget.getParent();
|
net.runelite.rs.api.Widget parent = widget.getParent();
|
||||||
@@ -67,22 +77,45 @@ public class Widget
|
|||||||
return widget.getRelativeY();
|
return widget.getRelativeY();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getText()
|
||||||
|
{
|
||||||
|
return widget.getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isHidden()
|
||||||
|
{
|
||||||
|
return widget.isHidden();
|
||||||
|
}
|
||||||
|
|
||||||
public Point getCanvasLocation()
|
public Point getCanvasLocation()
|
||||||
{
|
{
|
||||||
int x = 0;
|
int x = 0;
|
||||||
int y = 0;
|
int y = 0;
|
||||||
|
Widget cur;
|
||||||
|
|
||||||
int boundsIndex = widget.getBoundsIndex();
|
for (cur = this; cur.getParent() != null; cur = cur.getParent())
|
||||||
if (boundsIndex != -1)
|
|
||||||
{
|
{
|
||||||
int[] widgetBoundsWidth = client.getWidgetPositionsX();
|
x += cur.getRelativeX();
|
||||||
int[] widgetBoundsHeight = client.getWidgetPositionsY();
|
y += cur.getRelativeY();
|
||||||
|
|
||||||
x += widgetBoundsWidth[boundsIndex];
|
|
||||||
y += widgetBoundsHeight[boundsIndex];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
x += cur.getRelativeX();
|
||||||
y += cur.getRelativeY();
|
y += cur.getRelativeY();
|
||||||
@@ -101,6 +134,12 @@ public class Widget
|
|||||||
return widget.getHeight();
|
return widget.getHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Rectangle getBounds()
|
||||||
|
{
|
||||||
|
Point canvasLocation = getCanvasLocation();
|
||||||
|
return new Rectangle(canvasLocation.getX(), canvasLocation.getY(), getWidth(), getHeight());
|
||||||
|
}
|
||||||
|
|
||||||
public Collection<WidgetItem> getWidgetItems()
|
public Collection<WidgetItem> getWidgetItems()
|
||||||
{
|
{
|
||||||
int[] itemIds = widget.getItemIds();
|
int[] itemIds = widget.getItemIds();
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public class DevTools extends Plugin
|
|||||||
private boolean toggleWalls;
|
private boolean toggleWalls;
|
||||||
private boolean toggleDecor;
|
private boolean toggleDecor;
|
||||||
private boolean toggleInventory;
|
private boolean toggleInventory;
|
||||||
|
private boolean toggleWidgets;
|
||||||
|
|
||||||
private Font font;
|
private Font font;
|
||||||
|
|
||||||
@@ -145,6 +146,11 @@ public class DevTools extends Plugin
|
|||||||
toggleInventory = !toggleInventory;
|
toggleInventory = !toggleInventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void toggleWidgets()
|
||||||
|
{
|
||||||
|
toggleWidgets = !toggleWidgets;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isTogglePlayers()
|
public boolean isTogglePlayers()
|
||||||
{
|
{
|
||||||
return togglePlayers;
|
return togglePlayers;
|
||||||
@@ -184,4 +190,9 @@ public class DevTools extends Plugin
|
|||||||
{
|
{
|
||||||
return toggleInventory;
|
return toggleInventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isToggleWidgets()
|
||||||
|
{
|
||||||
|
return toggleWidgets;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,6 +107,11 @@ public class DevToolsOverlay extends Overlay
|
|||||||
renderInventory(graphics);
|
renderInventory(graphics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tools.isToggleWidgets())
|
||||||
|
{
|
||||||
|
renderWidgets(graphics);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
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 renderWallsBtn = new JButton();
|
||||||
private JButton renderDecorBtn = new JButton();
|
private JButton renderDecorBtn = new JButton();
|
||||||
private JButton renderInventoryBtn = new JButton();
|
private JButton renderInventoryBtn = new JButton();
|
||||||
|
private JButton renderWidgetsBtn = new JButton();
|
||||||
|
|
||||||
public DevToolsPanel(DevTools tools)
|
public DevToolsPanel(DevTools tools)
|
||||||
{
|
{
|
||||||
@@ -50,64 +51,80 @@ public class DevToolsPanel extends PluginPanel
|
|||||||
setVisible(true);
|
setVisible(true);
|
||||||
|
|
||||||
JPanel container = new JPanel();
|
JPanel container = new JPanel();
|
||||||
container.setLayout(new GridLayout(4, 2, 3, 3));
|
container.setLayout(new GridLayout(5, 2, 3, 3));
|
||||||
add(container);
|
add(container);
|
||||||
|
|
||||||
renderPlayersBtn = new JButton("Players");
|
renderPlayersBtn = new JButton("Players");
|
||||||
renderPlayersBtn.addActionListener(e -> {
|
renderPlayersBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
highlightButton(renderPlayersBtn);
|
highlightButton(renderPlayersBtn);
|
||||||
tools.togglePlayers();
|
tools.togglePlayers();
|
||||||
});
|
});
|
||||||
container.add(renderPlayersBtn);
|
container.add(renderPlayersBtn);
|
||||||
|
|
||||||
renderNpcsBtn = new JButton("NPCs");
|
renderNpcsBtn = new JButton("NPCs");
|
||||||
renderNpcsBtn.addActionListener(e -> {
|
renderNpcsBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
highlightButton(renderNpcsBtn);
|
highlightButton(renderNpcsBtn);
|
||||||
tools.toggleNpcs();
|
tools.toggleNpcs();
|
||||||
});
|
});
|
||||||
container.add(renderNpcsBtn);
|
container.add(renderNpcsBtn);
|
||||||
|
|
||||||
renderGroundItemsBtn = new JButton("Ground Items");
|
renderGroundItemsBtn = new JButton("Ground Items");
|
||||||
renderGroundItemsBtn.addActionListener(e -> {
|
renderGroundItemsBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
highlightButton(renderGroundItemsBtn);
|
highlightButton(renderGroundItemsBtn);
|
||||||
tools.toggleGroundItems();
|
tools.toggleGroundItems();
|
||||||
});
|
});
|
||||||
container.add(renderGroundItemsBtn);
|
container.add(renderGroundItemsBtn);
|
||||||
|
|
||||||
renderGroundObjectsBtn = new JButton("Ground Objects");
|
renderGroundObjectsBtn = new JButton("Ground Objects");
|
||||||
renderGroundObjectsBtn.addActionListener(e -> {
|
renderGroundObjectsBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
highlightButton(renderGroundObjectsBtn);
|
highlightButton(renderGroundObjectsBtn);
|
||||||
tools.toggleGroundObjects();
|
tools.toggleGroundObjects();
|
||||||
});
|
});
|
||||||
container.add(renderGroundObjectsBtn);
|
container.add(renderGroundObjectsBtn);
|
||||||
|
|
||||||
renderGameObjectsBtn = new JButton("Game Objects");
|
renderGameObjectsBtn = new JButton("Game Objects");
|
||||||
renderGameObjectsBtn.addActionListener(e -> {
|
renderGameObjectsBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
highlightButton(renderGameObjectsBtn);
|
highlightButton(renderGameObjectsBtn);
|
||||||
tools.toggleGameObjects();
|
tools.toggleGameObjects();
|
||||||
});
|
});
|
||||||
container.add(renderGameObjectsBtn);
|
container.add(renderGameObjectsBtn);
|
||||||
|
|
||||||
renderWallsBtn = new JButton("Walls");
|
renderWallsBtn = new JButton("Walls");
|
||||||
renderWallsBtn.addActionListener(e -> {
|
renderWallsBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
highlightButton(renderWallsBtn);
|
highlightButton(renderWallsBtn);
|
||||||
tools.toggleWalls();
|
tools.toggleWalls();
|
||||||
});
|
});
|
||||||
container.add(renderWallsBtn);
|
container.add(renderWallsBtn);
|
||||||
|
|
||||||
renderDecorBtn = new JButton("Decorations");
|
renderDecorBtn = new JButton("Decorations");
|
||||||
renderDecorBtn.addActionListener(e -> {
|
renderDecorBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
highlightButton(renderDecorBtn);
|
highlightButton(renderDecorBtn);
|
||||||
tools.toggleDecor();
|
tools.toggleDecor();
|
||||||
});
|
});
|
||||||
container.add(renderDecorBtn);
|
container.add(renderDecorBtn);
|
||||||
|
|
||||||
renderInventoryBtn = new JButton("Inventory");
|
renderInventoryBtn = new JButton("Inventory");
|
||||||
renderInventoryBtn.addActionListener(e -> {
|
renderInventoryBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
highlightButton(renderInventoryBtn);
|
highlightButton(renderInventoryBtn);
|
||||||
tools.toggleInventory();
|
tools.toggleInventory();
|
||||||
});
|
});
|
||||||
container.add(renderInventoryBtn);
|
container.add(renderInventoryBtn);
|
||||||
|
|
||||||
|
renderWidgetsBtn = new JButton("Widgets");
|
||||||
|
renderWidgetsBtn.addActionListener(e ->
|
||||||
|
{
|
||||||
|
highlightButton(renderWidgetsBtn);
|
||||||
|
tools.toggleWidgets();
|
||||||
|
});
|
||||||
|
container.add(renderWidgetsBtn);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void highlightButton(JButton button)
|
private void highlightButton(JButton button)
|
||||||
|
|||||||
Reference in New Issue
Block a user