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; } = [];
}