using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using System.Collections.Generic; namespace Content.Server.GameObjects.Components.NodeContainer { /// /// Creates and maintains a set of s. /// [RegisterComponent] public class NodeContainerComponent : Component { public override string Name => "NodeContainer"; [ViewVariables] public IReadOnlyList Nodes => _nodes; private List _nodes = new List(); #pragma warning disable 649 [Dependency] private readonly INodeFactory _nodeFactory; #pragma warning restore 649 /// /// A set of s and implementation names /// to be created and held in this container. /// [ViewVariables] private Dictionary> _nodeTypes; public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); serializer.DataField(ref _nodeTypes, "nodeTypes", new Dictionary> { }); } protected override void Startup() { base.Startup(); foreach (var nodeType in _nodeTypes) { var nodeGroupID = nodeType.Key; foreach (var nodeName in nodeType.Value) { _nodes.Add(MakeNewNode(nodeName, nodeGroupID, Owner)); } } foreach (var node in _nodes) { node.OnContainerInitialize(); } } public override void OnRemove() { foreach (var node in _nodes) { node.OnContainerRemove(); } _nodes = null; base.OnRemove(); } private Node MakeNewNode(string nodeName, NodeGroupID groupID, IEntity owner) { return _nodeFactory.MakeNode(nodeName, groupID, owner); } } }