Delta-v/Content.Client/_DV/ChronicPain/EntitySystems/ChronicPainSystem.cs

74 lines
2.3 KiB
C#

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<ChronicPainComponent> entity, ref ComponentInit args)
{
if (entity.Owner != _playerManager.LocalEntity)
return;
_overlayMan.AddOverlay(_overlay);
}
protected override void OnChronicPainShutdown(Entity<ChronicPainComponent> entity, ref ComponentShutdown args)
{
if (entity.Owner != _playerManager.LocalEntity)
return;
_overlayMan.RemoveOverlay(_overlay);
}
protected override void OnPlayerAttached(Entity<ChronicPainComponent> entity, ref LocalPlayerAttachedEvent args)
{
if (!IsChronicPainSuppressed((entity.Owner, entity.Comp)))
_overlayMan.AddOverlay(_overlay);
}
protected override void OnPlayerDetached(Entity<ChronicPainComponent> 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<ChronicPainComponent>(player, out var comp))
return;
var isSuppressed = IsChronicPainSuppressed((player, comp));
if (isSuppressed && _overlayMan.TryGetOverlay<ChronicPainOverlay>(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<ChronicPainOverlay>())
_overlayMan.AddOverlay(_overlay);
}
}