Files
Delta-v/Content.Client/_DV/ChronicPain/EntitySystems/ChronicPainSystem.cs
T
8f130cb0bb Migrate Chronic Pain to the New Status Effect System (#5180)
* Renamed InPain to ChronicPain. Changed references.

* Updated meds to use the name status effect system for chronic pain suppression. Standardized popup chances for all meds.

* Migrated ChronicPain to the new Status effect system. Basically re-wrote it and re-organized it.

* Cleanup and tweaks.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Fixed cloning traits for pain.

* Addressing Milon-san's feedback uwu

* Apply suggestions from code review

Co-authored-by: Tobias Berger <toby@tobot.dev>
Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>

* Turned floats into TimeStamps.

* Derp

* Forgot the trait lol

---------

Signed-off-by: Vanessa <908648+ShepardToTheStars@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Tobias Berger <toby@tobot.dev>
2026-01-23 10:24:32 +00:00

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