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