using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; 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(); public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); serializer.DataField(ref _nodes, "nodes", new List()); } public override void Initialize() { base.Initialize(); foreach (var node in _nodes) { node.Initialize(Owner); } Owner.EntityManager.EventBus.SubscribeEvent(EventSource.Local, this, RotateEvent); } protected override void Startup() { base.Startup(); foreach (var node in _nodes) { node.OnContainerStartup(); } } public override void OnRemove() { foreach (var node in _nodes) { node.OnContainerRemove(); } base.OnRemove(); } private void RotateEvent(RotateEvent ev) { if (ev.Sender != Owner || ev.NewRotation == ev.OldRotation) return; foreach (var rotatableNode in Nodes.OfType()) { rotatableNode.RotateEvent(ev); } } } }