using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.Nodes; using Content.Shared.Examine; using Robust.Shared.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; namespace Content.Server.NodeContainer { /// /// Creates and maintains a set of s. /// [RegisterComponent] public class NodeContainerComponent : Component, IExamine { public override string Name => "NodeContainer"; [DataField("nodes")] [ViewVariables] public Dictionary Nodes { get; } = new(); [DataField("examinable")] private bool _examinable = false; public T GetNode(string identifier) where T : Node { return (T) Nodes[identifier]; } public bool TryGetNode(string identifier, [NotNullWhen(true)] out T? node) where T : Node { if (Nodes.TryGetValue(identifier, out var n) && n is T t) { node = t; return true; } node = null; return false; } public void Examine(FormattedMessage message, bool inDetailsRange) { if (!_examinable || !inDetailsRange) return; foreach (var node in Nodes.Values) { if (node == null) continue; switch (node.NodeGroupID) { case NodeGroupID.HVPower: message.AddMarkup( Loc.GetString("node-container-component-on-examine-details-hvpower") + "\n"); break; case NodeGroupID.MVPower: message.AddMarkup( Loc.GetString("node-container-component-on-examine-details-mvpower") + "\n"); break; case NodeGroupID.Apc: message.AddMarkup( Loc.GetString("node-container-component-on-examine-details-apc") + "\n"); break; } } } } }