Use NpcCompositionChanged in NpcIndicatorsPlugin (#839)

This commit is contained in:
Owain van Brakel
2019-07-01 16:00:10 +02:00
committed by Kyleeld
parent 1a0ba0ff4a
commit d191db8a35
3 changed files with 93 additions and 50 deletions

View File

@@ -620,6 +620,11 @@ public class ModelOutlineRenderer
*/
private boolean projectVertices(Model model, final int localX, final int localY, final int localZ, final int vertexOrientation)
{
if (model == null)
{
return false;
}
final int cameraX = client.getCameraX();
final int cameraY = client.getCameraY();
final int cameraZ = client.getCameraZ();

View File

@@ -25,7 +25,9 @@
package net.runelite.client.plugins.npchighlight;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import lombok.Getter;
import lombok.Setter;
import net.runelite.api.NPC;
@@ -38,7 +40,7 @@ class MemorizedNpc
private int npcIndex;
@Getter
private String npcName;
private Set<String> npcNames;
@Getter
private int npcSize;
@@ -63,7 +65,8 @@ class MemorizedNpc
MemorizedNpc(NPC npc)
{
this.npcName = npc.getName();
this.npcNames = new HashSet<>();
this.npcNames.add(npc.getName());
this.npcIndex = npc.getIndex();
this.possibleRespawnLocations = new ArrayList<>();
this.respawnTime = -1;

View File

@@ -34,6 +34,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -58,6 +59,7 @@ import net.runelite.api.events.GameTick;
import net.runelite.api.events.GraphicsObjectCreated;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.MenuOptionClicked;
import net.runelite.api.events.NpcCompositionChanged;
import net.runelite.api.events.NpcDespawned;
import net.runelite.api.events.NpcSpawned;
import net.runelite.client.callback.ClientThread;
@@ -304,14 +306,15 @@ public class NpcIndicatorsPlugin extends Plugin
if (removed)
{
highlightedNpcs.remove(npc);
memorizedNpcs.remove(npc.getIndex());
MemorizedNpc mn = memorizedNpcs.get(npc.getIndex());
if (mn != null && isNpcMemorizationUnnecessary(mn))
{
memorizedNpcs.remove(npc.getIndex());
}
}
else
{
memorizeNpc(npc);
npcTags.add(id);
highlightedNpcs.add(npc);
}
click.consume();
@@ -320,30 +323,28 @@ public class NpcIndicatorsPlugin extends Plugin
@Subscribe
public void onNpcSpawned(NpcSpawned npcSpawned)
{
final NPC npc = npcSpawned.getNpc();
final String npcName = npc.getName();
NPC npc = npcSpawned.getNpc();
highlightNpcIfMatch(npc);
if (npcName == null)
if (memorizedNpcs.containsKey(npc.getIndex()))
{
return;
}
if (npcTags.contains(npc.getIndex()))
{
memorizeNpc(npc);
highlightedNpcs.add(npc);
spawnedNpcsThisTick.add(npc);
return;
}
}
for (String highlight : highlights)
@Subscribe
public void onNpcCompositionChanged(NpcCompositionChanged event)
{
NPC npc = event.getNpc();
highlightNpcIfMatch(npc);
MemorizedNpc mn = memorizedNpcs.get(npc.getIndex());
if (mn != null)
{
if (WildcardMatcher.matches(highlight, npcName))
String npcName = npc.getName();
if (npcName != null)
{
memorizeNpc(npc);
highlightedNpcs.add(npc);
spawnedNpcsThisTick.add(npc);
break;
mn.getNpcNames().add(npcName);
}
}
}
@@ -428,12 +429,59 @@ public class NpcIndicatorsPlugin extends Plugin
return new WorldPoint(currWP.getX() - dx, currWP.getY() - dy, currWP.getPlane());
}
private void highlightNpcIfMatch(final NPC npc)
{
if (npcTags.contains(npc.getIndex()))
{
memorizeNpc(npc);
highlightedNpcs.add(npc);
return;
}
final String npcName = npc.getName();
if (npcName != null)
{
for (String highlight : highlights)
{
if (WildcardMatcher.matches(highlight, npcName))
{
memorizeNpc(npc);
highlightedNpcs.add(npc);
return;
}
}
}
highlightedNpcs.remove(npc);
}
private void memorizeNpc(NPC npc)
{
final int npcIndex = npc.getIndex();
memorizedNpcs.putIfAbsent(npcIndex, new MemorizedNpc(npc));
}
private boolean isNpcMemorizationUnnecessary(final MemorizedNpc mn)
{
if (npcTags.contains(mn.getNpcIndex()))
{
return false;
}
for (String npcName : mn.getNpcNames())
{
for (String highlight : highlights)
{
if (WildcardMatcher.matches(highlight, npcName))
{
return false;
}
}
}
return true;
}
private void removeOldHighlightedRespawns()
{
deadNpcsToDisplay.values().removeIf(x -> x.getDiedOnTick() + x.getRespawnTime() <= client.getTickCount() + 1);
@@ -464,34 +512,21 @@ public class NpcIndicatorsPlugin extends Plugin
return;
}
outer:
Iterator<Map.Entry<Integer, MemorizedNpc>> it = memorizedNpcs.entrySet().iterator();
while (it.hasNext())
{
MemorizedNpc mn = it.next().getValue();
if (isNpcMemorizationUnnecessary(mn))
{
deadNpcsToDisplay.remove(mn.getNpcIndex());
it.remove();
}
}
for (NPC npc : client.getNpcs())
{
final String npcName = npc.getName();
if (npcName == null)
{
continue;
}
if (npcTags.contains(npc.getIndex()))
{
highlightedNpcs.add(npc);
continue;
}
for (String highlight : highlights)
{
if (WildcardMatcher.matches(highlight, npcName))
{
memorizeNpc(npc);
highlightedNpcs.add(npc);
continue outer;
}
}
// NPC is not highlighted
memorizedNpcs.remove(npc.getIndex());
highlightNpcIfMatch(npc);
}
}
@@ -524,7 +559,7 @@ public class NpcIndicatorsPlugin extends Plugin
if (!mn.getPossibleRespawnLocations().isEmpty())
{
log.debug("Starting {} tick countdown for {}", mn.getRespawnTime(), mn.getNpcName());
log.debug("Starting {} tick countdown for {}", mn.getRespawnTime(), mn.getNpcNames().iterator().next());
deadNpcsToDisplay.put(mn.getNpcIndex(), mn);
}
}