using Content.Shared._DV.Pain; using Robust.Client.Graphics; using Robust.Shared.Player; namespace Content.Client._DV.Overlays; public sealed partial class PainSystem : EntitySystem { [Dependency] private readonly IOverlayManager _overlayMan = default!; [Dependency] private readonly ISharedPlayerManager _playerMan = default!; private PainOverlay _overlay = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnPainInit); SubscribeLocalEvent(OnPainShutdown); SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); _overlay = new(); } private void OnPainInit(Entity ent, ref ComponentInit args) { if (ent.Owner == _playerMan.LocalEntity && !ent.Comp.Suppressed) _overlayMan.AddOverlay(_overlay); } private void OnPainShutdown(Entity ent, ref ComponentShutdown args) { if (ent.Owner == _playerMan.LocalEntity) _overlayMan.RemoveOverlay(_overlay); } private void OnPlayerAttached(Entity ent, ref LocalPlayerAttachedEvent args) { if (!ent.Comp.Suppressed) _overlayMan.AddOverlay(_overlay); } private void OnPlayerDetached(Entity ent, ref LocalPlayerDetachedEvent args) { _overlayMan.RemoveOverlay(_overlay); } public override void Update(float frameTime) { base.Update(frameTime); // Handle showing/hiding overlay based on suppression status if (_playerMan.LocalEntity is not { } player) return; if (!TryComp(player, out var comp)) return; if (comp.Suppressed && _overlayMan.HasOverlay()) _overlayMan.RemoveOverlay(_overlay); else if (!comp.Suppressed && !_overlayMan.HasOverlay()) _overlayMan.AddOverlay(_overlay); } }