fishing plugin: don't render the same fishing spot twice

This commit is contained in:
Adam
2019-08-20 19:44:14 -04:00
parent bd8a31cc0b
commit 9fc04bf7e2
2 changed files with 27 additions and 1 deletions

View File

@@ -430,7 +430,21 @@ public class FishingPlugin extends Plugin
private void inverseSortSpotDistanceFromPlayer() private void inverseSortSpotDistanceFromPlayer()
{ {
if (fishingSpots.isEmpty())
{
return;
}
final LocalPoint cameraPoint = new LocalPoint(client.getCameraX(), client.getCameraY()); final LocalPoint cameraPoint = new LocalPoint(client.getCameraX(), client.getCameraY());
fishingSpots.sort(Comparator.comparing(npc -> -1 * npc.getLocalLocation().distanceTo(cameraPoint))); fishingSpots.sort(
Comparator.comparing(
// Negate to have the furthest first
(NPC npc) -> -npc.getLocalLocation().distanceTo(cameraPoint))
// Order by position
.thenComparing(NPC::getLocalLocation, Comparator.comparing(LocalPoint::getX)
.thenComparing(LocalPoint::getY))
// And then by id
.thenComparing(NPC::getId)
);
} }
} }

View File

@@ -40,6 +40,7 @@ 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.coords.LocalPoint; import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint;
import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemManager;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayLayer;
@@ -81,6 +82,8 @@ class FishingSpotOverlay extends Overlay
return null; return null;
} }
FishingSpot previousSpot = null;
WorldPoint previousLocation = null;
for (NPC npc : plugin.getFishingSpots()) for (NPC npc : plugin.getFishingSpots())
{ {
FishingSpot spot = FishingSpot.getSPOTS().get(npc.getId()); FishingSpot spot = FishingSpot.getSPOTS().get(npc.getId());
@@ -95,6 +98,12 @@ class FishingSpotOverlay extends Overlay
continue; continue;
} }
// This relies on the sort order to keep identical npcs on the same tile adjacent to each other
if (previousSpot == spot && previousLocation.equals(npc.getWorldLocation()))
{
continue;
}
Color color; Color color;
if (npc.getGraphic() == GraphicID.FLYING_FISH) if (npc.getGraphic() == GraphicID.FLYING_FISH)
{ {
@@ -175,6 +184,9 @@ class FishingSpotOverlay extends Overlay
OverlayUtil.renderTextLocation(graphics, textLocation, text, color.darker()); OverlayUtil.renderTextLocation(graphics, textLocation, text, color.darker());
} }
} }
previousSpot = spot;
previousLocation = npc.getWorldLocation();
} }
return null; return null;