Files
ss14-wega/Content.Client/Overlays/ShowHealthBarsSystem.cs
Perry Fraser b707110dea fix: clear health bar/icon overlay damage containers on update (#39288)
* fix: clear health overlay damage containers on update

* linqn't

* import

---------

Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
2026-01-11 16:39:21 +00:00

63 lines
1.7 KiB
C#

using Content.Shared.Inventory.Events;
using Content.Shared.Overlays;
using Robust.Client.Graphics;
using Robust.Shared.Prototypes;
namespace Content.Client.Overlays;
/// <summary>
/// Adds a health bar overlay.
/// </summary>
public sealed class ShowHealthBarsSystem : EquipmentHudSystem<ShowHealthBarsComponent>
{
[Dependency] private readonly IOverlayManager _overlayMan = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;
private EntityHealthBarOverlay _overlay = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ShowHealthBarsComponent, AfterAutoHandleStateEvent>(OnHandleState);
_overlay = new(EntityManager, _prototype);
}
private void OnHandleState(Entity<ShowHealthBarsComponent> ent, ref AfterAutoHandleStateEvent args)
{
RefreshOverlay();
}
protected override void UpdateInternal(RefreshEquipmentHudEvent<ShowHealthBarsComponent> component)
{
base.UpdateInternal(component);
_overlay.DamageContainers.Clear();
_overlay.StatusIcon = null;
foreach (var comp in component.Components)
{
foreach (var damageContainerId in comp.DamageContainers)
{
_overlay.DamageContainers.Add(damageContainerId);
}
_overlay.StatusIcon = comp.HealthStatusIcon;
}
if (!_overlayMan.HasOverlay<EntityHealthBarOverlay>())
{
_overlayMan.AddOverlay(_overlay);
}
}
protected override void DeactivateInternal()
{
base.DeactivateInternal();
_overlay.DamageContainers.Clear();
_overlayMan.RemoveOverlay(_overlay);
}
}