kourendlibrary: optimize NPC marking code

This commit is contained in:
Hydrox6
2019-11-27 23:21:39 +00:00
committed by Adam
parent 0527abce81
commit 7734b1199e
2 changed files with 43 additions and 14 deletions

View File

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

View File

@@ -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<Book> playerBooks = null;
@Getter(AccessLevel.PACKAGE)
private final Set<NPC> 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);