Ah.. Should have checked the Snippets section yesterday when I needed this;
Anyway, I've made a similar implementation; I suppose people can choose what fits their needs
import java.util.ArrayList;
import java.util.List;
import org.osbot.script.mouse.RectangleDestination;
import org.osbot.script.rs2.Client;
import org.osbot.script.rs2.ui.Option;
/**
*
* @author FrostBug
*/
public class Menu {
private List<Option> options;
private List<String> strOptions;
private int x, y, width;
private Client client;
private static final int OPTION_HEIGHT = 15;
private static final int TOP_PADDING = 19;
private Menu(Client client) {
this.strOptions = new ArrayList<>();
this.options = client.getMenu();
this.x = client.getMenuX();
this.y = client.getMenuY();
this.width = client.getMenuWidth();
this.client = client;
for (Option o : options) {
strOptions.add(o.action);
}
}
public static Menu getActiveMenu(Client client) {
if (client.isMenuOpen()) {
return new Menu(client);
} else {
return null;
}
}
public boolean hasOption(String action) {
return strOptions.contains(action);
}
private RectangleDestination getDestinationRect(int index) {
return new RectangleDestination(x + 4, y + TOP_PADDING + (index * OPTION_HEIGHT), width - 8, OPTION_HEIGHT);
}
public boolean moveMouseToOption(String action, boolean click) throws InterruptedException {
int index = strOptions.indexOf(action);
boolean success;
if (index > -1 && client.isMenuOpen()) {
RectangleDestination rect = getDestinationRect(index);
success = client.moveMouse(rect, false);
if (click && success) {
client.clickMouse(false);
}
}
return success;
}
public boolean isMouseOnOption(String action) {
RectangleDestination rect = getDestinationRect(strOptions.indexOf(action));
return client.isMenuOpen() && rect.destinationReached(client.getMousePosition());
}
}