Portable Generator Rework (#19302)

This commit is contained in:
Pieter-Jan Briers
2023-08-25 20:40:42 +02:00
committed by GitHub
parent 50828363fe
commit bf16698efa
73 changed files with 1933 additions and 473 deletions

View File

@@ -3,9 +3,7 @@ using Content.Server.NodeContainer.NodeGroups;
using Content.Server.NodeContainer.Nodes;
using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems;
using Content.Server.Power.Pow3r;
using JetBrains.Annotations;
using Robust.Shared.Map;
namespace Content.Server.Power.NodeGroups
{
@@ -24,13 +22,12 @@ namespace Content.Server.Power.NodeGroups
[NodeGroup(NodeGroupID.Apc)]
[UsedImplicitly]
public sealed partial class ApcNet : BaseNetConnectorNodeGroup<IApcNet>, IApcNet
public sealed partial class ApcNet : BasePowerNet<IApcNet>, IApcNet
{
private PowerNetSystem? _powerNetSystem;
[ViewVariables] public readonly List<ApcComponent> Apcs = new();
[ViewVariables] public readonly List<ApcPowerProviderComponent> Providers = new();
[ViewVariables] public readonly List<PowerConsumerComponent> Consumers = new();
//Debug property
[ViewVariables] private int TotalReceivers => Providers.Sum(provider => provider.LinkedReceivers.Count);
@@ -39,9 +36,6 @@ namespace Content.Server.Power.NodeGroups
private IEnumerable<ApcPowerReceiverComponent> AllReceivers =>
Providers.SelectMany(provider => provider.LinkedReceivers);
[ViewVariables]
public PowerState.Network NetworkNode { get; } = new();
public override void Initialize(Node sourceNode, IEntityManager entMan)
{
base.Initialize(sourceNode, entMan);
@@ -89,21 +83,7 @@ namespace Content.Server.Power.NodeGroups
QueueNetworkReconnect();
}
public void AddConsumer(PowerConsumerComponent consumer)
{
consumer.NetworkLoad.LinkedNetwork = default;
Consumers.Add(consumer);
QueueNetworkReconnect();
}
public void RemoveConsumer(PowerConsumerComponent consumer)
{
consumer.NetworkLoad.LinkedNetwork = default;
Consumers.Remove(consumer);
QueueNetworkReconnect();
}
public void QueueNetworkReconnect()
public override void QueueNetworkReconnect()
{
_powerNetSystem?.QueueReconnectApcNet(this);
}

View File

@@ -0,0 +1,51 @@
using Content.Server.Power.Components;
using Content.Server.Power.Pow3r;
using Robust.Shared.Utility;
namespace Content.Server.Power.NodeGroups;
public abstract class BasePowerNet<TNetType> : BaseNetConnectorNodeGroup<TNetType>, IBasePowerNet
where TNetType : IBasePowerNet
{
[ViewVariables] public readonly List<PowerConsumerComponent> Consumers = new();
[ViewVariables] public readonly List<PowerSupplierComponent> Suppliers = new();
[ViewVariables]
public PowerState.Network NetworkNode { get; } = new();
public void AddConsumer(PowerConsumerComponent consumer)
{
DebugTools.Assert(consumer.NetworkLoad.LinkedNetwork == default);
consumer.NetworkLoad.LinkedNetwork = default;
Consumers.Add(consumer);
QueueNetworkReconnect();
}
public void RemoveConsumer(PowerConsumerComponent consumer)
{
// Linked network can be default if it was re-connected twice in one tick.
DebugTools.Assert(consumer.NetworkLoad.LinkedNetwork == default || consumer.NetworkLoad.LinkedNetwork == NetworkNode.Id);
consumer.NetworkLoad.LinkedNetwork = default;
Consumers.Remove(consumer);
QueueNetworkReconnect();
}
public void AddSupplier(PowerSupplierComponent supplier)
{
DebugTools.Assert(supplier.NetworkSupply.LinkedNetwork == default);
supplier.NetworkSupply.LinkedNetwork = default;
Suppliers.Add(supplier);
QueueNetworkReconnect();
}
public void RemoveSupplier(PowerSupplierComponent supplier)
{
// Linked network can be default if it was re-connected twice in one tick.
DebugTools.Assert(supplier.NetworkSupply.LinkedNetwork == default || supplier.NetworkSupply.LinkedNetwork == NetworkNode.Id);
supplier.NetworkSupply.LinkedNetwork = default;
Suppliers.Remove(supplier);
QueueNetworkReconnect();
}
public abstract void QueueNetworkReconnect();
}

View File

@@ -9,6 +9,10 @@ namespace Content.Server.Power.NodeGroups
void RemoveConsumer(PowerConsumerComponent consumer);
void AddSupplier(PowerSupplierComponent supplier);
void RemoveSupplier(PowerSupplierComponent supplier);
PowerState.Network NetworkNode { get; }
}
}

View File

@@ -2,7 +2,6 @@ using Content.Server.NodeContainer.NodeGroups;
using Content.Server.NodeContainer.Nodes;
using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems;
using Content.Server.Power.Pow3r;
using JetBrains.Annotations;
using Robust.Shared.Utility;
using System.Linq;
@@ -11,10 +10,6 @@ namespace Content.Server.Power.NodeGroups
{
public interface IPowerNet : IBasePowerNet
{
void AddSupplier(PowerSupplierComponent supplier);
void RemoveSupplier(PowerSupplierComponent supplier);
void AddDischarger(BatteryDischargerComponent discharger);
void RemoveDischarger(BatteryDischargerComponent discharger);
@@ -26,19 +21,14 @@ namespace Content.Server.Power.NodeGroups
[NodeGroup(NodeGroupID.HVPower, NodeGroupID.MVPower)]
[UsedImplicitly]
public sealed partial class PowerNet : BaseNetConnectorNodeGroup<IPowerNet>, IPowerNet
public sealed partial class PowerNet : BasePowerNet<IPowerNet>, IPowerNet
{
private PowerNetSystem? _powerNetSystem;
private IEntityManager? _entMan;
[ViewVariables] public readonly List<PowerSupplierComponent> Suppliers = new();
[ViewVariables] public readonly List<PowerConsumerComponent> Consumers = new();
[ViewVariables] public readonly List<BatteryChargerComponent> Chargers = new();
[ViewVariables] public readonly List<BatteryDischargerComponent> Dischargers = new();
[ViewVariables]
public PowerState.Network NetworkNode { get; } = new();
public override void Initialize(Node sourceNode, IEntityManager entMan)
{
base.Initialize(sourceNode, entMan);
@@ -61,38 +51,6 @@ namespace Content.Server.Power.NodeGroups
netConnectorComponent.Net = this;
}
public void AddSupplier(PowerSupplierComponent supplier)
{
DebugTools.Assert(supplier.NetworkSupply.LinkedNetwork == default);
supplier.NetworkSupply.LinkedNetwork = default;
Suppliers.Add(supplier);
_powerNetSystem?.QueueReconnectPowerNet(this);
}
public void RemoveSupplier(PowerSupplierComponent supplier)
{
DebugTools.Assert(supplier.NetworkSupply.LinkedNetwork == NetworkNode.Id);
supplier.NetworkSupply.LinkedNetwork = default;
Suppliers.Remove(supplier);
_powerNetSystem?.QueueReconnectPowerNet(this);
}
public void AddConsumer(PowerConsumerComponent consumer)
{
DebugTools.Assert(consumer.NetworkLoad.LinkedNetwork == default);
consumer.NetworkLoad.LinkedNetwork = default;
Consumers.Add(consumer);
_powerNetSystem?.QueueReconnectPowerNet(this);
}
public void RemoveConsumer(PowerConsumerComponent consumer)
{
DebugTools.Assert(consumer.NetworkLoad.LinkedNetwork == NetworkNode.Id);
consumer.NetworkLoad.LinkedNetwork = default;
Consumers.Remove(consumer);
_powerNetSystem?.QueueReconnectPowerNet(this);
}
public void AddDischarger(BatteryDischargerComponent discharger)
{
if (_entMan == null)
@@ -102,7 +60,7 @@ namespace Content.Server.Power.NodeGroups
DebugTools.Assert(battery.NetworkBattery.LinkedNetworkDischarging == default);
battery.NetworkBattery.LinkedNetworkDischarging = default;
Dischargers.Add(discharger);
_powerNetSystem?.QueueReconnectPowerNet(this);
QueueNetworkReconnect();
}
public void RemoveDischarger(BatteryDischargerComponent discharger)
@@ -113,12 +71,13 @@ namespace Content.Server.Power.NodeGroups
// Can be missing if the entity is being deleted, not a big deal.
if (_entMan.TryGetComponent(discharger.Owner, out PowerNetworkBatteryComponent? battery))
{
DebugTools.Assert(battery.NetworkBattery.LinkedNetworkDischarging == NetworkNode.Id);
// Linked network can be default if it was re-connected twice in one tick.
DebugTools.Assert(battery.NetworkBattery.LinkedNetworkDischarging == default || battery.NetworkBattery.LinkedNetworkDischarging == NetworkNode.Id);
battery.NetworkBattery.LinkedNetworkDischarging = default;
}
Dischargers.Remove(discharger);
_powerNetSystem?.QueueReconnectPowerNet(this);
QueueNetworkReconnect();
}
public void AddCharger(BatteryChargerComponent charger)
@@ -130,7 +89,7 @@ namespace Content.Server.Power.NodeGroups
DebugTools.Assert(battery.NetworkBattery.LinkedNetworkCharging == default);
battery.NetworkBattery.LinkedNetworkCharging = default;
Chargers.Add(charger);
_powerNetSystem?.QueueReconnectPowerNet(this);
QueueNetworkReconnect();
}
public void RemoveCharger(BatteryChargerComponent charger)
@@ -141,11 +100,17 @@ namespace Content.Server.Power.NodeGroups
// Can be missing if the entity is being deleted, not a big deal.
if (_entMan.TryGetComponent(charger.Owner, out PowerNetworkBatteryComponent? battery))
{
DebugTools.Assert(battery.NetworkBattery.LinkedNetworkCharging == NetworkNode.Id);
// Linked network can be default if it was re-connected twice in one tick.
DebugTools.Assert(battery.NetworkBattery.LinkedNetworkCharging == default || battery.NetworkBattery.LinkedNetworkCharging == NetworkNode.Id);
battery.NetworkBattery.LinkedNetworkCharging = default;
}
Chargers.Remove(charger);
QueueNetworkReconnect();
}
public override void QueueNetworkReconnect()
{
_powerNetSystem?.QueueReconnectPowerNet(this);
}