using Content.Shared.Construction.Prototypes; using Content.Shared.Stacks; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; namespace Content.Shared.Construction.Components { [RegisterComponent, NetworkedComponent] public sealed class MachineBoardComponent : Component { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [DataField("requirements", customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] public readonly Dictionary Requirements = new(); [DataField("materialRequirements")] public readonly Dictionary MaterialIdRequirements = new(); [DataField("tagRequirements")] public readonly Dictionary TagRequirements = new(); [DataField("componentRequirements")] public readonly Dictionary ComponentRequirements = new(); [ViewVariables(VVAccess.ReadWrite)] [DataField("prototype")] public string? Prototype { get; private set; } public IEnumerable> MaterialRequirements { get { foreach (var (materialId, amount) in MaterialIdRequirements) { var material = _prototypeManager.Index(materialId); yield return new KeyValuePair(material, amount); } } } } [Serializable] [DataDefinition] public struct GenericPartInfo { [DataField("Amount")] public int Amount; [DataField("ExamineName")] public string ExamineName; [DataField("DefaultPrototype")] public string DefaultPrototype; } }