From 34f94e973c18627a3d7f20faf8160647b87c09c9 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 8 Feb 2020 14:15:58 -0500 Subject: [PATCH] opponentinfo: add opponent's opponent for npcs Upon closer inspection it was realized this is allowed for NPCs --- .../opponentinfo/OpponentInfoConfig.java | 11 +++++++++ .../opponentinfo/OpponentInfoOverlay.java | 23 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java index 6adb3af1f2..9f08e128af 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoConfig.java @@ -53,6 +53,17 @@ public interface OpponentInfoConfig extends Config return HitpointsDisplayStyle.HITPOINTS; } + @ConfigItem( + keyName = "showOpponentsOpponent", + name = "Show opponent's opponent", + description = "Toggle showing opponent's opponent if within a multi-combat area", + position = 2 + ) + default boolean showOpponentsOpponent() + { + return true; + } + @ConfigItem( keyName = "showOpponentsInMenu", name = "Show opponents in menu", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java index c20e33244a..d78036217c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java @@ -37,6 +37,7 @@ import net.runelite.api.Client; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; import net.runelite.api.NPC; import net.runelite.api.Player; +import net.runelite.api.Varbits; import net.runelite.client.game.HiscoreManager; import net.runelite.client.game.NPCManager; import net.runelite.client.ui.overlay.Overlay; @@ -68,6 +69,7 @@ class OpponentInfoOverlay extends Overlay private int lastRatio = 0; private int lastHealthScale = 0; private String opponentName; + private String opponentsOpponentName; @Inject private OpponentInfoOverlay( @@ -126,6 +128,17 @@ class OpponentInfoOverlay extends Overlay } } } + + final Actor opponentsOpponent = opponent.getInteracting(); + if (opponent instanceof NPC && opponentsOpponent != null + && (opponentsOpponent != client.getLocalPlayer() || client.getVar(Varbits.MULTICOMBAT_AREA) == 1)) + { + opponentsOpponentName = Text.removeTags(opponentsOpponent.getName()); + } + else + { + opponentsOpponentName = null; + } } if (opponentName == null) @@ -205,6 +218,16 @@ class OpponentInfoOverlay extends Overlay panelComponent.getChildren().add(progressBarComponent); } + // Opponents opponent + if (opponentsOpponentName != null && opponentInfoConfig.showOpponentsOpponent()) + { + textWidth = Math.max(textWidth, fontMetrics.stringWidth(opponentsOpponentName)); + panelComponent.setPreferredSize(new Dimension(textWidth, 0)); + panelComponent.getChildren().add(TitleComponent.builder() + .text(opponentsOpponentName) + .build()); + } + return panelComponent.render(graphics); } }