| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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;
- /// <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);
- 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);
- }
- }
|