using Content.Shared.Drowsiness; using Content.Shared.StatusEffectNew; using Robust.Client.Graphics; using Robust.Client.Player; namespace Content.Client.Drowsiness; public sealed class DrowsinessSystem : SharedDrowsinessSystem { [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IOverlayManager _overlayMan = default!; [Dependency] private readonly SharedStatusEffectsSystem _statusEffects = default!; private DrowsinessOverlay _overlay = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnDrowsinessApply); SubscribeLocalEvent(OnDrowsinessShutdown); SubscribeLocalEvent(OnStatusEffectPlayerAttached); SubscribeLocalEvent(OnStatusEffectPlayerDetached); _overlay = new(); } private void OnDrowsinessApply(Entity ent, ref StatusEffectAppliedEvent args) { if (_player.LocalEntity == args.Target) _overlayMan.AddOverlay(_overlay); } private void OnDrowsinessShutdown(Entity ent, ref StatusEffectRemovedEvent args) { if (_player.LocalEntity != args.Target) return; if (!_statusEffects.HasEffectComp(_player.LocalEntity.Value)) { _overlay.CurrentPower = 0; _overlayMan.RemoveOverlay(_overlay); } } private void OnStatusEffectPlayerAttached(Entity ent, ref StatusEffectPlayerAttachedEvent args) { if (_player.LocalEntity != args.Target) return; _overlayMan.AddOverlay(_overlay); } private void OnStatusEffectPlayerDetached(Entity ent, ref StatusEffectPlayerDetachedEvent args) { if (_player.LocalEntity != args.Target) return; if (!_statusEffects.HasEffectComp(_player.LocalEntity.Value)) { _overlay.CurrentPower = 0; _overlayMan.RemoveOverlay(_overlay); } } }