using Content.Client._DV.ChronicPain.Overlays; using Content.Shared._DV.ChronicPain.Components; using Content.Shared._DV.ChronicPain.EntitySystems; using Robust.Client.Graphics; using Robust.Shared.Player; namespace Content.Client._DV.ChronicPain.EntitySystems; public sealed class ChronicPainSystem : SharedChronicPainSystem { [Dependency] private readonly IOverlayManager _overlayMan = default!; [Dependency] private readonly ISharedPlayerManager _playerManager = default!; private ChronicPainOverlay _overlay = default!; public override void Initialize() { base.Initialize(); _overlay = new(); } protected override void OnChronicPainInit(Entity entity, ref ComponentInit args) { if (entity.Owner != _playerManager.LocalEntity) return; _overlayMan.AddOverlay(_overlay); } protected override void OnChronicPainShutdown(Entity entity, ref ComponentShutdown args) { if (entity.Owner != _playerManager.LocalEntity) return; _overlayMan.RemoveOverlay(_overlay); } protected override void OnPlayerAttached(Entity entity, ref LocalPlayerAttachedEvent args) { if (!IsChronicPainSuppressed((entity.Owner, entity.Comp))) _overlayMan.AddOverlay(_overlay); } protected override void OnPlayerDetached(Entity entity, ref LocalPlayerDetachedEvent args) { _overlayMan.RemoveOverlay(_overlay); } public override void Update(float frameTime) { base.Update(frameTime); // Handle showing/hiding overlay based on suppression status if (_playerManager.LocalEntity is not { } player) return; if (!TryComp(player, out var comp)) return; var isSuppressed = IsChronicPainSuppressed((player, comp)); if (isSuppressed && _overlayMan.TryGetOverlay(out var overlay)) _overlayMan.RemoveOverlay(overlay); if (isSuppressed) // If its suppressed and we don't have an overlay, just return return; if (!isSuppressed && !_overlayMan.HasOverlay()) _overlayMan.AddOverlay(_overlay); } }