diff --git a/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs b/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs new file mode 100644 index 0000000000..81f4025bec --- /dev/null +++ b/Content.Shared/_CP14/Workbench/Requirements/TagResource.cs @@ -0,0 +1,77 @@ +/* + * This file is sublicensed under MIT License + * https://github.com/space-wizards/space-station-14/blob/master/LICENSE.TXT + */ + +using Content.Shared.Tag; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared._CP14.Workbench.Requirements; + +public sealed partial class TagResource : CP14WorkbenchCraftRequirement +{ + [DataField(required: true)] + public ProtoId Tag; + + [DataField] + public int Count = 1; + + [DataField(required: true)] + public LocId? Title; + + [DataField(required: true)] + public SpriteSpecifier? Texture; + + public override bool CheckRequirement(EntityManager entManager, IPrototypeManager protoManager, HashSet placedEntities, EntityUid user) + { + var tagSystem = entManager.System(); + + var count = 0; + foreach (var ent in placedEntities) + { + if (!tagSystem.HasTag(ent, Tag)) + continue; + + count++; + } + + if (count < Count) + return false; + + return true; + } + + public override void PostCraft(EntityManager entManager, HashSet placedEntities, EntityUid user) + { + var tagSystem = entManager.System(); + + var requiredCount = Count; + foreach (var placedEntity in placedEntities) + { + if (!tagSystem.HasTag(placedEntity, Tag)) + continue; + + requiredCount--; + entManager.DeleteEntity(placedEntity); + } + } + + public override string GetRequirementTitle(IPrototypeManager protoManager) + { + if (Title is null) + return "Error tag name"; + + return Loc.GetString(Title); + } + + public override EntityPrototype? GetRequirementEntityView(IPrototypeManager protoManager) + { + return null; + } + + public override SpriteSpecifier? GetRequirementTexture(IPrototypeManager protoManager) + { + return Texture; + } +}