using System; using System.Collections.Generic; using Content.Shared.Research; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.Research { [ComponentReference(typeof(SharedLatheDatabaseComponent))] public class SharedProtolatheDatabaseComponent : SharedLatheDatabaseComponent { public override string Name => "ProtolatheDatabase"; public sealed override uint? NetID => ContentNetIDs.PROTOLATHE_DATABASE; private List _protolatheRecipes = new List(); /// /// A full list of recipes this protolathe can print. /// public List ProtolatheRecipes => _protolatheRecipes; public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); if (serializer.Reading) { var recipes = serializer.ReadDataField("protolatherecipes", new List()); var prototypeManager = IoCManager.Resolve(); foreach (var id in recipes) { if (!prototypeManager.TryIndex(id, out LatheRecipePrototype recipe)) continue; _protolatheRecipes.Add(recipe); } } else if (serializer.Writing) { var recipes = GetProtolatheRecipeIdList(); serializer.DataField(ref recipes, "protolatherecipes", new List()); } } /// /// Returns a list of the allowed protolathe recipe IDs. /// /// A list of recipe IDs allowed public List GetProtolatheRecipeIdList() { var list = new List(); foreach (var recipe in ProtolatheRecipes) { list.Add(recipe.ID); } return list; } } [NetSerializable, Serializable] public class ProtolatheDatabaseState : ComponentState { public readonly List Recipes; public ProtolatheDatabaseState(List recipes) : base(ContentNetIDs.PROTOLATHE_DATABASE) { Recipes = recipes; } } }