Use npc indices to iterate local npcs

This commit is contained in:
Adam
2017-10-17 10:38:41 -04:00
parent c3e8cc0131
commit 10a494a2b7
6 changed files with 34 additions and 26 deletions

View File

@@ -25,6 +25,7 @@
package net.runelite.api; package net.runelite.api;
import java.awt.Canvas; import java.awt.Canvas;
import java.util.List;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetInfo;
@@ -35,9 +36,7 @@ public interface Client
Player[] getCachedPlayers(); Player[] getCachedPlayers();
NPC getNpc(int idx); List<NPC> getNpcs();
NPC[] getCachedNPCs();
int getBoostedSkillLevel(Skill skill); int getBoostedSkillLevel(Skill skill);

View File

@@ -27,16 +27,13 @@ package net.runelite.api.queries;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.NPC; import net.runelite.api.NPC;
import java.util.Arrays;
import java.util.Objects;
public class NPCQuery extends ActorQuery<NPC, NPCQuery> public class NPCQuery extends ActorQuery<NPC, NPCQuery>
{ {
@Override @Override
public NPC[] result(Client client) public NPC[] result(Client client)
{ {
return Arrays.stream(client.getCachedNPCs()) return client.getNpcs().stream()
.filter(Objects::nonNull)
.filter(predicate) .filter(predicate)
.toArray(NPC[]::new); .toArray(NPC[]::new);
} }

View File

@@ -34,6 +34,7 @@ import java.awt.Polygon;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.util.List;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.DecorativeObject; import net.runelite.api.DecorativeObject;
import net.runelite.api.GameObject; import net.runelite.api.GameObject;
@@ -148,23 +149,17 @@ public class DevToolsOverlay extends Overlay
private void renderNpcs(Graphics2D graphics) private void renderNpcs(Graphics2D graphics)
{ {
NPC[] npcs = client.getCachedNPCs(); List<NPC> npcs = client.getNpcs();
if (npcs != null && (npcs.length - 1) > 0) for (NPC npc : npcs)
{ {
for (NPC npc : npcs) String text = npc.getName() + " (ID: " + npc.getId() + ") (A: " + npc.getAnimation() + ") (G: " + npc.getGraphic() + ")";
if (npc.getCombatLevel() > 1)
{ {
if (npc != null) OverlayUtil.renderActorOverlay(graphics, npc, text, YELLOW);
{ }
String text = npc.getName() + " (ID: " + npc.getId() + ") (A: " + npc.getAnimation() + ") (G: " + npc.getGraphic() + ")"; else
if (npc.getCombatLevel() > 1) {
{ OverlayUtil.renderActorOverlay(graphics, npc, text, ORANGE);
OverlayUtil.renderActorOverlay(graphics, npc, text, YELLOW);
}
else
{
OverlayUtil.renderActorOverlay(graphics, npc, text, ORANGE);
}
}
} }
} }
} }

View File

@@ -28,6 +28,7 @@ import java.awt.Graphics2D;
import java.awt.Polygon; import java.awt.Polygon;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import net.runelite.api.Actor; import net.runelite.api.Actor;
import net.runelite.api.NPC;
import net.runelite.api.Perspective; import net.runelite.api.Perspective;
import net.runelite.api.Point; import net.runelite.api.Point;
import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Inject;
@@ -59,7 +60,8 @@ public abstract class RSActorMixin implements RSActor
if (i < 0x8000) if (i < 0x8000)
{ {
return client.getNpc(i); NPC[] npcs = client.getCachedNPCs();
return npcs[i];
} }
i -= 0x8000; i -= 0x8000;

View File

@@ -52,9 +52,19 @@ public abstract class RSClientMixin implements RSClient
@Inject @Inject
@Override @Override
public NPC getNpc(int idx) public List<NPC> getNpcs()
{ {
return getCachedNPCs()[idx]; int validNpcIndexes = getNpcIndexesCount();
int[] npcIndexes = getNpcIndices();
NPC[] cachedNpcs = getCachedNPCs();
List<NPC> npcs = new ArrayList<NPC>(validNpcIndexes);
for (int i = 0; i < validNpcIndexes; ++i)
{
npcs.add(cachedNpcs[npcIndexes[i]]);
}
return npcs;
} }
@Inject @Inject

View File

@@ -117,8 +117,13 @@ public interface RSClient extends RSGameEngine, Client
@Override @Override
RSPlayer getLocalPlayer(); RSPlayer getLocalPlayer();
@Import("npcIndexesCount")
int getNpcIndexesCount();
@Import("npcIndices")
int[] getNpcIndices();
@Import("cachedNPCs") @Import("cachedNPCs")
@Override
RSNPC[] getCachedNPCs(); RSNPC[] getCachedNPCs();
@Import("collisionMaps") @Import("collisionMaps")