ApcNetworkSystem.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using Content.Server.DeviceNetwork.Components;
  2. using Content.Server.NodeContainer;
  3. using Content.Server.NodeContainer.EntitySystems;
  4. using JetBrains.Annotations;
  5. using Content.Server.Power.EntitySystems;
  6. using Content.Server.Power.Nodes;
  7. namespace Content.Server.DeviceNetwork.Systems
  8. {
  9. [UsedImplicitly]
  10. public sealed class ApcNetworkSystem : EntitySystem
  11. {
  12. [Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
  13. public override void Initialize()
  14. {
  15. base.Initialize();
  16. SubscribeLocalEvent<ApcNetworkComponent, BeforePacketSentEvent>(OnBeforePacketSent);
  17. SubscribeLocalEvent<ApcNetworkComponent, ExtensionCableSystem.ProviderConnectedEvent>(OnProviderConnected);
  18. SubscribeLocalEvent<ApcNetworkComponent, ExtensionCableSystem.ProviderDisconnectedEvent>(OnProviderDisconnected);
  19. }
  20. /// <summary>
  21. /// Checks if both devices are connected to the same apc
  22. /// </summary>
  23. private void OnBeforePacketSent(EntityUid uid, ApcNetworkComponent receiver, BeforePacketSentEvent args)
  24. {
  25. if (!EntityManager.TryGetComponent(args.Sender, out ApcNetworkComponent? sender)) return;
  26. if (sender.ConnectedNode?.NodeGroup == null || !sender.ConnectedNode.NodeGroup.Equals(receiver.ConnectedNode?.NodeGroup))
  27. {
  28. args.Cancel();
  29. }
  30. }
  31. private void OnProviderConnected(EntityUid uid, ApcNetworkComponent component, ExtensionCableSystem.ProviderConnectedEvent args)
  32. {
  33. if (!EntityManager.TryGetComponent(args.Provider.Owner, out NodeContainerComponent? nodeContainer)) return;
  34. if (_nodeContainer.TryGetNode(nodeContainer, "power", out CableNode? node))
  35. {
  36. component.ConnectedNode = node;
  37. }
  38. else if (_nodeContainer.TryGetNode(nodeContainer, "output", out CableDeviceNode? deviceNode))
  39. {
  40. component.ConnectedNode = deviceNode;
  41. }
  42. }
  43. private void OnProviderDisconnected(EntityUid uid, ApcNetworkComponent component, ExtensionCableSystem.ProviderDisconnectedEvent args)
  44. {
  45. component.ConnectedNode = null;
  46. }
  47. }
  48. }