using System.Diagnostics.CodeAnalysis; using Content.Shared.Examine; using Content.Shared.Stacks; using Robust.Shared.Prototypes; namespace Content.Shared.Construction.Steps { [DataDefinition] public sealed partial class MaterialConstructionGraphStep : EntityInsertConstructionGraphStep { // TODO: Make this use the material system. // TODO TODO: Make the material system not shit. [DataField("material", required:true)] public ProtoId MaterialPrototypeId { get; private set; } [DataField] public int Amount { get; private set; } = 1; public override void DoExamine(ExaminedEvent examinedEvent) { var material = IoCManager.Resolve().Index(MaterialPrototypeId); var materialName = Loc.GetString(material.Name, ("amount", Amount)); examinedEvent.PushMarkup(Loc.GetString("construction-insert-material-entity", ("amount", Amount), ("materialName", materialName))); } public override bool EntityValid(EntityUid uid, IEntityManager entityManager, IComponentFactory compFactory) { return entityManager.TryGetComponent(uid, out StackComponent? stack) && stack.StackTypeId == MaterialPrototypeId && stack.Count >= Amount; } public bool EntityValid(EntityUid entity, [NotNullWhen(true)] out StackComponent? stack) { if (IoCManager.Resolve().TryGetComponent(entity, out StackComponent? otherStack) && otherStack.StackTypeId == MaterialPrototypeId && otherStack.Count >= Amount) stack = otherStack; else stack = null; return stack != null; } public override ConstructionGuideEntry GenerateGuideEntry() { var material = IoCManager.Resolve().Index(MaterialPrototypeId); var materialName = Loc.GetString(material.Name, ("amount", Amount)); return new ConstructionGuideEntry() { Localization = "construction-presenter-material-step", Arguments = new (string, object)[]{("amount", Amount), ("material", materialName)}, Icon = material.Icon, }; } } }