using Content.Shared.UserInterface; using Content.Shared.Eye.Blinding.Components; using Content.Shared.Popups; using Robust.Shared.Collections; namespace Content.Shared.Eye.Blinding.Systems; public sealed class ActivatableUIRequiresVisionSystem : EntitySystem { [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedUserInterfaceSystem _userInterfaceSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnOpenAttempt); SubscribeLocalEvent(OnBlindnessChanged); } private void OnOpenAttempt(EntityUid uid, ActivatableUIRequiresVisionComponent component, ActivatableUIOpenAttemptEvent args) { if (args.Cancelled) return; if (TryComp(args.User, out var blindable) && blindable.IsBlind) { _popupSystem.PopupClient(Loc.GetString("blindness-fail-attempt"), args.User, Shared.Popups.PopupType.MediumCaution); args.Cancel(); } } private void OnBlindnessChanged(EntityUid uid, BlindableComponent component, ref BlindnessChangedEvent args) { if (!args.Blind) return; var toClose = new ValueList<(EntityUid Entity, Enum Key)>(); foreach (var bui in _userInterfaceSystem.GetActorUis(uid)) { if (HasComp(bui.Entity)) { toClose.Add(bui); } } foreach (var bui in toClose) { _userInterfaceSystem.CloseUi(bui.Entity, bui.Key, uid); } } }