statusbars: Add option to hide outside of combat
This commit is contained in:
@@ -27,11 +27,14 @@ package net.runelite.client.plugins.statusbars;
|
||||
import net.runelite.client.config.Config;
|
||||
import net.runelite.client.config.ConfigGroup;
|
||||
import net.runelite.client.config.ConfigItem;
|
||||
import net.runelite.client.config.Units;
|
||||
import net.runelite.client.plugins.statusbars.config.BarMode;
|
||||
|
||||
@ConfigGroup("statusbars")
|
||||
@ConfigGroup(StatusBarsConfig.GROUP)
|
||||
public interface StatusBarsConfig extends Config
|
||||
{
|
||||
String GROUP = "statusbars";
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "enableCounter",
|
||||
name = "Show counters",
|
||||
@@ -81,4 +84,15 @@ public interface StatusBarsConfig extends Config
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@ class StatusBarsOverlay extends Overlay
|
||||
private static final int MAX_RUN_ENERGY_VALUE = 100;
|
||||
|
||||
private final Client client;
|
||||
private final StatusBarsPlugin plugin;
|
||||
private final StatusBarsConfig config;
|
||||
private final ItemStatChangesService itemStatService;
|
||||
private final SpriteManager spriteManager;
|
||||
@@ -94,11 +95,12 @@ class StatusBarsOverlay extends Overlay
|
||||
private final Map<BarMode, BarRenderer> barRenderers = new EnumMap<>(BarMode.class);
|
||||
|
||||
@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);
|
||||
setLayer(OverlayLayer.ABOVE_WIDGETS);
|
||||
this.client = client;
|
||||
this.plugin = plugin;
|
||||
this.config = config;
|
||||
this.itemStatService = itemstatservice;
|
||||
this.spriteManager = spriteManager;
|
||||
@@ -216,6 +218,11 @@ class StatusBarsOverlay extends Overlay
|
||||
@Override
|
||||
public Dimension render(Graphics2D g)
|
||||
{
|
||||
if (!plugin.isBarsDisplayed())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
Viewport curViewport = null;
|
||||
Widget curWidget = null;
|
||||
|
||||
|
||||
@@ -26,12 +26,24 @@ package net.runelite.client.plugins.statusbars;
|
||||
|
||||
import javax.inject.Inject;
|
||||
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.eventbus.Subscribe;
|
||||
import net.runelite.client.events.ConfigChanged;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDependency;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
import net.runelite.client.plugins.itemstats.ItemStatPlugin;
|
||||
import net.runelite.client.ui.overlay.OverlayManager;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Status Bars",
|
||||
@@ -47,9 +59,24 @@ public class StatusBarsPlugin extends Plugin
|
||||
@Inject
|
||||
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
|
||||
protected void startUp() throws Exception
|
||||
{
|
||||
clientThread.invokeLater(this::checkStatusBars);
|
||||
overlayManager.add(overlay);
|
||||
}
|
||||
|
||||
@@ -57,6 +84,7 @@ public class StatusBarsPlugin extends Plugin
|
||||
protected void shutDown() throws Exception
|
||||
{
|
||||
overlayManager.remove(overlay);
|
||||
barsDisplayed = false;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -64,4 +92,45 @@ public class StatusBarsPlugin extends Plugin
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user