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

View File

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

View File

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

View File

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

View File

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

View File

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