using Robust.Client.Graphics; using Robust.Client.Player; using Content.Shared.Eye.Blinding.Components; using Content.Shared.GameTicking; namespace Content.Client.Eye.Blinding; public sealed class BlindingSystem : EntitySystem { [Dependency] private readonly IPlayerManager _player = default!; [Dependency] private readonly IOverlayManager _overlayMan = default!; [Dependency] ILightManager _lightManager = default!; private BlindOverlay _overlay = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnBlindInit); SubscribeLocalEvent(OnBlindShutdown); SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); SubscribeNetworkEvent(RoundRestartCleanup); _overlay = new(); } private void OnPlayerAttached(EntityUid uid, BlindableComponent component, LocalPlayerAttachedEvent args) { _overlayMan.AddOverlay(_overlay); } private void OnPlayerDetached(EntityUid uid, BlindableComponent component, LocalPlayerDetachedEvent args) { _overlayMan.RemoveOverlay(_overlay); _lightManager.Enabled = true; } private void OnBlindInit(EntityUid uid, BlindableComponent component, ComponentInit args) { if (_player.LocalPlayer?.ControlledEntity == uid) _overlayMan.AddOverlay(_overlay); } private void OnBlindShutdown(EntityUid uid, BlindableComponent component, ComponentShutdown args) { if (_player.LocalPlayer?.ControlledEntity == uid) { _overlayMan.RemoveOverlay(_overlay); } } private void RoundRestartCleanup(RoundRestartCleanupEvent ev) { _lightManager.Enabled = true; } }