statusbars: Add option to hide outside of combat

This commit is contained in:
ermalsh
2021-01-11 19:31:05 -08:00
committed by Jordan Atwood
parent 5de258310a
commit fcfda4d63a
3 changed files with 92 additions and 2 deletions

View File

@@ -27,11 +27,14 @@ package net.runelite.client.plugins.statusbars;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
import net.runelite.client.plugins.statusbars.config.BarMode; import net.runelite.client.plugins.statusbars.config.BarMode;
@ConfigGroup("statusbars") @ConfigGroup(StatusBarsConfig.GROUP)
public interface StatusBarsConfig extends Config public interface StatusBarsConfig extends Config
{ {
String GROUP = "statusbars";
@ConfigItem( @ConfigItem(
keyName = "enableCounter", keyName = "enableCounter",
name = "Show counters", name = "Show counters",
@@ -81,4 +84,15 @@ public interface StatusBarsConfig extends Config
{ {
return BarMode.PRAYER; return BarMode.PRAYER;
} }
@ConfigItem(
keyName = "hideAfterCombatDelay",
name = "Hide after combat delay",
description = "Amount of ticks before hiding status bars after no longer in combat. 0 = always show status bars."
)
@Units(Units.TICKS)
default int hideAfterCombatDelay()
{
return 0;
}
} }

View File

@@ -80,6 +80,7 @@ class StatusBarsOverlay extends Overlay
private static final int MAX_RUN_ENERGY_VALUE = 100; private static final int MAX_RUN_ENERGY_VALUE = 100;
private final Client client; private final Client client;
private final StatusBarsPlugin plugin;
private final StatusBarsConfig config; private final StatusBarsConfig config;
private final ItemStatChangesService itemStatService; private final ItemStatChangesService itemStatService;
private final SpriteManager spriteManager; private final SpriteManager spriteManager;
@@ -94,11 +95,12 @@ class StatusBarsOverlay extends Overlay
private final Map<BarMode, BarRenderer> barRenderers = new EnumMap<>(BarMode.class); private final Map<BarMode, BarRenderer> barRenderers = new EnumMap<>(BarMode.class);
@Inject @Inject
private StatusBarsOverlay(Client client, StatusBarsConfig config, SkillIconManager skillIconManager, ItemStatChangesService itemstatservice, SpriteManager spriteManager) private StatusBarsOverlay(Client client, StatusBarsPlugin plugin, StatusBarsConfig config, SkillIconManager skillIconManager, ItemStatChangesService itemstatservice, SpriteManager spriteManager)
{ {
setPosition(OverlayPosition.DYNAMIC); setPosition(OverlayPosition.DYNAMIC);
setLayer(OverlayLayer.ABOVE_WIDGETS); setLayer(OverlayLayer.ABOVE_WIDGETS);
this.client = client; this.client = client;
this.plugin = plugin;
this.config = config; this.config = config;
this.itemStatService = itemstatservice; this.itemStatService = itemstatservice;
this.spriteManager = spriteManager; this.spriteManager = spriteManager;
@@ -216,6 +218,11 @@ class StatusBarsOverlay extends Overlay
@Override @Override
public Dimension render(Graphics2D g) public Dimension render(Graphics2D g)
{ {
if (!plugin.isBarsDisplayed())
{
return null;
}
Viewport curViewport = null; Viewport curViewport = null;
Widget curWidget = null; Widget curWidget = null;

View File

@@ -26,12 +26,24 @@ package net.runelite.client.plugins.statusbars;
import javax.inject.Inject; import javax.inject.Inject;
import com.google.inject.Provides; import com.google.inject.Provides;
import lombok.AccessLevel;
import lombok.Getter;
import net.runelite.api.Actor;
import net.runelite.api.Client;
import net.runelite.api.NPC;
import net.runelite.api.Player;
import net.runelite.api.Varbits;
import net.runelite.api.events.GameTick;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDependency; import net.runelite.client.plugins.PluginDependency;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.itemstats.ItemStatPlugin; import net.runelite.client.plugins.itemstats.ItemStatPlugin;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import org.apache.commons.lang3.ArrayUtils;
@PluginDescriptor( @PluginDescriptor(
name = "Status Bars", name = "Status Bars",
@@ -47,9 +59,24 @@ public class StatusBarsPlugin extends Plugin
@Inject @Inject
private OverlayManager overlayManager; private OverlayManager overlayManager;
@Inject
private Client client;
@Inject
private StatusBarsConfig config;
@Inject
private ClientThread clientThread;
@Getter(AccessLevel.PACKAGE)
private boolean barsDisplayed;
private int lastCombatActionTickCount;
@Override @Override
protected void startUp() throws Exception protected void startUp() throws Exception
{ {
clientThread.invokeLater(this::checkStatusBars);
overlayManager.add(overlay); overlayManager.add(overlay);
} }
@@ -57,6 +84,7 @@ public class StatusBarsPlugin extends Plugin
protected void shutDown() throws Exception protected void shutDown() throws Exception
{ {
overlayManager.remove(overlay); overlayManager.remove(overlay);
barsDisplayed = false;
} }
@Provides @Provides
@@ -64,4 +92,45 @@ public class StatusBarsPlugin extends Plugin
{ {
return configManager.getConfig(StatusBarsConfig.class); return configManager.getConfig(StatusBarsConfig.class);
} }
@Subscribe
public void onGameTick(GameTick gameTick)
{
checkStatusBars();
}
@Subscribe
public void onConfigChanged(ConfigChanged event)
{
if (StatusBarsConfig.GROUP.equals(event.getGroup()) && event.getKey().equals("hideAfterCombatDelay"))
{
clientThread.invokeLater(this::checkStatusBars);
}
}
private void checkStatusBars()
{
final Player localPlayer = client.getLocalPlayer();
if (localPlayer == null)
{
return;
}
final Actor interacting = localPlayer.getInteracting();
if (config.hideAfterCombatDelay() == 0)
{
barsDisplayed = true;
}
else if ((interacting instanceof NPC && ArrayUtils.contains(((NPC) interacting).getComposition().getActions(), "Attack"))
|| (interacting instanceof Player && client.getVar(Varbits.PVP_SPEC_ORB) == 1))
{
lastCombatActionTickCount = client.getTickCount();
barsDisplayed = true;
}
else if (client.getTickCount() - lastCombatActionTickCount >= config.hideAfterCombatDelay())
{
barsDisplayed = false;
}
}
} }