mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2026-01-03 14:23:43 +01:00
74 lines
3.9 KiB
C#
74 lines
3.9 KiB
C#
namespace Glamourer.GameData;
|
|
|
|
[Flags]
|
|
public enum CustomizeParameterFlag : ushort
|
|
{
|
|
SkinDiffuse = 0x0001,
|
|
MuscleTone = 0x0002,
|
|
SkinSpecular = 0x0004,
|
|
LipDiffuse = 0x0008,
|
|
HairDiffuse = 0x0010,
|
|
HairSpecular = 0x0020,
|
|
HairHighlight = 0x0040,
|
|
LeftEye = 0x0080,
|
|
RightEye = 0x0100,
|
|
FeatureColor = 0x0200,
|
|
FacePaintUvMultiplier = 0x0400,
|
|
FacePaintUvOffset = 0x0800,
|
|
DecalColor = 0x1000,
|
|
LeftLimbalIntensity = 0x2000,
|
|
RightLimbalIntensity = 0x4000,
|
|
}
|
|
|
|
public static class CustomizeParameterExtensions
|
|
{
|
|
// Speculars are not available anymore.
|
|
public const CustomizeParameterFlag All = (CustomizeParameterFlag)0x7FDB;
|
|
|
|
public const CustomizeParameterFlag RgbTriples = All
|
|
& ~(RgbaQuadruples | Percentages | Values);
|
|
|
|
public const CustomizeParameterFlag RgbaQuadruples = CustomizeParameterFlag.DecalColor | CustomizeParameterFlag.LipDiffuse;
|
|
|
|
public const CustomizeParameterFlag Percentages = CustomizeParameterFlag.MuscleTone
|
|
| CustomizeParameterFlag.LeftLimbalIntensity
|
|
| CustomizeParameterFlag.RightLimbalIntensity;
|
|
|
|
public const CustomizeParameterFlag Values = CustomizeParameterFlag.FacePaintUvOffset | CustomizeParameterFlag.FacePaintUvMultiplier;
|
|
|
|
public static readonly IReadOnlyList<CustomizeParameterFlag> AllFlags = [.. Enum.GetValues<CustomizeParameterFlag>().Where(f => All.HasFlag(f))];
|
|
public static readonly IReadOnlyList<CustomizeParameterFlag> RgbaFlags = AllFlags.Where(f => RgbaQuadruples.HasFlag(f)).ToArray();
|
|
public static readonly IReadOnlyList<CustomizeParameterFlag> RgbFlags = AllFlags.Where(f => RgbTriples.HasFlag(f)).ToArray();
|
|
public static readonly IReadOnlyList<CustomizeParameterFlag> PercentageFlags = AllFlags.Where(f => Percentages.HasFlag(f)).ToArray();
|
|
public static readonly IReadOnlyList<CustomizeParameterFlag> ValueFlags = AllFlags.Where(f => Values.HasFlag(f)).ToArray();
|
|
|
|
public static int Count(this CustomizeParameterFlag flag)
|
|
=> RgbaQuadruples.HasFlag(flag) ? 4 : RgbTriples.HasFlag(flag) ? 3 : 1;
|
|
|
|
public static IEnumerable<CustomizeParameterFlag> Iterate(this CustomizeParameterFlag flags)
|
|
=> AllFlags.Where(f => flags.HasFlag(f));
|
|
|
|
public static int ToInternalIndex(this CustomizeParameterFlag flag)
|
|
=> BitOperations.TrailingZeroCount((uint)flag);
|
|
|
|
public static string ToName(this CustomizeParameterFlag flag)
|
|
=> flag switch
|
|
{
|
|
CustomizeParameterFlag.SkinDiffuse => "Skin Color",
|
|
CustomizeParameterFlag.MuscleTone => "Muscle Tone",
|
|
CustomizeParameterFlag.SkinSpecular => "Skin Shine",
|
|
CustomizeParameterFlag.LipDiffuse => "Lip Color",
|
|
CustomizeParameterFlag.HairDiffuse => "Hair Color",
|
|
CustomizeParameterFlag.HairSpecular => "Hair Shine",
|
|
CustomizeParameterFlag.HairHighlight => "Hair Highlights",
|
|
CustomizeParameterFlag.LeftEye => "Left Eye Color",
|
|
CustomizeParameterFlag.RightEye => "Right Eye Color",
|
|
CustomizeParameterFlag.FeatureColor => "Feature Color",
|
|
CustomizeParameterFlag.FacePaintUvMultiplier => "Multiplier for Face Paint",
|
|
CustomizeParameterFlag.FacePaintUvOffset => "Offset of Face Paint",
|
|
CustomizeParameterFlag.DecalColor => "Face Paint Color",
|
|
CustomizeParameterFlag.LeftLimbalIntensity => "Left Limbal Ring Intensity",
|
|
CustomizeParameterFlag.RightLimbalIntensity => "Right Limbal Ring Intensity",
|
|
_ => string.Empty,
|
|
};
|
|
}
|