using Content.Shared.GameObjects.Components.Research; using Content.Shared.Research; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; namespace Content.Server.GameObjects.Components.Research { [RegisterComponent] [ComponentReference(typeof(SharedLatheDatabaseComponent))] public class ProtolatheDatabaseComponent : SharedProtolatheDatabaseComponent { public override string Name => "ProtolatheDatabase"; public override ComponentState GetComponentState() { return new ProtolatheDatabaseState(GetRecipeIdList()); } /// /// Adds unlocked recipes from technologies to the database. /// public void Sync() { if (!Owner.TryGetComponent(out TechnologyDatabaseComponent database)) return; var prototypeManager = IoCManager.Resolve(); 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; } } }