using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; using Content.Shared.NodeContainer; using Robust.Shared.Map.Components; namespace Content.Server.Power.Nodes { /// /// Type of node that connects to a below it. /// [DataDefinition] [Virtual] public partial class CableDeviceNode : Node { /// /// If disabled, this cable device will never connect. /// /// /// If you change this, /// you must manually call to update the node connections. /// [DataField("enabled")] public bool Enabled { get; set; } = true; public override bool Connectable(IEntityManager entMan, TransformComponent? xform = null) { if (!Enabled) return false; return base.Connectable(entMan, xform); } public override IEnumerable GetReachableNodes( Entity xform, EntityQuery nodeQuery, EntityQuery xformQuery, Entity? grid, IEntityManager entMan) { if (!xform.Comp.Anchored || grid is not { } gridEnt) yield break; var mapSystem = entMan.System(); var gridIndex = mapSystem.TileIndicesFor(gridEnt, xform.Comp.Coordinates); foreach (var node in NodeHelpers.GetNodesInTile(nodeQuery, gridEnt, gridIndex, mapSystem)) { if (node is CableNode) yield return node; } } } }