From 9ce3852863421a9a3da8436f17e1001285a57be1 Mon Sep 17 00:00:00 2001 From: Kyle Fricilone Date: Fri, 9 Jun 2017 22:26:03 -0400 Subject: [PATCH] runelite-client: update pc plugin for widget changes, and cleanup --- .../net/runelite/api/widgets/WidgetID.java | 35 ++++--- .../net/runelite/api/widgets/WidgetInfo.java | 7 +- .../pestcontrol/PestControlOverlay.java | 93 ++++++++----------- 3 files changed, 66 insertions(+), 69 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index 5d15e45870..a4fca7769e 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -30,23 +30,27 @@ class WidgetID static final int INVENTORY_GROUP_ID = 149; static final int PESTRCONTROL_GROUP_ID = 408; static final int CLAN_CHAT_GROUP_ID = 7; + static final int MINIMAP_GROUP_ID = 160; static class PestControl { - static final int PURPLE_SHIELD = 18; - static final int BLUE_SHIELD = 20; - static final int YELLOW_SHIELD = 22; - static final int RED_SHIELD = 24; + static final int PURPLE_SHIELD = 21; + static final int BLUE_SHIELD = 23; + static final int YELLOW_SHIELD = 25; + static final int RED_SHIELD = 27; - static final int PURPLE_HEALTH = 14; - static final int BLUE_HEALTH = 15; - static final int YELLOW_HEALTH = 16; - static final int RED_HEALTH = 17; + static final int PURPLE_HEALTH = 17; + static final int BLUE_HEALTH = 18; + static final int YELLOW_HEALTH = 19; + static final int RED_HEALTH = 20; - static final int PURPLE_ICON = 10; - static final int BLUE_ICON = 11; - static final int YELLOW_ICON = 12; - static final int RED_ICON = 13; + static final int PURPLE_ICON = 13; + static final int BLUE_ICON = 14; + static final int YELLOW_ICON = 15; + static final int RED_ICON = 16; + + static final int ACTIVITY_BAR = 6; + static final int ACTIVITY_PROGRESS = 8; } static class ClanChat @@ -56,8 +60,13 @@ class WidgetID static final int OWNER = 5; } - public static class Bank + static class Bank { static final int ITEM_CONTAINER = 12; } + + static class Minimap + { + static final int XP_ORB = 1; + } } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index bc14e93284..9291e1ed8e 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -40,12 +40,17 @@ public enum WidgetInfo PESTCONTROL_BLUE_ICON(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.BLUE_ICON), PESTCONTROL_YELLOW_ICON(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.YELLOW_ICON), PESTCONTROL_RED_ICON(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.RED_ICON), + PESTCONTROL_ACTIVITY_BAR(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.ACTIVITY_BAR), + PESTCONTROL_ACTIVITY_PROGRESS(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.ACTIVITY_PROGRESS), CLAN_CHAT_TITLE(WidgetID.CLAN_CHAT_GROUP_ID, WidgetID.ClanChat.TITLE), CLAN_CHAT_NAME(WidgetID.CLAN_CHAT_GROUP_ID, WidgetID.ClanChat.NAME), CLAN_CHAT_OWNER(WidgetID.CLAN_CHAT_GROUP_ID, WidgetID.ClanChat.OWNER), - BANK_ITEM_CONTAINER(WidgetID.BANK_GROUP_ID, WidgetID.Bank.ITEM_CONTAINER); + BANK_ITEM_CONTAINER(WidgetID.BANK_GROUP_ID, WidgetID.Bank.ITEM_CONTAINER), + + MINIMAP_XP_ORG(WidgetID.MINIMAP_GROUP_ID, WidgetID.Minimap.XP_ORB); + private final int groupId; private final int childId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java index 14421fefb4..772a4d4c63 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java @@ -25,19 +25,18 @@ */ package net.runelite.client.plugins.pestcontrol; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; -import java.awt.Polygon; import java.awt.geom.Rectangle2D; -import net.runelite.api.Actor; +import java.util.Arrays; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.NPC; -import net.runelite.api.Point; +import net.runelite.api.Query; +import net.runelite.api.queries.NPCQuery; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.RuneLite; @@ -47,6 +46,7 @@ import static net.runelite.client.plugins.pestcontrol.Portal.RED; import static net.runelite.client.plugins.pestcontrol.Portal.YELLOW; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.OverlayUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -106,26 +106,9 @@ public class PestControlOverlay extends Overlay private void renderSpinners(Graphics2D graphics) { - NPC[] npcs = client.getNpcs(); - if (npcs == null) - { - return; - } - - for (NPC npc : npcs) - { - if (npc == null) - { - continue; - } - - String name = npc.getName(); - - if (name.toLowerCase().contains("spinner")) - { - renderActorOverlay(graphics, npc, name, Color.CYAN); - } - } + Query query = new NPCQuery().nameEquals("Spinner"); + NPC[] result = client.runQuery(query); + Arrays.stream(result).forEach(npc -> OverlayUtil.renderActorOverlay(graphics, npc, npc.getName(), Color.CYAN)); } private void renderPortalWidgets(Graphics2D graphics) @@ -197,58 +180,58 @@ public class PestControlOverlay extends Overlay { renderWidgetOverlay(graphics, portal, "NEXT", Color.ORANGE); } + + renderProgressWidget(graphics); } - private void renderActorOverlay(Graphics2D graphics, Actor actor, String text, Color color) + private void renderProgressWidget(Graphics2D graphics) { - Polygon poly = actor.getCanvasTilePoly(); - if (poly != null) + Widget bar = client.getWidget(WidgetInfo.PESTCONTROL_ACTIVITY_BAR).getChild(0); + Rectangle2D bounds = bar.getBounds().getBounds2D(); + + Widget prgs = client.getWidget(WidgetInfo.PESTCONTROL_ACTIVITY_PROGRESS).getChild(0); + int perc = (int) ((prgs.getBounds().getWidth() / bounds.getWidth()) * 100); + + Color color = Color.GREEN; + if (perc < 25) { - graphics.setColor(color); - graphics.setStroke(new BasicStroke(2)); - graphics.drawPolygon(poly); - graphics.setColor(new Color(0, 0, 0, 50)); - graphics.fillPolygon(poly); + color = Color.RED; } - Point minimapLocation = actor.getMinimapLocation(); - if (minimapLocation != null) - { - graphics.setColor(color); - graphics.fillOval(minimapLocation.getX(), minimapLocation.getY(), 5, 5); - graphics.setColor(Color.WHITE); - graphics.setStroke(new BasicStroke(1)); - graphics.drawOval(minimapLocation.getX(), minimapLocation.getY(), 5, 5); - } + String text = String.valueOf(perc) + "%"; - Point textLocation = actor.getCanvasTextLocation(graphics, text, actor.getModelHeight() + 40); - if (textLocation != null) - { - int x = textLocation.getX(); - int y = textLocation.getY(); + FontMetrics fm = graphics.getFontMetrics(); + Rectangle2D textBounds = fm.getStringBounds(text, graphics); + int x = (int) (bounds.getX() - textBounds.getWidth()); + int y = (int) (bounds.getY() + fm.getHeight() - 2); - graphics.setColor(Color.BLACK); - graphics.drawString(text, x + 1, y + 1); - - graphics.setColor(color); - graphics.drawString(text, x, y); - } + graphics.setColor(Color.BLACK); + graphics.drawString(text, x + 1, y + 1); + graphics.setColor(color); + graphics.drawString(text, x, y); } private void renderWidgetOverlay(Graphics2D graphics, Portal portal, String text, Color color) { Widget shield = client.getWidget(portal.getShield()); Widget icon = client.getWidget(portal.getIcon()); + Widget hp = client.getWidget(portal.getHitpoints()); + + Widget bar = client.getWidget(WidgetInfo.PESTCONTROL_ACTIVITY_BAR).getChild(0); + + Rectangle2D barBounds = bar.getBounds().getBounds2D(); // create one rectangle from two different widget bounds Rectangle2D bounds = union(shield.getBounds().getBounds2D(), icon.getBounds().getBounds2D()); + bounds = union(bounds, hp.getBounds().getBounds2D()); + graphics.setColor(color); - graphics.draw(bounds); + graphics.draw(new Rectangle2D.Double(bounds.getX(), bounds.getY() - 2, bounds.getWidth(), bounds.getHeight() - 3)); FontMetrics fm = graphics.getFontMetrics(); Rectangle2D textBounds = fm.getStringBounds(text, graphics); int x = (int) (bounds.getX() + (bounds.getWidth() / 2) - (textBounds.getWidth() / 2)); - int y = (int) (bounds.getY() + bounds.getHeight() + textBounds.getHeight()); + int y = (int) (bounds.getY() + bounds.getHeight() + textBounds.getHeight() + barBounds.getHeight()); graphics.setColor(Color.BLACK); graphics.drawString(text, x + 1, y + 1); @@ -283,4 +266,4 @@ public class PestControlOverlay extends Overlay { return widget.getText().trim().equals("0"); } -} +} \ No newline at end of file