Little NodeContainer ECS (#17702)

This commit is contained in:
faint
2023-06-28 14:28:38 +03:00
committed by GitHub
parent c25f3f08ed
commit 2f85b5ea3c
27 changed files with 143 additions and 88 deletions

View File

@@ -2,6 +2,7 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Server.Power.Components; using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems; using Content.Server.Power.EntitySystems;
@@ -1080,6 +1081,7 @@ namespace Content.IntegrationTests.Tests.Power
var server = pairTracker.Pair.Server; var server = pairTracker.Pair.Server;
var mapManager = server.ResolveDependency<IMapManager>(); var mapManager = server.ResolveDependency<IMapManager>();
var entityManager = server.ResolveDependency<IEntityManager>(); var entityManager = server.ResolveDependency<IEntityManager>();
var _nodeContainer = entityManager.System<NodeContainerSystem>();
CableNode leftNode = default!; CableNode leftNode = default!;
CableNode rightNode = default!; CableNode rightNode = default!;
Node batteryInput = default!; Node batteryInput = default!;
@@ -1107,11 +1109,17 @@ namespace Content.IntegrationTests.Tests.Power
var battery = entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 2)); var battery = entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 2));
var batteryNodeContainer = entityManager.GetComponent<NodeContainerComponent>(battery); var batteryNodeContainer = entityManager.GetComponent<NodeContainerComponent>(battery);
leftNode = entityManager.GetComponent<NodeContainerComponent>(leftEnt).GetNode<CableNode>("power"); if (_nodeContainer.TryGetNode<CableNode>(entityManager.GetComponent<NodeContainerComponent>(leftEnt),
rightNode = entityManager.GetComponent<NodeContainerComponent>(rightEnt).GetNode<CableNode>("power"); "power", out var leftN))
leftNode = leftN;
if (_nodeContainer.TryGetNode<CableNode>(entityManager.GetComponent<NodeContainerComponent>(rightEnt),
"power", out var rightN))
rightNode = rightN;
batteryInput = batteryNodeContainer.GetNode<Node>("input"); if (_nodeContainer.TryGetNode<Node>(batteryNodeContainer, "input", out var nInput))
batteryOutput = batteryNodeContainer.GetNode<Node>("output"); batteryInput = nInput;
if (_nodeContainer.TryGetNode<Node>(batteryNodeContainer, "output", out var nOutput))
batteryOutput = nOutput;
}); });
// Run ticks to allow node groups to update. // Run ticks to allow node groups to update.

View File

@@ -2,6 +2,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Binary.Components;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Examine; using Content.Shared.Examine;
@@ -13,6 +14,7 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
public sealed class GasPassiveGateSystem : EntitySystem public sealed class GasPassiveGateSystem : EntitySystem
{ {
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -27,8 +29,8 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer))
return; return;
if (!nodeContainer.TryGetNode(gate.InletName, out PipeNode? inlet) if (!_nodeContainer.TryGetNode(nodeContainer, gate.InletName, out PipeNode? inlet)
|| !nodeContainer.TryGetNode(gate.OutletName, out PipeNode? outlet)) || !_nodeContainer.TryGetNode(nodeContainer, gate.OutletName, out PipeNode? outlet))
return; return;
var n1 = inlet.Air.TotalMoles; var n1 = inlet.Air.TotalMoles;

View File

