kourendlibrary: optimize NPC marking code
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user