DoorElectronicsSystem.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System.Linq;
  2. using Content.Server.Doors.Electronics;
  3. using Content.Shared.Access;
  4. using Content.Shared.Access.Components;
  5. using Content.Shared.Access.Systems;
  6. using Content.Shared.DeviceNetwork.Components;
  7. using Content.Shared.Doors.Electronics;
  8. using Content.Shared.Doors;
  9. using Content.Shared.Interaction;
  10. using Robust.Server.GameObjects;
  11. using Robust.Shared.Prototypes;
  12. namespace Content.Server.Doors.Electronics;
  13. public sealed class DoorElectronicsSystem : EntitySystem
  14. {
  15. [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
  16. [Dependency] private readonly AccessReaderSystem _accessReader = default!;
  17. public override void Initialize()
  18. {
  19. base.Initialize();
  20. SubscribeLocalEvent<DoorElectronicsComponent, DoorElectronicsUpdateConfigurationMessage>(OnChangeConfiguration);
  21. SubscribeLocalEvent<DoorElectronicsComponent, AccessReaderConfigurationChangedEvent>(OnAccessReaderChanged);
  22. SubscribeLocalEvent<DoorElectronicsComponent, BoundUIOpenedEvent>(OnBoundUIOpened);
  23. }
  24. public void UpdateUserInterface(EntityUid uid, DoorElectronicsComponent component)
  25. {
  26. var accesses = new List<ProtoId<AccessLevelPrototype>>();
  27. if (TryComp<AccessReaderComponent>(uid, out var accessReader))
  28. {
  29. foreach (var accessList in accessReader.AccessLists)
  30. {
  31. var access = accessList.FirstOrDefault();
  32. accesses.Add(access);
  33. }
  34. }
  35. var state = new DoorElectronicsConfigurationState(accesses);
  36. _uiSystem.SetUiState(uid, DoorElectronicsConfigurationUiKey.Key, state);
  37. }
  38. private void OnChangeConfiguration(
  39. EntityUid uid,
  40. DoorElectronicsComponent component,
  41. DoorElectronicsUpdateConfigurationMessage args)
  42. {
  43. var accessReader = EnsureComp<AccessReaderComponent>(uid);
  44. _accessReader.SetAccesses(uid, accessReader, args.AccessList);
  45. }
  46. private void OnAccessReaderChanged(
  47. EntityUid uid,
  48. DoorElectronicsComponent component,
  49. AccessReaderConfigurationChangedEvent args)
  50. {
  51. UpdateUserInterface(uid, component);
  52. }
  53. private void OnBoundUIOpened(
  54. EntityUid uid,
  55. DoorElectronicsComponent component,
  56. BoundUIOpenedEvent args)
  57. {
  58. UpdateUserInterface(uid, component);
  59. }
  60. }