From 7734b1199e817622bce22574472a62e0489b857a Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Wed, 27 Nov 2019 23:21:39 +0000 Subject: [PATCH] kourendlibrary: optimize NPC marking code --- .../kourendlibrary/KourendLibraryOverlay.java | 32 +++++++++++-------- .../kourendlibrary/KourendLibraryPlugin.java | 25 +++++++++++++++ 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryOverlay.java index d54fc448f5..b317d5d89c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryOverlay.java @@ -37,6 +37,7 @@ import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Nullable; import net.runelite.api.Client; +import net.runelite.api.NPC; import net.runelite.api.Perspective; import static net.runelite.api.Perspective.getCanvasTilePoly; import net.runelite.api.Player; @@ -212,21 +213,24 @@ class KourendLibraryOverlay extends Overlay LibraryCustomer customer = library.getCustomer(); if (customer != null) { - client.getNpcs().stream() - .filter(n -> n.getId() == customer.getId()) - .forEach(n -> + for (NPC n : plugin.getNpcsToMark()) + { + if (n.getId() != customer.getId()) { - Book b = library.getCustomerBook(); - boolean doesPlayerContainBook = b != null && plugin.doesPlayerContainBook(b); - LocalPoint local = n.getLocalLocation(); - Polygon poly = getCanvasTilePoly(client, local); - OverlayUtil.renderPolygon(g, poly, doesPlayerContainBook ? Color.GREEN : Color.WHITE); - Point screen = Perspective.localToCanvas(client, local, client.getPlane(), n.getLogicalHeight()); - if (screen != null) - { - g.drawImage(b.getIcon(), screen.getX() - (b.getIcon().getWidth() / 2), screen.getY() - b.getIcon().getHeight(), null); - } - }); + continue; + } + + Book b = library.getCustomerBook(); + boolean doesPlayerContainBook = plugin.doesPlayerContainBook(b); + LocalPoint local = n.getLocalLocation(); + Polygon poly = getCanvasTilePoly(client, local); + OverlayUtil.renderPolygon(g, poly, doesPlayerContainBook ? Color.GREEN : Color.WHITE); + Point screen = Perspective.localToCanvas(client, local, client.getPlane(), n.getLogicalHeight()); + if (screen != null) + { + g.drawImage(b.getIcon(), screen.getX() - (b.getIcon().getWidth() / 2), screen.getY() - b.getIcon().getHeight(), null); + } + } } return null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java index 030b7d9252..cf2d5bca44 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java @@ -27,10 +27,14 @@ package net.runelite.client.plugins.kourendlibrary; import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.util.EnumSet; +import java.util.HashSet; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; import javax.swing.SwingUtilities; +import lombok.AccessLevel; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.AnimationID; import net.runelite.api.ChatMessageType; @@ -39,10 +43,13 @@ import net.runelite.api.InventoryID; import net.runelite.api.Item; import net.runelite.api.ItemContainer; import net.runelite.api.MenuAction; +import net.runelite.api.NPC; import net.runelite.api.Player; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.ChatMessage; +import net.runelite.api.events.NpcDespawned; +import net.runelite.api.events.NpcSpawned; import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; @@ -104,6 +111,9 @@ public class KourendLibraryPlugin extends Plugin private WorldPoint lastBookcaseAnimatedOn = null; private EnumSet playerBooks = null; + @Getter(AccessLevel.PACKAGE) + private final Set npcsToMark = new HashSet<>(); + @Provides KourendLibraryConfig provideConfig(ConfigManager configManager) { @@ -294,6 +304,21 @@ public class KourendLibraryPlugin extends Plugin updatePlayerBooks(); } + @Subscribe + public void onNpcSpawned(NpcSpawned event) + { + if (LibraryCustomer.getById(event.getNpc().getId()) != null) + { + npcsToMark.add(event.getNpc()); + } + } + + @Subscribe + public void onNpcDespawned(NpcDespawned event) + { + npcsToMark.remove(event.getNpc()); + } + boolean doesPlayerContainBook(Book book) { return playerBooks.contains(book);