ActivatableUIRequiresAccessSystem.cs 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. using Content.Shared.Popups;
  2. using Content.Shared.UserInterface;
  3. using Content.Shared.Access.Components;
  4. namespace Content.Shared.Access.Systems;
  5. public sealed class ActivatableUIRequiresAccessSystem : EntitySystem
  6. {
  7. [Dependency] private readonly AccessReaderSystem _access = default!;
  8. [Dependency] private readonly SharedPopupSystem _popup = default!;
  9. public override void Initialize()
  10. {
  11. base.Initialize();
  12. SubscribeLocalEvent<ActivatableUIRequiresAccessComponent, ActivatableUIOpenAttemptEvent>(OnUIOpenAttempt);
  13. }
  14. private void OnUIOpenAttempt(Entity<ActivatableUIRequiresAccessComponent> activatableUI, ref ActivatableUIOpenAttemptEvent args)
  15. {
  16. if (args.Cancelled)
  17. return;
  18. if (!_access.IsAllowed(args.User, activatableUI))
  19. {
  20. args.Cancel();
  21. if (activatableUI.Comp.PopupMessage != null)
  22. _popup.PopupClient(Loc.GetString(activatableUI.Comp.PopupMessage), activatableUI, args.User);
  23. }
  24. }
  25. }