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