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:
Adam
2017-04-20 19:44:37 -04:00
parent 57d93b5801
commit 79bd48f2ce
6 changed files with 147 additions and 21 deletions

View File

@@ -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();

View File

@@ -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][][]);
} }
} }

View File

@@ -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();

View File

@@ -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;
}
} }

View File

@@ -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());
}
}
}
} }

View File

@@ -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)