Merge pull request #11988 from ermalsh/status-bar-toggle-on-combat-only

This commit is contained in:
Jordan
2021-07-19 16:50:43 +00:00
committed by GitHub
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.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;
}
}

View File

@@ -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;

View File

@@ -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;
}
}
}