DoorElectronicsBoundUserInterface.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Content.Shared.Access;
  2. using Content.Shared.Doors.Electronics;
  3. using Robust.Client.GameObjects;
  4. using Robust.Client.UserInterface;
  5. using Robust.Shared.Prototypes;
  6. namespace Content.Client.Doors.Electronics;
  7. public sealed class DoorElectronicsBoundUserInterface : BoundUserInterface
  8. {
  9. [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
  10. private DoorElectronicsConfigurationMenu? _window;
  11. public DoorElectronicsBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
  12. {
  13. }
  14. protected override void Open()
  15. {
  16. base.Open();
  17. _window = this.CreateWindow<DoorElectronicsConfigurationMenu>();
  18. _window.OnAccessChanged += UpdateConfiguration;
  19. Reset();
  20. }
  21. public override void OnProtoReload(PrototypesReloadedEventArgs args)
  22. {
  23. base.OnProtoReload(args);
  24. if (!args.WasModified<AccessLevelPrototype>())
  25. return;
  26. Reset();
  27. }
  28. private void Reset()
  29. {
  30. List<ProtoId<AccessLevelPrototype>> accessLevels = new();
  31. foreach (var accessLevel in _prototypeManager.EnumeratePrototypes<AccessLevelPrototype>())
  32. {
  33. if (accessLevel.Name != null)
  34. {
  35. accessLevels.Add(accessLevel.ID);
  36. }
  37. }
  38. accessLevels.Sort();
  39. _window?.Reset(_prototypeManager, accessLevels);
  40. }
  41. protected override void UpdateState(BoundUserInterfaceState state)
  42. {
  43. base.UpdateState(state);
  44. var castState = (DoorElectronicsConfigurationState) state;
  45. _window?.UpdateState(castState);
  46. }
  47. public void UpdateConfiguration(List<ProtoId<AccessLevelPrototype>> newAccessList)
  48. {
  49. SendMessage(new DoorElectronicsUpdateConfigurationMessage(newAccessList));
  50. }
  51. }