Improve StateIndex.

This commit is contained in:
Ottermandias 2024-01-23 18:13:33 +01:00
parent 1ad70541d3
commit 5fd4a83aa4
3 changed files with 232 additions and 1 deletions

View file

@ -37,6 +37,16 @@ public static class MetaExtensions
_ => (MetaFlag)byte.MaxValue,
};
public static MetaIndex ToIndex(this MetaFlag index)
=> index switch
{
MetaFlag.Wetness => MetaIndex.Wetness,
MetaFlag.HatState => MetaIndex.HatState,
MetaFlag.VisorState => MetaIndex.VisorState,
MetaFlag.WeaponState => MetaIndex.WeaponState,
_ => (MetaIndex)byte.MaxValue,
};
public static string ToName(this MetaIndex index)
=> index switch
{

View file

@ -199,6 +199,227 @@ public readonly record struct StateIndex(int Value) : IEqualityOperators<StateIn
public const int ParamDecalColor = 80;
public const int Size = 81;
public IEnumerable<StateIndex> All
=> Enumerable.Range(0, Size - 1).Select(i => new StateIndex(i));
public bool GetApply(DesignBase data)
=> GetFlag() switch
{
EquipFlag e => data.ApplyEquip.HasFlag(e),
CustomizeFlag c => data.ApplyCustomize.HasFlag(c),
MetaFlag m => data.ApplyMeta.HasFlag(m),
CrestFlag c => data.ApplyCrest.HasFlag(c),
CustomizeParameterFlag c => data.ApplyParameters.HasFlag(c),
bool v => v,
_ => false,
};
public string ToName()
=> GetFlag() switch
{
EquipFlag e => GetName(e),
CustomizeFlag c => c.ToIndex().ToDefaultName(),
MetaFlag m => m.ToIndex().ToName(),
CrestFlag c => c.ToLabel(),
CustomizeParameterFlag c => c.ToName(),
bool v => "Model ID",
_ => "Unknown",
};
public object GetFlag()
=> Value switch
{
EquipHead => EquipFlag.Head,
EquipBody => EquipFlag.Body,
EquipHands => EquipFlag.Hands,
EquipLegs => EquipFlag.Legs,
EquipFeet => EquipFlag.Feet,
EquipEars => EquipFlag.Ears,
EquipNeck => EquipFlag.Neck,
EquipWrist => EquipFlag.Wrist,
EquipRFinger => EquipFlag.RFinger,
EquipLFinger => EquipFlag.LFinger,
EquipMainhand => EquipFlag.Mainhand,
EquipOffhand => EquipFlag.Offhand,
StainHead => EquipFlag.HeadStain,
StainBody => EquipFlag.BodyStain,
StainHands => EquipFlag.HandsStain,
StainLegs => EquipFlag.LegsStain,
StainFeet => EquipFlag.FeetStain,
StainEars => EquipFlag.EarsStain,
StainNeck => EquipFlag.NeckStain,
StainWrist => EquipFlag.WristStain,
StainRFinger => EquipFlag.RFingerStain,
StainLFinger => EquipFlag.LFingerStain,
StainMainhand => EquipFlag.MainhandStain,
StainOffhand => EquipFlag.OffhandStain,
CustomizeRace => CustomizeFlag.Race,
CustomizeGender => CustomizeFlag.Gender,
CustomizeBodyType => CustomizeFlag.BodyType,
CustomizeHeight => CustomizeFlag.Height,
CustomizeClan => CustomizeFlag.Clan,
CustomizeFace => CustomizeFlag.Face,
CustomizeHairstyle => CustomizeFlag.Hairstyle,
CustomizeHighlights => CustomizeFlag.Highlights,
CustomizeSkinColor => CustomizeFlag.SkinColor,
CustomizeEyeColorRight => CustomizeFlag.EyeColorRight,
CustomizeHairColor => CustomizeFlag.HairColor,
CustomizeHighlightsColor => CustomizeFlag.HighlightsColor,
CustomizeFacialFeature1 => CustomizeFlag.FacialFeature1,
CustomizeFacialFeature2 => CustomizeFlag.FacialFeature2,
CustomizeFacialFeature3 => CustomizeFlag.FacialFeature3,
CustomizeFacialFeature4 => CustomizeFlag.FacialFeature4,
CustomizeFacialFeature5 => CustomizeFlag.FacialFeature5,
CustomizeFacialFeature6 => CustomizeFlag.FacialFeature6,
CustomizeFacialFeature7 => CustomizeFlag.FacialFeature7,
CustomizeLegacyTattoo => CustomizeFlag.LegacyTattoo,
CustomizeTattooColor => CustomizeFlag.TattooColor,
CustomizeEyebrows => CustomizeFlag.Eyebrows,
CustomizeEyeColorLeft => CustomizeFlag.EyeColorLeft,
CustomizeEyeShape => CustomizeFlag.EyeShape,
CustomizeSmallIris => CustomizeFlag.SmallIris,
CustomizeNose => CustomizeFlag.Nose,
CustomizeJaw => CustomizeFlag.Jaw,
CustomizeMouth => CustomizeFlag.Mouth,
CustomizeLipstick => CustomizeFlag.Lipstick,
CustomizeLipColor => CustomizeFlag.LipColor,
CustomizeMuscleMass => CustomizeFlag.MuscleMass,
CustomizeTailShape => CustomizeFlag.TailShape,
CustomizeBustSize => CustomizeFlag.BustSize,
CustomizeFacePaint => CustomizeFlag.FacePaint,
CustomizeFacePaintReversed => CustomizeFlag.FacePaintReversed,
CustomizeFacePaintColor => CustomizeFlag.FacePaintColor,
MetaWetness => MetaFlag.Wetness,
MetaHatState => MetaFlag.HatState,
MetaVisorState => MetaFlag.VisorState,
MetaWeaponState => MetaFlag.WeaponState,
MetaModelId => true,
CrestHead => CrestFlag.Head,
CrestBody => CrestFlag.Body,
CrestOffhand => CrestFlag.OffHand,
ParamSkinDiffuse => CustomizeParameterFlag.SkinDiffuse,
ParamMuscleTone => CustomizeParameterFlag.MuscleTone,
ParamSkinSpecular => CustomizeParameterFlag.SkinSpecular,
ParamLipDiffuse => CustomizeParameterFlag.LipDiffuse,
ParamHairDiffuse => CustomizeParameterFlag.HairDiffuse,
ParamHairSpecular => CustomizeParameterFlag.HairSpecular,
ParamHairHighlight => CustomizeParameterFlag.HairHighlight,
ParamLeftEye => CustomizeParameterFlag.LeftEye,
ParamRightEye => CustomizeParameterFlag.RightEye,
ParamFeatureColor => CustomizeParameterFlag.FeatureColor,
ParamFacePaintUvMultiplier => CustomizeParameterFlag.FacePaintUvMultiplier,
ParamFacePaintUvOffset => CustomizeParameterFlag.FacePaintUvOffset,
ParamDecalColor => CustomizeParameterFlag.DecalColor,
_ => -1,
};
public object? GetValue(in DesignData data)
{
return Value switch
{
EquipHead => data.Item(EquipSlot.Head),
EquipBody => data.Item(EquipSlot.Body),
EquipHands => data.Item(EquipSlot.Hands),
EquipLegs => data.Item(EquipSlot.Legs),
EquipFeet => data.Item(EquipSlot.Feet),
EquipEars => data.Item(EquipSlot.Ears),
EquipNeck => data.Item(EquipSlot.Neck),
EquipWrist => data.Item(EquipSlot.Wrists),
EquipRFinger => data.Item(EquipSlot.RFinger),
EquipLFinger => data.Item(EquipSlot.LFinger),
EquipMainhand => data.Item(EquipSlot.MainHand),
EquipOffhand => data.Item(EquipSlot.OffHand),
StainHead => data.Stain(EquipSlot.Head),
StainBody => data.Stain(EquipSlot.Body),
StainHands => data.Stain(EquipSlot.Hands),
StainLegs => data.Stain(EquipSlot.Legs),
StainFeet => data.Stain(EquipSlot.Feet),
StainEars => data.Stain(EquipSlot.Ears),
StainNeck => data.Stain(EquipSlot.Neck),
StainWrist => data.Stain(EquipSlot.Wrists),
StainRFinger => data.Stain(EquipSlot.RFinger),
StainLFinger => data.Stain(EquipSlot.LFinger),
StainMainhand => data.Stain(EquipSlot.MainHand),
StainOffhand => data.Stain(EquipSlot.OffHand),
CustomizeRace => data.Customize[CustomizeIndex.Race],
CustomizeGender => data.Customize[CustomizeIndex.Gender],
CustomizeBodyType => data.Customize[CustomizeIndex.BodyType],
CustomizeHeight => data.Customize[CustomizeIndex.Height],
CustomizeClan => data.Customize[CustomizeIndex.Clan],
CustomizeFace => data.Customize[CustomizeIndex.Face],
CustomizeHairstyle => data.Customize[CustomizeIndex.Hairstyle],
CustomizeHighlights => data.Customize[CustomizeIndex.Highlights],
CustomizeSkinColor => data.Customize[CustomizeIndex.SkinColor],
CustomizeEyeColorRight => data.Customize[CustomizeIndex.EyeColorRight],
CustomizeHairColor => data.Customize[CustomizeIndex.HairColor],
CustomizeHighlightsColor => data.Customize[CustomizeIndex.HighlightsColor],
CustomizeFacialFeature1 => data.Customize[CustomizeIndex.FacialFeature1],
CustomizeFacialFeature2 => data.Customize[CustomizeIndex.FacialFeature2],
CustomizeFacialFeature3 => data.Customize[CustomizeIndex.FacialFeature3],
CustomizeFacialFeature4 => data.Customize[CustomizeIndex.FacialFeature4],
CustomizeFacialFeature5 => data.Customize[CustomizeIndex.FacialFeature5],
CustomizeFacialFeature6 => data.Customize[CustomizeIndex.FacialFeature6],
CustomizeFacialFeature7 => data.Customize[CustomizeIndex.FacialFeature7],
CustomizeLegacyTattoo => data.Customize[CustomizeIndex.LegacyTattoo],
CustomizeTattooColor => data.Customize[CustomizeIndex.TattooColor],
CustomizeEyebrows => data.Customize[CustomizeIndex.Eyebrows],
CustomizeEyeColorLeft => data.Customize[CustomizeIndex.EyeColorLeft],
CustomizeEyeShape => data.Customize[CustomizeIndex.EyeShape],
CustomizeSmallIris => data.Customize[CustomizeIndex.SmallIris],
CustomizeNose => data.Customize[CustomizeIndex.Nose],
CustomizeJaw => data.Customize[CustomizeIndex.Jaw],
CustomizeMouth => data.Customize[CustomizeIndex.Mouth],
CustomizeLipstick => data.Customize[CustomizeIndex.Lipstick],
CustomizeLipColor => data.Customize[CustomizeIndex.LipColor],
CustomizeMuscleMass => data.Customize[CustomizeIndex.MuscleMass],
CustomizeTailShape => data.Customize[CustomizeIndex.TailShape],
CustomizeBustSize => data.Customize[CustomizeIndex.BustSize],
CustomizeFacePaint => data.Customize[CustomizeIndex.FacePaint],
CustomizeFacePaintReversed => data.Customize[CustomizeIndex.FacePaintReversed],
CustomizeFacePaintColor => data.Customize[CustomizeIndex.FacePaintColor],
MetaWetness => data.GetMeta(MetaIndex.Wetness),
MetaHatState => data.GetMeta(MetaIndex.HatState),
MetaVisorState => data.GetMeta(MetaIndex.VisorState),
MetaWeaponState => data.GetMeta(MetaIndex.WeaponState),
MetaModelId => data.ModelId,
CrestHead => data.Crest(CrestFlag.Head),
CrestBody => data.Crest(CrestFlag.Body),
CrestOffhand => data.Crest(CrestFlag.OffHand),
ParamSkinDiffuse => data.Parameters[CustomizeParameterFlag.SkinDiffuse],
ParamMuscleTone => data.Parameters[CustomizeParameterFlag.MuscleTone],
ParamSkinSpecular => data.Parameters[CustomizeParameterFlag.SkinSpecular],
ParamLipDiffuse => data.Parameters[CustomizeParameterFlag.LipDiffuse],
ParamHairDiffuse => data.Parameters[CustomizeParameterFlag.HairDiffuse],
ParamHairSpecular => data.Parameters[CustomizeParameterFlag.HairSpecular],
ParamHairHighlight => data.Parameters[CustomizeParameterFlag.HairHighlight],
ParamLeftEye => data.Parameters[CustomizeParameterFlag.LeftEye],
ParamRightEye => data.Parameters[CustomizeParameterFlag.RightEye],
ParamFeatureColor => data.Parameters[CustomizeParameterFlag.FeatureColor],
ParamFacePaintUvMultiplier => data.Parameters[CustomizeParameterFlag.FacePaintUvMultiplier],
ParamFacePaintUvOffset => data.Parameters[CustomizeParameterFlag.FacePaintUvOffset],
ParamDecalColor => data.Parameters[CustomizeParameterFlag.DecalColor],
_ => null,
};
}
private static string GetName(EquipFlag flag)
{
var slot = flag.ToSlot(out var stain);
return stain ? $"{slot.ToName()} Stain" : slot.ToName();
}
}
public static class StateExtensions

@ -1 +1 @@
Subproject commit 17d302a7d634cbb2c49c10d5b95236a40dbff370
Subproject commit 260ac69cd6f17050eaf9b7e0b5ce9a8843edfee4