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!; private Content.Client._Offbrand.Overlays.HeartrateOverlay _heartrate = default!; // Offbrand public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnHandleState); _overlay = new(EntityManager, _prototype); _heartrate = new(); } private void OnHandleState(Entity ent, ref AfterAutoHandleStateEvent args) { RefreshOverlay(); } 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; _heartrate.StatusIcon = comp.HealthStatusIcon; // Offbrand } if (!_overlayMan.HasOverlay()) { _overlayMan.AddOverlay(_overlay); } // Begin Offbrand if (!_overlayMan.HasOverlay()) { _overlayMan.AddOverlay(_heartrate); } // End Offbrand } protected override void DeactivateInternal() { base.DeactivateInternal(); _overlay.DamageContainers.Clear(); _overlayMan.RemoveOverlay(_overlay); _overlayMan.RemoveOverlay(_heartrate); // Offbrand } }