using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Body; /// /// Defines an organ that applies markings on top of the layer specified in /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState(raiseAfterAutoHandleState: true, fieldDeltas: true)] [Access(typeof(SharedVisualBodySystem))] public sealed partial class VisualOrganMarkingsComponent : Component { /// /// Defines the type of markings this organ can take /// [DataField(required: true), AlwaysPushInheritance] public OrganMarkingData MarkingData = default!; /// /// The list of markings this organ is currently providing to the entity /// [DataField, AutoNetworkedField] public Dictionary> Markings = new(); /// /// Layers that are eligible for hiding based on e.g. clothing /// [DataField, AutoNetworkedField] public HashSet HideableLayers = new(); /// /// A dictionary of layers to other layers that visually depend on them for hiding, e.g. SnoutCover depends on Snout /// [DataField, AutoNetworkedField] public Dictionary> DependentHidingLayers = new(); /// /// Client only - the last markings applied by this component /// [ViewVariables] public List AppliedMarkings = new(); } /// /// Defines the layers and group an organ takes markings for /// [DataDefinition] [Serializable, NetSerializable] public partial record struct OrganMarkingData { [DataField(required: true)] public HashSet Layers = default!; /// /// The type of organ this is for markings /// [DataField(required: true)] public ProtoId Group = default!; }