committed by
GitHub
parent
ea60a81fdf
commit
103bc19508
112
Content.Server/Power/NodeGroups/ApcNet.cs
Normal file
112
Content.Server/Power/NodeGroups/ApcNet.cs
Normal file
@@ -0,0 +1,112 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
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.GameObjects;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.ViewVariables;
|
||||
|
||||
namespace Content.Server.Power.NodeGroups
|
||||
{
|
||||
public interface IApcNet
|
||||
{
|
||||
void AddApc(ApcComponent apc);
|
||||
|
||||
void RemoveApc(ApcComponent apc);
|
||||
|
||||
void AddPowerProvider(ApcPowerProviderComponent provider);
|
||||
|
||||
void RemovePowerProvider(ApcPowerProviderComponent provider);
|
||||
|
||||
void QueueNetworkReconnect();
|
||||
|
||||
PowerState.Network NetworkNode { get; }
|
||||
|
||||
GridId? GridId { get; }
|
||||
}
|
||||
|
||||
[NodeGroup(NodeGroupID.Apc)]
|
||||
[UsedImplicitly]
|
||||
public class ApcNet : BaseNetConnectorNodeGroup<BaseApcNetComponent, IApcNet>, IApcNet
|
||||
{
|
||||
private readonly PowerNetSystem _powerNetSystem = EntitySystem.Get<PowerNetSystem>();
|
||||
|
||||
[ViewVariables] public readonly List<ApcComponent> Apcs = new();
|
||||
|
||||
[ViewVariables] public readonly List<ApcPowerProviderComponent> Providers = new();
|
||||
|
||||
//Debug property
|
||||
[ViewVariables] private int TotalReceivers => Providers.Sum(provider => provider.LinkedReceivers.Count);
|
||||
|
||||
[ViewVariables]
|
||||
private IEnumerable<ApcPowerReceiverComponent> AllReceivers =>
|
||||
Providers.SelectMany(provider => provider.LinkedReceivers);
|
||||
|
||||
GridId? IApcNet.GridId => GridId;
|
||||
|
||||
[ViewVariables]
|
||||
public PowerState.Network NetworkNode { get; } = new();
|
||||
|
||||
public override void Initialize(Node sourceNode)
|
||||
{
|
||||
base.Initialize(sourceNode);
|
||||
|
||||
_powerNetSystem.InitApcNet(this);
|
||||
}
|
||||
|
||||
public override void AfterRemake(IEnumerable<IGrouping<INodeGroup?, Node>> newGroups)
|
||||
{
|
||||
base.AfterRemake(newGroups);
|
||||
|
||||
_powerNetSystem.DestroyApcNet(this);
|
||||
}
|
||||
|
||||
public void AddApc(ApcComponent apc)
|
||||
{
|
||||
if (apc.Owner.TryGetComponent(out PowerNetworkBatteryComponent? netBattery))
|
||||
netBattery.NetworkBattery.LinkedNetworkDischarging = default;
|
||||
|
||||
_powerNetSystem.QueueReconnectApcNet(this);
|
||||
Apcs.Add(apc);
|
||||
}
|
||||
|
||||
public void RemoveApc(ApcComponent apc)
|
||||
{
|
||||
if (apc.Owner.TryGetComponent(out PowerNetworkBatteryComponent? netBattery))
|
||||
netBattery.NetworkBattery.LinkedNetworkDischarging = default;
|
||||
|
||||
_powerNetSystem.QueueReconnectApcNet(this);
|
||||
Apcs.Remove(apc);
|
||||
}
|
||||
|
||||
public void AddPowerProvider(ApcPowerProviderComponent provider)
|
||||
{
|
||||
Providers.Add(provider);
|
||||
|
||||
_powerNetSystem.QueueReconnectApcNet(this);
|
||||
}
|
||||
|
||||
public void RemovePowerProvider(ApcPowerProviderComponent provider)
|
||||
{
|
||||
Providers.Remove(provider);
|
||||
|
||||
_powerNetSystem.QueueReconnectApcNet(this);
|
||||
}
|
||||
|
||||
public void QueueNetworkReconnect()
|
||||
{
|
||||
_powerNetSystem.QueueReconnectApcNet(this);
|
||||
}
|
||||
|
||||
protected override void SetNetConnectorNet(BaseApcNetComponent netConnectorComponent)
|
||||
{
|
||||
netConnectorComponent.Net = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
34
Content.Server/Power/NodeGroups/BaseNetConnectorNodeGroup.cs
Normal file
34
Content.Server/Power/NodeGroups/BaseNetConnectorNodeGroup.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Content.Server.NodeContainer.NodeGroups;
|
||||
using Content.Server.NodeContainer.Nodes;
|
||||
using Content.Server.Power.Components;
|
||||
|
||||
namespace Content.Server.Power.NodeGroups
|
||||
{
|
||||
public abstract class BaseNetConnectorNodeGroup<TNetConnector, TNetType> : BaseNodeGroup
|
||||
where TNetConnector : BaseNetConnectorComponent<TNetType>
|
||||
{
|
||||
public override void LoadNodes(List<Node> groupNodes)
|
||||
{
|
||||
base.LoadNodes(groupNodes);
|
||||
|
||||
foreach (var node in groupNodes)
|
||||
{
|
||||
var newNetConnectorComponents = node.Owner
|
||||
.GetAllComponents<TNetConnector>()
|
||||
.Where(powerComp => (powerComp.NodeId == null || powerComp.NodeId == node.Name) &&
|
||||
(NodeGroupID) powerComp.Voltage == node.NodeGroupID)
|
||||
.ToList();
|
||||
|
||||
foreach (var netConnector in newNetConnectorComponents)
|
||||
{
|
||||
SetNetConnectorNet(netConnector);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void SetNetConnectorNet(TNetConnector netConnectorComponent);
|
||||
}
|
||||
}
|
||||
132
Content.Server/Power/NodeGroups/PowerNet.cs
Normal file
132
Content.Server/Power/NodeGroups/PowerNet.cs
Normal file
@@ -0,0 +1,132 @@
|
||||
#nullable enable
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
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.GameObjects;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.ViewVariables;
|
||||
|
||||
namespace Content.Server.Power.NodeGroups
|
||||
{
|
||||
public interface IPowerNet
|
||||
{
|
||||
void AddSupplier(PowerSupplierComponent supplier);
|
||||
|
||||
void RemoveSupplier(PowerSupplierComponent supplier);
|
||||
|
||||
void AddConsumer(PowerConsumerComponent consumer);
|
||||
|
||||
void RemoveConsumer(PowerConsumerComponent consumer);
|
||||
|
||||
void AddDischarger(BatteryDischargerComponent discharger);
|
||||
|
||||
void RemoveDischarger(BatteryDischargerComponent discharger);
|
||||
|
||||
void AddCharger(BatteryChargerComponent charger);
|
||||
|
||||
void RemoveCharger(BatteryChargerComponent charger);
|
||||
}
|
||||
|
||||
[NodeGroup(NodeGroupID.HVPower, NodeGroupID.MVPower)]
|
||||
[UsedImplicitly]
|
||||
public class PowerNet : BaseNetConnectorNodeGroup<BasePowerNetComponent, IPowerNet>, IPowerNet
|
||||
{
|
||||
private readonly PowerNetSystem _powerNetSystem = EntitySystem.Get<PowerNetSystem>();
|
||||
|
||||
[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)
|
||||
{
|
||||
base.Initialize(sourceNode);
|
||||
|
||||
_powerNetSystem.InitPowerNet(this);
|
||||
}
|
||||
|
||||
public override void AfterRemake(IEnumerable<IGrouping<INodeGroup?, Node>> newGroups)
|
||||
{
|
||||
base.AfterRemake(newGroups);
|
||||
|
||||
_powerNetSystem.DestroyPowerNet(this);
|
||||
}
|
||||
|
||||
protected override void SetNetConnectorNet(BasePowerNetComponent netConnectorComponent)
|
||||
{
|
||||
netConnectorComponent.Net = this;
|
||||
}
|
||||
|
||||
public void AddSupplier(PowerSupplierComponent supplier)
|
||||
{
|
||||
supplier.NetworkSupply.LinkedNetwork = default;
|
||||
Suppliers.Add(supplier);
|
||||
_powerNetSystem.QueueReconnectPowerNet(this);
|
||||
}
|
||||
|
||||
public void RemoveSupplier(PowerSupplierComponent supplier)
|
||||
{
|
||||
supplier.NetworkSupply.LinkedNetwork = default;
|
||||
Suppliers.Remove(supplier);
|
||||
_powerNetSystem.QueueReconnectPowerNet(this);
|
||||
}
|
||||
|
||||
public void AddConsumer(PowerConsumerComponent consumer)
|
||||
{
|
||||
consumer.NetworkLoad.LinkedNetwork = default;
|
||||
Consumers.Add(consumer);
|
||||
_powerNetSystem.QueueReconnectPowerNet(this);
|
||||
}
|
||||
|
||||
public void RemoveConsumer(PowerConsumerComponent consumer)
|
||||
{
|
||||
consumer.NetworkLoad.LinkedNetwork = default;
|
||||
Consumers.Remove(consumer);
|
||||
_powerNetSystem.QueueReconnectPowerNet(this);
|
||||
}
|
||||
|
||||
public void AddDischarger(BatteryDischargerComponent discharger)
|
||||
{
|
||||
var battery = discharger.Owner.GetComponent<PowerNetworkBatteryComponent>();
|
||||
battery.NetworkBattery.LinkedNetworkCharging = default;
|
||||
Dischargers.Add(discharger);
|
||||
_powerNetSystem.QueueReconnectPowerNet(this);
|
||||
}
|
||||
|
||||
public void RemoveDischarger(BatteryDischargerComponent discharger)
|
||||
{
|
||||
// Can be missing if the entity is being deleted, not a big deal.
|
||||
if (discharger.Owner.TryGetComponent(out PowerNetworkBatteryComponent? battery))
|
||||
battery.NetworkBattery.LinkedNetworkCharging = default;
|
||||
|
||||
Dischargers.Remove(discharger);
|
||||
_powerNetSystem.QueueReconnectPowerNet(this);
|
||||
}
|
||||
|
||||
public void AddCharger(BatteryChargerComponent charger)
|
||||
{
|
||||
var battery = charger.Owner.GetComponent<PowerNetworkBatteryComponent>();
|
||||
battery.NetworkBattery.LinkedNetworkCharging = default;
|
||||
Chargers.Add(charger);
|
||||
_powerNetSystem.QueueReconnectPowerNet(this);
|
||||
}
|
||||
|
||||
public void RemoveCharger(BatteryChargerComponent charger)
|
||||
{
|
||||
// Can be missing if the entity is being deleted, not a big deal.
|
||||
if (charger.Owner.TryGetComponent(out PowerNetworkBatteryComponent? battery))
|
||||
battery.NetworkBattery.LinkedNetworkCharging = default;
|
||||
|
||||
Chargers.Remove(charger);
|
||||
_powerNetSystem.QueueReconnectPowerNet(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user