AccessOverriderBoundUserInterface.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Content.Shared.Access;
  2. using Content.Shared.Access.Components;
  3. using Content.Shared.Access.Systems;
  4. using Content.Shared.Containers.ItemSlots;
  5. using Robust.Client.UserInterface;
  6. using Robust.Shared.Prototypes;
  7. using static Content.Shared.Access.Components.AccessOverriderComponent;
  8. namespace Content.Client.Access.UI
  9. {
  10. public sealed class AccessOverriderBoundUserInterface : BoundUserInterface
  11. {
  12. [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
  13. private readonly SharedAccessOverriderSystem _accessOverriderSystem = default!;
  14. private AccessOverriderWindow? _window;
  15. public AccessOverriderBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  16. {
  17. _accessOverriderSystem = EntMan.System<SharedAccessOverriderSystem>();
  18. }
  19. protected override void Open()
  20. {
  21. base.Open();
  22. _window = this.CreateWindow<AccessOverriderWindow>();
  23. RefreshAccess();
  24. _window.Title = EntMan.GetComponent<MetaDataComponent>(Owner).EntityName;
  25. _window.OnSubmit += SubmitData;
  26. _window.PrivilegedIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(PrivilegedIdCardSlotId));
  27. }
  28. public override void OnProtoReload(PrototypesReloadedEventArgs args)
  29. {
  30. base.OnProtoReload(args);
  31. if (!args.WasModified<AccessLevelPrototype>())
  32. return;
  33. RefreshAccess();
  34. if (State != null)
  35. _window?.UpdateState(_prototypeManager, (AccessOverriderBoundUserInterfaceState) State);
  36. }
  37. private void RefreshAccess()
  38. {
  39. List<ProtoId<AccessLevelPrototype>> accessLevels;
  40. if (EntMan.TryGetComponent<AccessOverriderComponent>(Owner, out var accessOverrider))
  41. {
  42. accessLevels = accessOverrider.AccessLevels;
  43. accessLevels.Sort();
  44. }
  45. else
  46. {
  47. accessLevels = new List<ProtoId<AccessLevelPrototype>>();
  48. _accessOverriderSystem.Log.Error($"No AccessOverrider component found for {EntMan.ToPrettyString(Owner)}!");
  49. }
  50. _window?.SetAccessLevels(_prototypeManager, accessLevels);
  51. }
  52. protected override void UpdateState(BoundUserInterfaceState state)
  53. {
  54. base.UpdateState(state);
  55. var castState = (AccessOverriderBoundUserInterfaceState) state;
  56. _window?.UpdateState(_prototypeManager, castState);
  57. }
  58. public void SubmitData(List<ProtoId<AccessLevelPrototype>> newAccessList)
  59. {
  60. SendMessage(new WriteToTargetAccessReaderIdMessage(newAccessList));
  61. }
  62. }
  63. }