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;
}