using Content.Shared.Flash; using Content.Shared.Flash.Components; using Content.Shared.StatusEffectNew; using Robust.Client.Graphics; using Robust.Client.Player; using Robust.Shared.Player; namespace Content.Client.Flash; public sealed partial class FlashSystem : SharedFlashSystem { [Dependency] private IPlayerManager _player = default!; [Dependency] private IOverlayManager _overlayMan = default!; [Dependency] private StatusEffectsSystem _statusEffects = default!; private FlashOverlay _overlay = default!; public override void Initialize() { base.Initialize(); _overlay = new(); } [SubscribeLocalEvent] private void OnApplied(Entity ent, ref StatusEffectAppliedEvent args) { if (_player.LocalEntity == args.Target) { _overlay.RequestScreenTexture = true; _overlayMan.AddOverlay(_overlay); } } [SubscribeLocalEvent] private void OnRemoved(Entity ent, ref StatusEffectRemovedEvent args) { if (_player.LocalEntity != args.Target) return; if (!_statusEffects.HasEffectComp(args.Target)) { _overlay.ScreenshotTexture = null; _overlay.RequestScreenTexture = false; _overlayMan.RemoveOverlay(_overlay); } } [SubscribeLocalEvent] private void OnPlayerAttached(Entity ent, ref StatusEffectRelayedEvent args) { _overlay.RequestScreenTexture = true; _overlayMan.AddOverlay(_overlay); } [SubscribeLocalEvent] private void OnPlayerDetached(Entity ent, ref StatusEffectRelayedEvent args) { if (_player.LocalEntity is null || _statusEffects.HasEffectComp(_player.LocalEntity.Value)) return; _overlay.ScreenshotTexture = null; _overlay.RequestScreenTexture = false; _overlayMan.RemoveOverlay(_overlay); } }