namespace HSchool.Content; /// /// Layers apparel occupies. Code, not a def — new layers are a rebuild, like /// . /// public static class ApparelLayers { public const string Underwear = "Underwear"; public const string UpperUnderwear = "UpperUnderwear"; public const string Socks = "Socks"; public const string Bottom = "Bottom"; public const string Top = "Top"; public const string OverTop = "OverTop"; public const string Outer = "Outer"; public const string Shoes = "Shoes"; public const string Head = "Head"; public const string Accessory = "Accessory"; public static readonly IReadOnlyList All = [Underwear, UpperUnderwear, Socks, Bottom, Top, OverTop, Outer, Shoes, Head, Accessory]; public static bool IsKnown(string layer) => All.Any(candidate => candidate.Equals(layer, StringComparison.Ordinal)); public static bool IsUnder(string layer) => layer.Equals(Underwear, StringComparison.Ordinal) || layer.Equals(UpperUnderwear, StringComparison.Ordinal) || layer.Equals(Socks, StringComparison.Ordinal); } /// /// ColorDef appropriateness tags. School rules filter these, not color names. /// public static class ColorTags { public const string Neutral = "neutral"; public const string Bright = "bright"; public const string School = "school"; public static readonly IReadOnlyList All = [Neutral, Bright, School]; public static bool IsKnown(string tag) => All.Any(candidate => candidate.Equals(tag, StringComparison.Ordinal)); } /// Bottom length for the short-form dress code. Omit on things that have no hem. public static class SkirtLengths { public const string Regular = "regular"; public const string Short = "short"; public static readonly IReadOnlyList All = [Regular, Short]; public static bool IsKnown(string length) => All.Any(candidate => candidate.Equals(length, StringComparison.Ordinal)); } public sealed class ColorDef : Def { public IReadOnlyList Tags { get; init; } = []; }