#nullable enable using System; using System.Collections.Generic; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; namespace Content.Shared.Research { [NetSerializable, Serializable, Prototype("technology")] public class TechnologyPrototype : IPrototype { private string _name = string.Empty; private string _id = string.Empty; private SpriteSpecifier _icon = SpriteSpecifier.Invalid; private string _description = string.Empty; private int _requiredPoints; private List _requiredTechnologies = new(); private List _unlockedRecipes = new(); /// /// The ID of this technology prototype. /// [ViewVariables] public string ID => _id; /// /// The name this technology will have on user interfaces. /// [ViewVariables] public string Name => _name; /// /// An icon that represent this technology. /// public SpriteSpecifier Icon => _icon; /// /// A short description of the technology. /// [ViewVariables] public string Description => _description; /// /// The required research points to unlock this technology. /// [ViewVariables] public int RequiredPoints => _requiredPoints; /// /// A list of technology IDs required to unlock this technology. /// [ViewVariables] public List RequiredTechnologies => _requiredTechnologies; /// /// A list of recipe IDs this technology unlocks. /// [ViewVariables] public List UnlockedRecipes => _unlockedRecipes; public void LoadFrom(YamlMappingNode mapping) { var serializer = YamlObjectSerializer.NewReader(mapping); serializer.DataField(ref _name, "name", string.Empty); serializer.DataField(ref _id, "id", string.Empty); serializer.DataField(ref _description, "description", string.Empty); serializer.DataField(ref _icon, "icon", SpriteSpecifier.Invalid); serializer.DataField(ref _requiredPoints, "requiredPoints", 0); serializer.DataField(ref _requiredTechnologies, "requiredTechnologies", new List()); serializer.DataField(ref _unlockedRecipes, "unlockedRecipes", new List()); } } }