using Content.Shared.Construction.Components; using JetBrains.Annotations; using Robust.Shared.Containers; namespace Content.Shared.Construction.NodeEntities; /// /// Works for both and /// because duplicating code just for this is really stinky. /// [UsedImplicitly] [DataDefinition] public sealed partial class BoardNodeEntity : IGraphNodeEntity { [DataField("container")] public string Container { get; private set; } = string.Empty; public string? GetId(EntityUid? uid, EntityUid? userUid, GraphNodeEntityArgs args) { if (uid == null) return null; var containerSystem = args.EntityManager.EntitySysManager.GetEntitySystem(); if (!containerSystem.TryGetContainer(uid.Value, Container, out var container) || container.ContainedEntities.Count == 0) return null; var board = container.ContainedEntities[0]; // There should not be a case where both of these components exist on the same entity... if (args.EntityManager.TryGetComponent(board, out MachineBoardComponent? machine)) return machine.Prototype; if (args.EntityManager.TryGetComponent(board, out ComputerBoardComponent? computer)) return computer.Prototype; return null; } }