From 7b6074f0f86320efe644db08b40633b362e10bfb Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 9 Nov 2021 16:16:44 -0500 Subject: [PATCH] opponent info: hide overlay if hp hud is active --- .../main/java/net/runelite/api/Varbits.java | 9 ++++++- .../opponentinfo/OpponentInfoOverlay.java | 26 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index 7676ea3cd9..084ee4468e 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -624,7 +624,14 @@ public enum Varbits * 2 = popup notification only * 3 = chat and popup */ - COLLECTION_LOG_NOTIFICATION(11959); + COLLECTION_LOG_NOTIFICATION(11959), + + /** + * Show boss health overlay setting + * 0 = on + * 1 = off + */ + BOSS_HEALTH_OVERLAY(12389); /** * The raw varbit ID. 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 dc9cb8c1c2..e68146e002 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 @@ -33,9 +33,12 @@ import java.awt.Point; import java.awt.Rectangle; import javax.inject.Inject; import net.runelite.api.Actor; +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.VarPlayer; +import net.runelite.api.Varbits; import net.runelite.client.game.HiscoreManager; import net.runelite.client.game.NPCManager; import static net.runelite.client.ui.overlay.OverlayManager.OPTION_CONFIGURE; @@ -54,6 +57,7 @@ class OpponentInfoOverlay extends OverlayPanel private static final Color HP_GREEN = new Color(0, 146, 54, 230); private static final Color HP_RED = new Color(102, 15, 16, 230); + private final Client client; private final OpponentInfoPlugin opponentInfoPlugin; private final OpponentInfoConfig opponentInfoConfig; private final HiscoreManager hiscoreManager; @@ -66,12 +70,14 @@ class OpponentInfoOverlay extends OverlayPanel @Inject private OpponentInfoOverlay( + Client client, OpponentInfoPlugin opponentInfoPlugin, OpponentInfoConfig opponentInfoConfig, HiscoreManager hiscoreManager, NPCManager npcManager) { super(opponentInfoPlugin); + this.client = client; this.opponentInfoPlugin = opponentInfoPlugin; this.opponentInfoConfig = opponentInfoConfig; this.hiscoreManager = hiscoreManager; @@ -121,7 +127,9 @@ class OpponentInfoOverlay extends OverlayPanel } } - if (opponentName == null) + // The in-game hp hud is more accurate than our overlay and duplicates all of the information on it, + // so hide ours if it is visible. + if (opponentName == null || hasHpHud(opponent)) { return null; } @@ -198,4 +206,20 @@ class OpponentInfoOverlay extends OverlayPanel return super.render(graphics); } + + /** + * Check if the hp hud is active for an opponent + * @param opponent + * @return + */ + private boolean hasHpHud(Actor opponent) + { + boolean settingEnabled = client.getVar(Varbits.BOSS_HEALTH_OVERLAY) == 0; + if (settingEnabled && opponent instanceof NPC) + { + int opponentId = client.getVar(VarPlayer.HP_HUD_NPC_ID); + return opponentId != -1 && opponentId == ((NPC) opponent).getId(); + } + return false; + } }