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

@@ -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);
}