@@ -3,6 +3,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Binary.Components;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
@@ -25,6 +26,7 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -61,8 +63,8 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
{ {
if (!pump.Enabled if (!pump.Enabled
|| !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) || !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)
|| !nodeContainer.TryGetNode(pump.InletName, out PipeNode? inlet) || !_nodeContainer.TryGetNode(nodeContainer, pump.InletName, out PipeNode? inlet)
|| !nodeContainer.TryGetNode(pump.OutletName, out PipeNode? outlet)) || !_nodeContainer.TryGetNode(nodeContainer, pump.OutletName, out PipeNode? outlet))
{ {
_ambientSoundSystem.SetAmbience(pump.Owner, false); _ambientSoundSystem.SetAmbience(pump.Owner, false);
return; return;

View File

@@ -4,6 +4,7 @@ using Content.Server.Atmos.Piping.Binary.Components;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.Construction; using Content.Server.Construction;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Audio; using Content.Shared.Audio;
@@ -19,6 +20,7 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
[Dependency] private readonly AppearanceSystem _appearance = default!; [Dependency] private readonly AppearanceSystem _appearance = default!;
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -42,8 +44,8 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
return; return;
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)
|| !nodeContainer.TryGetNode(comp.InletName, out PipeNode? inlet) || !_nodeContainer.TryGetNode(nodeContainer, comp.InletName, out PipeNode? inlet)
|| !nodeContainer.TryGetNode(comp.OutletName, out PipeNode? _)) || !_nodeContainer.TryGetNode(nodeContainer, comp.OutletName, out PipeNode? _))
{ {
return; return;
} }
@@ -69,8 +71,8 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
private void OnUpdate(EntityUid uid, GasRecyclerComponent comp, AtmosDeviceUpdateEvent args) private void OnUpdate(EntityUid uid, GasRecyclerComponent comp, AtmosDeviceUpdateEvent args)
{ {
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)
|| !nodeContainer.TryGetNode(comp.InletName, out PipeNode? inlet) || !_nodeContainer.TryGetNode(nodeContainer, comp.InletName, out PipeNode? inlet)
|| !nodeContainer.TryGetNode(comp.OutletName, out PipeNode? outlet)) || !_nodeContainer.TryGetNode(nodeContainer, comp.OutletName, out PipeNode? outlet))
{ {
_ambientSoundSystem.SetAmbience(comp.Owner, false); _ambientSoundSystem.SetAmbience(comp.Owner, false);
return; return;

View File

@@ -1,5 +1,6 @@
using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Binary.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
using Content.Shared.Audio; using Content.Shared.Audio;
@@ -17,6 +18,7 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
{ {
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -55,8 +57,8 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
{ {
component.Open = value; component.Open = value;
if (TryComp(uid, out NodeContainerComponent? nodeContainer) if (TryComp(uid, out NodeContainerComponent? nodeContainer)
&& nodeContainer.TryGetNode(component.InletName, out PipeNode? inlet) && _nodeContainer.TryGetNode(nodeContainer, component.InletName, out PipeNode? inlet)
&& nodeContainer.TryGetNode(component.OutletName, out PipeNode? outlet)) && _nodeContainer.TryGetNode(nodeContainer, component.OutletName, out PipeNode? outlet))
{ {
if (TryComp<AppearanceComponent>(component.Owner,out var appearance)) if (TryComp<AppearanceComponent>(component.Owner,out var appearance))
{ {

View File

@@ -3,6 +3,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Binary.Components;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
using Content.Shared.Atmos.Piping.Binary.Components; using Content.Shared.Atmos.Piping.Binary.Components;
@@ -27,6 +28,7 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
[Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -64,8 +66,8 @@ namespace Content.Server.Atmos.Piping.Binary.EntitySystems
if (!pump.Enabled if (!pump.Enabled
|| !TryComp(uid, out NodeContainerComponent? nodeContainer) || !TryComp(uid, out NodeContainerComponent? nodeContainer)
|| !TryComp(uid, out AtmosDeviceComponent? device) || !TryComp(uid, out AtmosDeviceComponent? device)
|| !nodeContainer.TryGetNode(pump.InletName, out PipeNode? inlet) || !_nodeContainer.TryGetNode(nodeContainer, pump.InletName, out PipeNode? inlet)
|| !nodeContainer.TryGetNode(pump.OutletName, out PipeNode? outlet)) || !_nodeContainer.TryGetNode(nodeContainer, pump.OutletName, out PipeNode? outlet))
{ {
_ambientSoundSystem.SetAmbience(uid, false); _ambientSoundSystem.SetAmbience(uid, false);
return; return;

View File

@@ -3,6 +3,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Piping.Trinary.Components; using Content.Server.Atmos.Piping.Trinary.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
@@ -28,6 +29,7 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -55,9 +57,9 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems
if (!filter.Enabled if (!filter.Enabled
|| !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) || !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)
|| !EntityManager.TryGetComponent(uid, out AtmosDeviceComponent? device) || !EntityManager.TryGetComponent(uid, out AtmosDeviceComponent? device)
|| !nodeContainer.TryGetNode(filter.InletName, out PipeNode? inletNode) || !_nodeContainer.TryGetNode(nodeContainer, filter.InletName, out PipeNode? inletNode)
|| !nodeContainer.TryGetNode(filter.FilterName, out PipeNode? filterNode) || !_nodeContainer.TryGetNode(nodeContainer, filter.FilterName, out PipeNode? filterNode)
|| !nodeContainer.TryGetNode(filter.OutletName, out PipeNode? outletNode) || !_nodeContainer.TryGetNode(nodeContainer, filter.OutletName, out PipeNode? outletNode)
|| outletNode.Air.Pressure >= Atmospherics.MaxOutputPressure) // No need to transfer if target is full. || outletNode.Air.Pressure >= Atmospherics.MaxOutputPressure) // No need to transfer if target is full.
{ {
_ambientSoundSystem.SetAmbience(filter.Owner, false); _ambientSoundSystem.SetAmbience(filter.Owner, false);
@@ -189,14 +191,11 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems
var gasMixDict = new Dictionary<string, GasMixture?>(); var gasMixDict = new Dictionary<string, GasMixture?>();
nodeContainer.TryGetNode(component.InletName, out PipeNode? inlet); if(_nodeContainer.TryGetNode(nodeContainer, component.InletName, out PipeNode? inlet))
nodeContainer.TryGetNode(component.FilterName, out PipeNode? filterNode);
if(inlet != null)
gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-inlet"), inlet.Air); gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-inlet"), inlet.Air);
if(filterNode != null) if(_nodeContainer.TryGetNode(nodeContainer, component.FilterName, out PipeNode? filterNode))
gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-filter"), filterNode.Air); gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-filter"), filterNode.Air);
if(nodeContainer.TryGetNode(component.OutletName, out PipeNode? outlet)) if(_nodeContainer.TryGetNode(nodeContainer, component.OutletName, out PipeNode? outlet))
gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-outlet"), outlet.Air); gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-outlet"), outlet.Air);
args.GasMixtures = gasMixDict; args.GasMixtures = gasMixDict;

View File

@@ -3,6 +3,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Piping.Trinary.Components; using Content.Server.Atmos.Piping.Trinary.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
@@ -24,6 +25,7 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -59,9 +61,9 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer))
return; return;
if (!nodeContainer.TryGetNode(mixer.InletOneName, out PipeNode? inletOne) if (!_nodeContainer.TryGetNode(nodeContainer, mixer.InletOneName, out PipeNode? inletOne)
|| !nodeContainer.TryGetNode(mixer.InletTwoName, out PipeNode? inletTwo) || !_nodeContainer.TryGetNode(nodeContainer, mixer.InletTwoName, out PipeNode? inletTwo)
|| !nodeContainer.TryGetNode(mixer.OutletName, out PipeNode? outlet)) || !_nodeContainer.TryGetNode(nodeContainer, mixer.OutletName, out PipeNode? outlet))
{ {
_ambientSoundSystem.SetAmbience(mixer.Owner, false); _ambientSoundSystem.SetAmbience(mixer.Owner, false);
return; return;
@@ -216,14 +218,11 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems
var gasMixDict = new Dictionary<string, GasMixture?>(); var gasMixDict = new Dictionary<string, GasMixture?>();
nodeContainer.TryGetNode(component.InletOneName, out PipeNode? inletOne); if(_nodeContainer.TryGetNode(nodeContainer, component.InletOneName, out PipeNode? inletOne))
nodeContainer.TryGetNode(component.InletTwoName, out PipeNode? inletTwo);
if(inletOne != null)
gasMixDict.Add($"{inletOne.CurrentPipeDirection} {Loc.GetString("gas-analyzer-window-text-inlet")}", inletOne.Air); gasMixDict.Add($"{inletOne.CurrentPipeDirection} {Loc.GetString("gas-analyzer-window-text-inlet")}", inletOne.Air);
if(inletTwo != null) if(_nodeContainer.TryGetNode(nodeContainer, component.InletTwoName, out PipeNode? inletTwo))
gasMixDict.Add($"{inletTwo.CurrentPipeDirection} {Loc.GetString("gas-analyzer-window-text-inlet")}", inletTwo.Air); gasMixDict.Add($"{inletTwo.CurrentPipeDirection} {Loc.GetString("gas-analyzer-window-text-inlet")}", inletTwo.Air);
if(nodeContainer.TryGetNode(component.OutletName, out PipeNode? outlet)) if(_nodeContainer.TryGetNode(nodeContainer, component.OutletName, out PipeNode? outlet))
gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-outlet"), outlet.Air); gasMixDict.Add(Loc.GetString("gas-analyzer-window-text-outlet"), outlet.Air);
args.GasMixtures = gasMixDict; args.GasMixtures = gasMixDict;

View File

@@ -2,6 +2,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Piping.Trinary.Components; using Content.Server.Atmos.Piping.Trinary.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
using Content.Shared.Audio; using Content.Shared.Audio;
@@ -18,6 +19,7 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -36,9 +38,9 @@ namespace Content.Server.Atmos.Piping.Trinary.EntitySystems
{ {
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)
|| !EntityManager.TryGetComponent(uid, out AtmosDeviceComponent? device) || !EntityManager.TryGetComponent(uid, out AtmosDeviceComponent? device)
|| !nodeContainer.TryGetNode(comp.InletName, out PipeNode? inletNode) || !_nodeContainer.TryGetNode(nodeContainer, comp.InletName, out PipeNode? inletNode)
|| !nodeContainer.TryGetNode(comp.ControlName, out PipeNode? controlNode) || !_nodeContainer.TryGetNode(nodeContainer, comp.ControlName, out PipeNode? controlNode)
|| !nodeContainer.TryGetNode(comp.OutletName, out PipeNode? outletNode)) || !_nodeContainer.TryGetNode(nodeContainer, comp.OutletName, out PipeNode? outletNode))
{ {
_ambientSoundSystem.SetAmbience(comp.Owner, false); _ambientSoundSystem.SetAmbience(comp.Owner, false);
comp.Enabled = false; comp.Enabled = false;

View File

@@ -5,6 +5,7 @@ using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Piping.Unary.Components; using Content.Server.Atmos.Piping.Unary.Components;
using Content.Server.Cargo.Systems; using Content.Server.Cargo.Systems;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.NodeGroups;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Server.Popups; using Content.Server.Popups;
@@ -29,6 +30,7 @@ public sealed class GasCanisterSystem : EntitySystem
[Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly SharedHandsSystem _hands = default!;
[Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly UserInterfaceSystem _ui = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -92,7 +94,7 @@ public sealed class GasCanisterSystem : EntitySystem
string? tankLabel = null; string? tankLabel = null;
var tankPressure = 0f; var tankPressure = 0f;
if (nodeContainer.TryGetNode(canister.PortName, out PipeNode? portNode) && portNode.NodeGroup?.Nodes.Count > 1) if (_nodeContainer.TryGetNode(nodeContainer, canister.PortName, out PipeNode? portNode) && portNode.NodeGroup?.Nodes.Count > 1)
portStatus = true; portStatus = true;
if (containerManager.TryGetContainer(canister.ContainerName, out var tankContainer) if (containerManager.TryGetContainer(canister.ContainerName, out var tankContainer)
@@ -165,7 +167,7 @@ public sealed class GasCanisterSystem : EntitySystem
|| !TryComp<AppearanceComponent>(uid, out var appearance)) || !TryComp<AppearanceComponent>(uid, out var appearance))
return; return;
if (!nodeContainer.TryGetNode(canister.PortName, out PortablePipeNode? portNode)) if (!_nodeContainer.TryGetNode(nodeContainer, canister.PortName, out PortablePipeNode? portNode))
return; return;
if (portNode.NodeGroup is PipeNet {NodeCount: > 1} net) if (portNode.NodeGroup is PipeNet {NodeCount: > 1} net)

View File

@@ -2,6 +2,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Piping.Unary.Components; using Content.Server.Atmos.Piping.Unary.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping;
using Content.Shared.Interaction; using Content.Shared.Interaction;
@@ -17,6 +18,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -57,7 +59,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
if (!TryComp(uid, out AtmosDeviceComponent? device)) if (!TryComp(uid, out AtmosDeviceComponent? device))
return; return;
if (!nodeContainer.TryGetNode(injector.InletName, out PipeNode? inlet)) if (!_nodeContainer.TryGetNode(nodeContainer, injector.InletName, out PipeNode? inlet))
return; return;
var environment = _atmosphereSystem.GetContainingMixture(uid, true, true); var environment = _atmosphereSystem.GetContainingMixture(uid, true, true);

View File

@@ -2,6 +2,7 @@ using Content.Server.Atmos.EntitySystems;
using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Piping.Unary.Components; using Content.Server.Atmos.Piping.Unary.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using JetBrains.Annotations; using JetBrains.Annotations;
@@ -12,6 +13,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
public sealed class GasPassiveVentSystem : EntitySystem public sealed class GasPassiveVentSystem : EntitySystem
{ {
[Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -30,7 +32,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer))
return; return;
if (!nodeContainer.TryGetNode(vent.InletName, out PipeNode? inlet)) if (!_nodeContainer.TryGetNode(nodeContainer, vent.InletName, out PipeNode? inlet))
return; return;
var environmentPressure = environment.Pressure; var environmentPressure = environment.Pressure;

View File

@@ -2,6 +2,7 @@ using System.Diagnostics.CodeAnalysis;
using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Binary.Components;
using Content.Server.Atmos.Piping.Unary.Components; using Content.Server.Atmos.Piping.Unary.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.Atmos.Piping.Unary.Components;
using Content.Shared.Construction.Components; using Content.Shared.Construction.Components;
@@ -16,6 +17,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
{ {
[Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -41,7 +43,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer))
return; return;
if (!nodeContainer.TryGetNode(portable.PortName, out PipeNode? portableNode)) if (!_nodeContainer.TryGetNode(nodeContainer, portable.PortName, out PipeNode? portableNode))
return; return;
portableNode.ConnectionsEnabled = args.Anchored; portableNode.ConnectionsEnabled = args.Anchored;

View File

@@ -3,6 +3,7 @@ using Content.Server.Atmos.Piping.Components;
using Content.Server.Atmos.Piping.Unary.Components; using Content.Server.Atmos.Piping.Unary.Components;
using Content.Server.Construction; using Content.Server.Construction;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Shared.Atmos; using Content.Shared.Atmos;
using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.Atmos.Piping.Unary.Components;
@@ -20,6 +21,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
[Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly PowerReceiverSystem _power = default!; [Dependency] private readonly PowerReceiverSystem _power = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -40,7 +42,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
if (!(thermoMachine.Enabled && _power.IsPowered(uid)) if (!(thermoMachine.Enabled && _power.IsPowered(uid))
|| !TryComp(uid, out NodeContainerComponent? nodeContainer) || !TryComp(uid, out NodeContainerComponent? nodeContainer)
|| !nodeContainer.TryGetNode(thermoMachine.InletName, out PipeNode? inlet)) || !_nodeContainer.TryGetNode(nodeContainer, thermoMachine.InletName, out PipeNode? inlet))
{ {
return; return;
} }

View File

@@ -8,6 +8,7 @@ using Content.Server.DeviceNetwork;
using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Components;
using Content.Server.DeviceNetwork.Systems; using Content.Server.DeviceNetwork.Systems;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Server.Power.Components; using Content.Server.Power.Components;
using Content.Shared.Atmos; using Content.Shared.Atmos;
@@ -31,6 +32,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
[Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -66,7 +68,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
if (!vent.Enabled if (!vent.Enabled
|| !TryComp(uid, out AtmosDeviceComponent? device) || !TryComp(uid, out AtmosDeviceComponent? device)
|| !TryComp(uid, out NodeContainerComponent? nodeContainer) || !TryComp(uid, out NodeContainerComponent? nodeContainer)
|| !nodeContainer.TryGetNode(nodeName, out PipeNode? pipe)) || !_nodeContainer.TryGetNode(nodeContainer, nodeName, out PipeNode? pipe))
{ {
return; return;
} }
@@ -303,7 +305,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
VentPumpDirection.Siphoning => component.Outlet, VentPumpDirection.Siphoning => component.Outlet,
_ => throw new ArgumentOutOfRangeException() _ => throw new ArgumentOutOfRangeException()
}; };
if(nodeContainer.TryGetNode(nodeName, out PipeNode? pipe)) if (_nodeContainer.TryGetNode(nodeContainer, nodeName, out PipeNode? pipe))
gasMixDict.Add(nodeName, pipe.Air); gasMixDict.Add(nodeName, pipe.Air);
args.GasMixtures = gasMixDict; args.GasMixtures = gasMixDict;

View File

@@ -7,6 +7,7 @@ using Content.Server.DeviceNetwork;
using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Components;
using Content.Server.DeviceNetwork.Systems; using Content.Server.DeviceNetwork.Systems;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Server.Power.Components; using Content.Server.Power.Components;
using Content.Shared.Atmos; using Content.Shared.Atmos;
@@ -29,6 +30,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
[Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!;
[Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] private readonly TransformSystem _transformSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -56,7 +58,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems
if (!scrubber.Enabled if (!scrubber.Enabled
|| !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) || !EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)
|| !nodeContainer.TryGetNode(scrubber.OutletName, out PipeNode? outlet)) || !_nodeContainer.TryGetNode(nodeContainer, scrubber.OutletName, out PipeNode? outlet))
return; return;
var xform = Transform(uid); var xform = Transform(uid);

View File

@@ -14,6 +14,7 @@ using Content.Server.NodeContainer.NodeGroups;
using Content.Server.Audio; using Content.Server.Audio;
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Construction; using Content.Server.Construction;
using Content.Server.NodeContainer.EntitySystems;
using Content.Shared.Database; using Content.Shared.Database;
namespace Content.Server.Atmos.Portable namespace Content.Server.Atmos.Portable
@@ -29,6 +30,7 @@ namespace Content.Server.Atmos.Portable
[Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly AmbientSoundSystem _ambientSound = default!; [Dependency] private readonly AmbientSoundSystem _ambientSound = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -60,7 +62,7 @@ namespace Content.Server.Atmos.Portable
// If we are on top of a connector port, empty into it. // If we are on top of a connector port, empty into it.
if (TryComp<NodeContainerComponent>(uid, out var nodeContainer) if (TryComp<NodeContainerComponent>(uid, out var nodeContainer)
&& nodeContainer.TryGetNode(component.PortName, out PortablePipeNode? portableNode) && _nodeContainer.TryGetNode(nodeContainer, component.PortName, out PortablePipeNode? portableNode)
&& portableNode.ConnectionsEnabled) && portableNode.ConnectionsEnabled)
{ {
_atmosphereSystem.React(component.Air, portableNode); _atmosphereSystem.React(component.Air, portableNode);
@@ -104,7 +106,7 @@ namespace Content.Server.Atmos.Portable
if (!TryComp(uid, out NodeContainerComponent? nodeContainer)) if (!TryComp(uid, out NodeContainerComponent? nodeContainer))
return; return;
if (!nodeContainer.TryGetNode(component.PortName, out PipeNode? portableNode)) if (!_nodeContainer.TryGetNode(nodeContainer, component.PortName, out PipeNode? portableNode))
return; return;
portableNode.ConnectionsEnabled = (args.Anchored && _gasPortableSystem.FindGasPortIn(Transform(uid).GridUid, Transform(uid).Coordinates, out _)); portableNode.ConnectionsEnabled = (args.Anchored && _gasPortableSystem.FindGasPortIn(Transform(uid).GridUid, Transform(uid).Coordinates, out _));
@@ -166,7 +168,7 @@ namespace Content.Server.Atmos.Portable
// If it's connected to a port, include the port side // If it's connected to a port, include the port side
if (TryComp(uid, out NodeContainerComponent? nodeContainer)) if (TryComp(uid, out NodeContainerComponent? nodeContainer))
{ {
if(nodeContainer.TryGetNode(component.PortName, out PipeNode? port)) if (_nodeContainer.TryGetNode(nodeContainer, component.PortName, out PipeNode? port))
gasMixDict.Add(component.PortName, port.Air); gasMixDict.Add(component.PortName, port.Air);
} }
args.GasMixtures = gasMixDict; args.GasMixtures = gasMixDict;

View File

@@ -1,5 +1,6 @@
using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using JetBrains.Annotations; using JetBrains.Annotations;
using Content.Server.Power.EntitySystems; using Content.Server.Power.EntitySystems;
using Content.Server.Power.Nodes; using Content.Server.Power.Nodes;
@@ -9,6 +10,8 @@ namespace Content.Server.DeviceNetwork.Systems
[UsedImplicitly] [UsedImplicitly]
public sealed class ApcNetworkSystem : EntitySystem public sealed class ApcNetworkSystem : EntitySystem
{ {
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
@@ -36,11 +39,11 @@ namespace Content.Server.DeviceNetwork.Systems
{ {
if (!EntityManager.TryGetComponent(args.Provider.Owner, out NodeContainerComponent? nodeContainer)) return; if (!EntityManager.TryGetComponent(args.Provider.Owner, out NodeContainerComponent? nodeContainer)) return;
if (nodeContainer.TryGetNode("power", out CableNode? node)) if (_nodeContainer.TryGetNode(nodeContainer, "power", out CableNode? node))
{ {
component.ConnectedNode = node; component.ConnectedNode = node;
} }
else if (nodeContainer.TryGetNode("output", out CableDeviceNode? deviceNode)) else if (_nodeContainer.TryGetNode(nodeContainer, "output", out CableDeviceNode? deviceNode))
{ {
component.ConnectedNode = deviceNode; component.ConnectedNode = deviceNode;
} }

View File

@@ -1,4 +1,5 @@
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Robust.Shared.Map.Components; using Robust.Shared.Map.Components;
@@ -18,10 +19,12 @@ namespace Content.Server.Electrocution
MapGridComponent? grid, MapGridComponent? grid,
IEntityManager entMan) IEntityManager entMan)
{ {
var _nodeContainer = entMan.System<NodeContainerSystem>();
if (!nodeQuery.TryGetComponent(CableEntity, out var nodeContainer)) if (!nodeQuery.TryGetComponent(CableEntity, out var nodeContainer))
yield break; yield break;
if (nodeContainer.TryGetNode(NodeName, out Node? node)) if (_nodeContainer.TryGetNode(nodeContainer, NodeName, out Node? node))
yield return node; yield return node;
} }
} }

View File

@@ -48,6 +48,7 @@ public sealed class ElectrocutionSystem : SharedElectrocutionSystem
[Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly TagSystem _tag = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
private const string StatusEffectKey = "Electrocution"; private const string StatusEffectKey = "Electrocution";
private const string DamageType = "Shock"; private const string DamageType = "Shock";
@@ -265,7 +266,7 @@ public sealed class ElectrocutionSystem : SharedElectrocutionSystem
Node? TryNode(string? id) Node? TryNode(string? id)
{ {
if (id != null && if (id != null &&
nodeContainer.TryGetNode<Node>(id, out var tryNode) && _nodeContainer.TryGetNode<Node>(nodeContainer, id, out var tryNode) &&
tryNode.NodeGroup is IBasePowerNet { NetworkNode: { LastCombinedSupply: > 0 } }) tryNode.NodeGroup is IBasePowerNet { NetworkNode: { LastCombinedSupply: > 0 } })
{ {
return tryNode; return tryNode;
@@ -320,7 +321,12 @@ public sealed class ElectrocutionSystem : SharedElectrocutionSystem
return true; return true;
var electrocutionEntity = Spawn($"VirtualElectrocutionLoad{node.NodeGroupID}", sourceTransform.Coordinates); var electrocutionEntity = Spawn($"VirtualElectrocutionLoad{node.NodeGroupID}", sourceTransform.Coordinates);
var electrocutionNode = Comp<NodeContainerComponent>(electrocutionEntity).GetNode<ElectrocutionNode>("electrocution");
var nodeContainer = Comp<NodeContainerComponent>(electrocutionEntity);
if (!_nodeContainer.TryGetNode<ElectrocutionNode>(nodeContainer, "electrocution", out var electrocutionNode))
return false;
var electrocutionComponent = Comp<ElectrocutionComponent>(electrocutionEntity); var electrocutionComponent = Comp<ElectrocutionComponent>(electrocutionEntity);
// This shows up in the power monitor. // This shows up in the power monitor.

View File

@@ -10,6 +10,7 @@ using Content.Server.Chemistry.EntitySystems;
using Content.Server.Climbing; using Content.Server.Climbing;
using Content.Server.Medical.Components; using Content.Server.Medical.Components;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.NodeGroups;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Server.Power.Components; using Content.Server.Power.Components;
@@ -49,6 +50,7 @@ public sealed partial class CryoPodSystem: SharedCryoPodSystem
[Dependency] private readonly MetaDataSystem _metaDataSystem = default!; [Dependency] private readonly MetaDataSystem _metaDataSystem = default!;
[Dependency] private readonly ReactiveSystem _reactiveSystem = default!; [Dependency] private readonly ReactiveSystem _reactiveSystem = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -231,7 +233,7 @@ public sealed partial class CryoPodSystem: SharedCryoPodSystem
if (!TryComp(uid, out NodeContainerComponent? nodeContainer)) if (!TryComp(uid, out NodeContainerComponent? nodeContainer))
return; return;
if (!nodeContainer.TryGetNode(cryoPod.PortName, out PortablePipeNode? portNode)) if (!_nodeContainer.TryGetNode(nodeContainer, cryoPod.PortName, out PortablePipeNode? portNode))
return; return;
if (!TryComp(uid, out CryoPodAirComponent? cryoPodAir)) if (!TryComp(uid, out CryoPodAirComponent? cryoPodAir))
@@ -254,7 +256,7 @@ public sealed partial class CryoPodSystem: SharedCryoPodSystem
// If it's connected to a port, include the port side // If it's connected to a port, include the port side
if (TryComp(uid, out NodeContainerComponent? nodeContainer)) if (TryComp(uid, out NodeContainerComponent? nodeContainer))
{ {
if(nodeContainer.TryGetNode(component.PortName, out PipeNode? port)) if (_nodeContainer.TryGetNode(nodeContainer, component.PortName, out PipeNode? port))
gasMixDict.Add(component.PortName, port.Air); gasMixDict.Add(component.PortName, port.Air);
} }
args.GasMixtures = gasMixDict; args.GasMixtures = gasMixDict;

View File

@@ -2,6 +2,7 @@ using Content.Server.NodeContainer.Nodes;
using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.NodeGroups;
using Content.Shared.Examine; using Content.Shared.Examine;
using JetBrains.Annotations; using JetBrains.Annotations;
using System.Diagnostics.CodeAnalysis;
namespace Content.Server.NodeContainer.EntitySystems namespace Content.Server.NodeContainer.EntitySystems
{ {
@@ -27,6 +28,24 @@ namespace Content.Server.NodeContainer.EntitySystems
SubscribeLocalEvent<NodeContainerComponent, ExaminedEvent>(OnExamine); SubscribeLocalEvent<NodeContainerComponent, ExaminedEvent>(OnExamine);
} }
public bool TryGetNode<T>(NodeContainerComponent component, string? identifier, [NotNullWhen(true)] out T? node) where T : Node
{
if (identifier == null)
{
node = null;
return false;
}
if (component.Nodes.TryGetValue(identifier, out var n) && n is T t)
{
node = t;
return true;
}
node = null;
return false;
}
private void OnInitEvent(EntityUid uid, NodeContainerComponent component, ComponentInit args) private void OnInitEvent(EntityUid uid, NodeContainerComponent component, ComponentInit args)
{ {
foreach (var (key, node) in component.Nodes) foreach (var (key, node) in component.Nodes)

View File

@@ -13,28 +13,5 @@ namespace Content.Server.NodeContainer
[DataField("nodes", readOnly: true)] public Dictionary<string, Node> Nodes { get; } = new(); [DataField("nodes", readOnly: true)] public Dictionary<string, Node> Nodes { get; } = new();
[DataField("examinable")] public bool Examinable = false; [DataField("examinable")] public bool Examinable = false;
public T GetNode<T>(string identifier) where T : Node
{
return (T) Nodes[identifier];
}
public bool TryGetNode<T>(string? identifier, [NotNullWhen(true)] out T? node) where T : Node
{
if (identifier == null)
{
node = null;
return false;
}
if (Nodes.TryGetValue(identifier, out var n) && n is T t)
{
node = t;
return true;
}
node = null;
return false;
}
} }
} }

View File

@@ -14,6 +14,7 @@ namespace Content.Server.Power.EntitySystems
{ {
[Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -24,10 +25,10 @@ namespace Content.Server.Power.EntitySystems
private void UpdateAppearance(EntityUid uid, CableVisComponent cableVis, ref NodeGroupsRebuilt args) private void UpdateAppearance(EntityUid uid, CableVisComponent cableVis, ref NodeGroupsRebuilt args)
{ {
if (cableVis.Node == null) if (!TryComp(uid, out NodeContainerComponent? nodeContainer) || !TryComp(uid, out AppearanceComponent? appearance))
return; return;
if (!TryComp(uid, out NodeContainerComponent? nodeContainer) || !TryComp(uid, out AppearanceComponent? appearance)) if (!_nodeContainer.TryGetNode<CableNode>(nodeContainer, cableVis.Node, out var node))
return; return;
var transform = Transform(uid); var transform = Transform(uid);
@@ -36,7 +37,6 @@ namespace Content.Server.Power.EntitySystems
var mask = WireVisDirFlags.None; var mask = WireVisDirFlags.None;
var tile = grid.TileIndicesFor(transform.Coordinates); var tile = grid.TileIndicesFor(transform.Coordinates);
var node = nodeContainer.GetNode<CableNode>(cableVis.Node);
foreach (var reachable in node.ReachableNodes) foreach (var reachable in node.ReachableNodes)
{ {

View File

@@ -1,5 +1,6 @@
using Content.Shared.Power; using Content.Shared.Power;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Content.Server.Power.Components; using Content.Server.Power.Components;
using Content.Server.Power.NodeGroups; using Content.Server.Power.NodeGroups;
@@ -14,8 +15,8 @@ internal sealed class PowerMonitoringConsoleSystem : EntitySystem
private float _updateTimer = 0.0f; private float _updateTimer = 0.0f;
private const float UpdateTime = 1.0f; private const float UpdateTime = 1.0f;
[Dependency] [Dependency] private UserInterfaceSystem _userInterfaceSystem = default!;
private UserInterfaceSystem _userInterfaceSystem = default!; [Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
public override void Update(float frameTime) public override void Update(float frameTime)
{ {
@@ -48,7 +49,10 @@ internal sealed class PowerMonitoringConsoleSystem : EntitySystem
return new PowerMonitoringConsoleEntry(md.EntityName, prototype, rate, isBattery); return new PowerMonitoringConsoleEntry(md.EntityName, prototype, rate, isBattery);
} }
// Right, so, here's what needs to be considered here. // Right, so, here's what needs to be considered here.
var netQ = ncComp.GetNode<Node>("hv").NodeGroup as PowerNet; if (!_nodeContainer.TryGetNode<Node>(ncComp, "hv", out var node))
return;
var netQ = node.NodeGroup as PowerNet;
if (netQ != null) if (netQ != null)
{ {
foreach (PowerConsumerComponent pcc in netQ.Consumers) foreach (PowerConsumerComponent pcc in netQ.Consumers)

View File

@@ -1,4 +1,5 @@
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.Nodes; using Content.Server.NodeContainer.Nodes;
using Robust.Shared.Map.Components; using Robust.Shared.Map.Components;
@@ -10,6 +11,8 @@ namespace Content.Server.Spreader;
/// </summary> /// </summary>
public sealed class SpreaderNode : Node public sealed class SpreaderNode : Node
{ {
// [Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
/// <inheritdoc/> /// <inheritdoc/>
public override IEnumerable<Node> GetReachableNodes(TransformComponent xform, EntityQuery<NodeContainerComponent> nodeQuery, EntityQuery<TransformComponent> xformQuery, public override IEnumerable<Node> GetReachableNodes(TransformComponent xform, EntityQuery<NodeContainerComponent> nodeQuery, EntityQuery<TransformComponent> xformQuery,
MapGridComponent? grid, IEntityManager entMan) MapGridComponent? grid, IEntityManager entMan)
@@ -19,10 +22,12 @@ public sealed class SpreaderNode : Node
entMan.System<SpreaderSystem>().GetNeighbors(xform.Owner, Name, out _, out _, out var neighbors); entMan.System<SpreaderSystem>().GetNeighbors(xform.Owner, Name, out _, out _, out var neighbors);
var _nodeContainer = entMan.System<NodeContainerSystem>();
foreach (var neighbor in neighbors) foreach (var neighbor in neighbors)
{ {
if (!nodeQuery.TryGetComponent(neighbor, out var nodeContainer) || if (!nodeQuery.TryGetComponent(neighbor, out var nodeContainer) ||
!nodeContainer.TryGetNode<SpreaderNode>(Name, out var neighborNode)) !_nodeContainer.TryGetNode<SpreaderNode>(nodeContainer, Name, out var neighborNode))
{ {
continue; continue;
} }

View File

@@ -1,6 +1,7 @@
using Content.Server.Atmos.Components; using Content.Server.Atmos.Components;
using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.EntitySystems;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
using Content.Server.NodeContainer.EntitySystems;
using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.NodeGroups;
using Content.Server.Shuttles.Components; using Content.Server.Shuttles.Components;
using Content.Shared.Atmos; using Content.Shared.Atmos;
@@ -24,6 +25,7 @@ public sealed class SpreaderSystem : EntitySystem
[Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly IRobustRandom _robustRandom = default!;
[Dependency] private readonly NodeContainerSystem _nodeContainer = default!;
private static readonly TimeSpan SpreadCooldown = TimeSpan.FromSeconds(1); private static readonly TimeSpan SpreadCooldown = TimeSpan.FromSeconds(1);
@@ -138,13 +140,13 @@ public sealed class SpreaderSystem : EntitySystem
foreach (var sGroup in _spreaderGroups) foreach (var sGroup in _spreaderGroups)
{ {
// Cleanup // Cleanup
if (!nodeQuery.TryGetComponent(uid, out var nodeComponent)) if (!nodeQuery.TryGetComponent(uid, out var nodeContainer))
{ {
RemCompDeferred<EdgeSpreaderComponent>(uid); RemCompDeferred<EdgeSpreaderComponent>(uid);
continue; continue;
} }
if (!nodeComponent.TryGetNode<SpreaderNode>(sGroup, out var node)) if (!_nodeContainer.TryGetNode<SpreaderNode>(nodeContainer, sGroup, out var node))
continue; continue;
// Not allowed this tick? // Not allowed this tick?