kourendlibrary: optimize NPC marking code
This commit is contained in:
@@ -37,6 +37,7 @@ import java.util.Set;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.NPC;
|
||||||
import net.runelite.api.Perspective;
|
import net.runelite.api.Perspective;
|
||||||
import static net.runelite.api.Perspective.getCanvasTilePoly;
|
import static net.runelite.api.Perspective.getCanvasTilePoly;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
@@ -212,21 +213,24 @@ class KourendLibraryOverlay extends Overlay
|
|||||||
LibraryCustomer customer = library.getCustomer();
|
LibraryCustomer customer = library.getCustomer();
|
||||||
if (customer != null)
|
if (customer != null)
|
||||||
{
|
{
|
||||||
client.getNpcs().stream()
|
for (NPC n : plugin.getNpcsToMark())
|
||||||
.filter(n -> n.getId() == customer.getId())
|
{
|
||||||
.forEach(n ->
|
if (n.getId() != customer.getId())
|
||||||
{
|
{
|
||||||
Book b = library.getCustomerBook();
|
continue;
|
||||||
boolean doesPlayerContainBook = b != null && plugin.doesPlayerContainBook(b);
|
}
|
||||||
LocalPoint local = n.getLocalLocation();
|
|
||||||
Polygon poly = getCanvasTilePoly(client, local);
|
Book b = library.getCustomerBook();
|
||||||
OverlayUtil.renderPolygon(g, poly, doesPlayerContainBook ? Color.GREEN : Color.WHITE);
|
boolean doesPlayerContainBook = plugin.doesPlayerContainBook(b);
|
||||||
Point screen = Perspective.localToCanvas(client, local, client.getPlane(), n.getLogicalHeight());
|
LocalPoint local = n.getLocalLocation();
|
||||||
if (screen != null)
|
Polygon poly = getCanvasTilePoly(client, local);
|
||||||
{
|
OverlayUtil.renderPolygon(g, poly, doesPlayerContainBook ? Color.GREEN : Color.WHITE);
|
||||||
g.drawImage(b.getIcon(), screen.getX() - (b.getIcon().getWidth() / 2), screen.getY() - b.getIcon().getHeight(), null);
|
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;
|
return null;
|
||||||
|
|||||||
@@ -27,10 +27,14 @@ package net.runelite.client.plugins.kourendlibrary;
|
|||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.AnimationID;
|
import net.runelite.api.AnimationID;
|
||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
@@ -39,10 +43,13 @@ import net.runelite.api.InventoryID;
|
|||||||
import net.runelite.api.Item;
|
import net.runelite.api.Item;
|
||||||
import net.runelite.api.ItemContainer;
|
import net.runelite.api.ItemContainer;
|
||||||
import net.runelite.api.MenuAction;
|
import net.runelite.api.MenuAction;
|
||||||
|
import net.runelite.api.NPC;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.api.events.AnimationChanged;
|
import net.runelite.api.events.AnimationChanged;
|
||||||
import net.runelite.api.events.ChatMessage;
|
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.client.events.ConfigChanged;
|
||||||
import net.runelite.api.events.GameTick;
|
import net.runelite.api.events.GameTick;
|
||||||
import net.runelite.api.events.ItemContainerChanged;
|
import net.runelite.api.events.ItemContainerChanged;
|
||||||
@@ -104,6 +111,9 @@ public class KourendLibraryPlugin extends Plugin
|
|||||||
private WorldPoint lastBookcaseAnimatedOn = null;
|
private WorldPoint lastBookcaseAnimatedOn = null;
|
||||||
private EnumSet<Book> playerBooks = null;
|
private EnumSet<Book> playerBooks = null;
|
||||||
|
|
||||||
|
@Getter(AccessLevel.PACKAGE)
|
||||||
|
private final Set<NPC> npcsToMark = new HashSet<>();
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
KourendLibraryConfig provideConfig(ConfigManager configManager)
|
KourendLibraryConfig provideConfig(ConfigManager configManager)
|
||||||
{
|
{
|
||||||
@@ -294,6 +304,21 @@ public class KourendLibraryPlugin extends Plugin
|
|||||||
updatePlayerBooks();
|
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)
|
boolean doesPlayerContainBook(Book book)
|
||||||
{
|
{
|
||||||
return playerBooks.contains(book);
|
return playerBooks.contains(book);
|
||||||
|
|||||||
Reference in New Issue
Block a user