agility plugin: highlight Sepulchre arrows and swords

This commit is contained in:
Adam
2020-06-10 12:13:33 -04:00
parent 248179a82c
commit 3050bd7ca9
3 changed files with 79 additions and 1 deletions

View File

@@ -220,4 +220,26 @@ public interface AgilityConfig extends Config
{
return Color.RED;
}
@ConfigItem(
keyName = "highlightSepulchreNpcs",
name = "Highlight Sepulchre Projectiles",
description = "Highlights arrows and swords in the Sepulchre",
position = 15
)
default boolean highlightSepulchreNpcs()
{
return true;
}
@ConfigItem(
keyName = "sepulchreHighlightColor",
name = "Sepulchre Highlight",
description = "Overlay color for arrows and swords",
position = 16
)
default Color sepulchreHighlightColor()
{
return Color.GREEN;
}
}

View File

@@ -31,8 +31,12 @@ import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Shape;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.NPC;
import net.runelite.api.NPCComposition;
import net.runelite.api.Perspective;
import net.runelite.api.Point;
import net.runelite.api.Tile;
import net.runelite.api.coords.LocalPoint;
@@ -138,6 +142,24 @@ class AgilityOverlay extends Overlay
highlightTile(graphics, playerLocation, stickTile, config.stickHighlightColor());
}
Set<NPC> npcs = plugin.getNpcs();
if (!npcs.isEmpty() && config.highlightSepulchreNpcs())
{
Color color = config.getOverlayColor();
for (NPC npc : npcs)
{
NPCComposition npcComposition = npc.getComposition();
int size = npcComposition.getSize();
LocalPoint lp = npc.getLocalLocation();
Polygon tilePoly = Perspective.getCanvasTileAreaPoly(client, lp, size);
if (tilePoly != null)
{
OverlayUtil.renderPolygon(graphics, tilePoly, color);
}
}
}
return null;
}

View File

@@ -24,12 +24,15 @@
*/
package net.runelite.client.plugins.agility;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Provides;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.inject.Inject;
import lombok.AccessLevel;
import lombok.Getter;
@@ -38,6 +41,8 @@ import net.runelite.api.Client;
import net.runelite.api.ItemID;
import static net.runelite.api.ItemID.AGILITY_ARENA_TICKET;
import net.runelite.api.MenuAction;
import net.runelite.api.NPC;
import net.runelite.api.NullNpcID;
import net.runelite.api.Player;
import net.runelite.api.Skill;
import static net.runelite.api.Skill.AGILITY;
@@ -58,6 +63,8 @@ import net.runelite.api.events.GroundObjectDespawned;
import net.runelite.api.events.GroundObjectSpawned;
import net.runelite.api.events.ItemDespawned;
import net.runelite.api.events.ItemSpawned;
import net.runelite.api.events.NpcDespawned;
import net.runelite.api.events.NpcSpawned;
import net.runelite.api.events.StatChanged;
import net.runelite.api.events.WallObjectChanged;
import net.runelite.api.events.WallObjectDespawned;
@@ -81,13 +88,17 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxManager;
@PluginDescriptor(
name = "Agility",
description = "Show helpful information about agility courses and obstacles",
tags = {"grace", "marks", "overlay", "shortcuts", "skilling", "traps"}
tags = {"grace", "marks", "overlay", "shortcuts", "skilling", "traps", "sepulchre"}
)
@PluginDependency(XpTrackerPlugin.class)
@Slf4j
public class AgilityPlugin extends Plugin
{
private static final int AGILITY_ARENA_REGION_ID = 11157;
private static final Set<Integer> SEPULCHRE_NPCS = ImmutableSet.of(
NullNpcID.NULL_9672, NullNpcID.NULL_9673, NullNpcID.NULL_9674, // arrows
NullNpcID.NULL_9669, NullNpcID.NULL_9670, NullNpcID.NULL_9671 // swords
);
@Getter
private final Map<TileObject, Obstacle> obstacles = new HashMap<>();
@@ -95,6 +106,9 @@ public class AgilityPlugin extends Plugin
@Getter
private final List<Tile> marksOfGrace = new ArrayList<>();
@Getter
private final Set<NPC> npcs = new HashSet<>();
@Inject
private OverlayManager overlayManager;
@@ -158,6 +172,7 @@ public class AgilityPlugin extends Plugin
session = null;
agilityLevel = 0;
stickTile = null;
npcs.clear();
}
@Subscribe
@@ -182,6 +197,7 @@ public class AgilityPlugin extends Plugin
session = null;
lastArenaTicketPosition = null;
removeAgilityArenaTimer();
npcs.clear();
break;
case LOADING:
marksOfGrace.clear();
@@ -457,4 +473,22 @@ public class AgilityPlugin extends Plugin
}
}
}
@Subscribe
public void onNpcSpawned(NpcSpawned npcSpawned)
{
NPC npc = npcSpawned.getNpc();
if (SEPULCHRE_NPCS.contains(npc.getId()))
{
npcs.add(npc);
}
}
@Subscribe
public void onNpcDespawned(NpcDespawned npcDespawned)
{
NPC npc = npcDespawned.getNpc();
npcs.remove(npc);
}
}