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