BasePowerNet.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using Content.Server.NodeContainer.Nodes;
  2. using Content.Server.Power.Components;
  3. using Content.Server.Power.EntitySystems;
  4. using Content.Server.Power.Pow3r;
  5. using Robust.Shared.Utility;
  6. namespace Content.Server.Power.NodeGroups;
  7. public abstract class BasePowerNet<TNetType> : BaseNetConnectorNodeGroup<TNetType>, IBasePowerNet
  8. where TNetType : IBasePowerNet
  9. {
  10. [ViewVariables] public readonly List<PowerConsumerComponent> Consumers = new();
  11. [ViewVariables] public readonly List<PowerSupplierComponent> Suppliers = new();
  12. public PowerNetSystem PowerNetSystem = default!;
  13. [ViewVariables]
  14. public PowerState.Network NetworkNode { get; } = new();
  15. public override void Initialize(Node sourceNode, IEntityManager entMan)
  16. {
  17. base.Initialize(sourceNode, entMan);
  18. PowerNetSystem = entMan.EntitySysManager.GetEntitySystem<PowerNetSystem>();
  19. }
  20. public bool IsConnectedNetwork => NodeCount > 1;
  21. public void AddConsumer(PowerConsumerComponent consumer)
  22. {
  23. DebugTools.Assert(consumer.NetworkLoad.LinkedNetwork == default);
  24. consumer.NetworkLoad.LinkedNetwork = default;
  25. Consumers.Add(consumer);
  26. QueueNetworkReconnect();
  27. }
  28. public void RemoveConsumer(PowerConsumerComponent consumer)
  29. {
  30. // Linked network can be default if it was re-connected twice in one tick.
  31. DebugTools.Assert(consumer.NetworkLoad.LinkedNetwork == default || consumer.NetworkLoad.LinkedNetwork == NetworkNode.Id);
  32. consumer.NetworkLoad.LinkedNetwork = default;
  33. Consumers.Remove(consumer);
  34. QueueNetworkReconnect();
  35. }
  36. public void AddSupplier(PowerSupplierComponent supplier)
  37. {
  38. DebugTools.Assert(supplier.NetworkSupply.LinkedNetwork == default);
  39. supplier.NetworkSupply.LinkedNetwork = default;
  40. Suppliers.Add(supplier);
  41. QueueNetworkReconnect();
  42. }
  43. public void RemoveSupplier(PowerSupplierComponent supplier)
  44. {
  45. // Linked network can be default if it was re-connected twice in one tick.
  46. DebugTools.Assert(supplier.NetworkSupply.LinkedNetwork == default || supplier.NetworkSupply.LinkedNetwork == NetworkNode.Id);
  47. supplier.NetworkSupply.LinkedNetwork = default;
  48. Suppliers.Remove(supplier);
  49. QueueNetworkReconnect();
  50. }
  51. public abstract void QueueNetworkReconnect();
  52. }