using System.Linq; using Content.Server.Research.Components; using Content.Shared.Lathe; using Content.Shared.Research.Prototypes; using Robust.Shared.Prototypes; namespace Content.Server.Lathe.Components { [RegisterComponent] [ComponentReference(typeof(SharedLatheDatabaseComponent))] public sealed class ProtolatheDatabaseComponent : SharedProtolatheDatabaseComponent { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; public override ComponentState GetComponentState() { return new ProtolatheDatabaseState(GetRecipeIdList()); } /// /// Adds unlocked recipes from technologies to the database. /// public void Sync() { if (!IoCManager.Resolve().TryGetComponent(Owner, out TechnologyDatabaseComponent? database)) return; foreach (var technology in database.Technologies) { foreach (var id in technology.UnlockedRecipes) { var recipe = (LatheRecipePrototype) _prototypeManager.Index(typeof(LatheRecipePrototype), id); UnlockRecipe(recipe); } } Dirty(); } /// /// Unlocks a recipe but only if it's one of the allowed recipes on this protolathe. /// /// The recipe /// Whether it could add it or not. public bool UnlockRecipe(LatheRecipePrototype recipe) { if (!ProtolatheRecipes.Contains(recipe)) return false; AddRecipe(recipe); return true; } } }