using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Shared.Research.Prototypes; /// /// This is a prototype for a technology that can be unlocked. /// [Prototype] public sealed partial class TechnologyPrototype : IPrototype { /// [IdDataField] public string ID { get; private set; } = default!; /// /// The name of the technology. /// Supports locale strings /// [DataField(required: true)] public LocId Name = string.Empty; /// /// An icon used to visually represent the technology in UI. /// [DataField(required: true)] public SpriteSpecifier Icon = default!; /// /// What research discipline this technology belongs to. /// [DataField(required: true)] public ProtoId Discipline; /// /// What tier research is this? /// The tier governs how much lower-tier technology /// needs to be unlocked before this one. /// [DataField(required: true)] public int Tier; /// /// Hidden tech is not ever available at the research console. /// [DataField] public bool Hidden; /// /// How much research is needed to unlock. /// [DataField] public int Cost = 10000; /// /// A list of s that need to be unlocked in order to unlock this technology. /// [DataField] public List> TechnologyPrerequisites = new(); /// /// A list of s that are unlocked by this technology /// [DataField] public List> RecipeUnlocks = new(); /// /// A list of non-standard effects that are done when this technology is unlocked. /// [DataField] public IReadOnlyList GenericUnlocks = new List(); } [DataDefinition] public partial record struct GenericUnlock() { /// /// What event is raised when this is unlocked? /// Used for doing non-standard logic. /// [DataField] public object? PurchaseEvent = null; /// /// A player facing tooltip for what the unlock does. /// Supports locale strings. /// [DataField] public string UnlockDescription = string.Empty; }