- [Core] Project restructure

This commit is contained in:
Razmoth
2023-10-03 01:39:59 +04:00
parent caaab48cc0
commit ebf626d10a
127 changed files with 156 additions and 228 deletions

View File

@@ -0,0 +1,648 @@
using System;
namespace AssetStudio
{
public enum HumanoidMuscleType
{
Motion = 0,
Root = Motion + 7,
Limbs = Root + 7,
Muscles = Limbs + LimbType.Last * 7,
Fingers = Muscles + MuscleType.Last,
TDoFBones = Fingers + ArmType.Last * FingerType.Last * FingerDoFType.Last,
Last = TDoFBones + TDoFBoneType.Last * 3,
}
public static class AnimationMuscleTypeExtensions
{
public static HumanoidMuscleType Update(this HumanoidMuscleType _this, int[] version)
{
if (_this < HumanoidMuscleType.Muscles)
{
return _this;
}
MuscleType muscle = (MuscleType)(_this - HumanoidMuscleType.Muscles);
MuscleType fixedMuscle = muscle.Update(version);
_this = HumanoidMuscleType.Muscles + (int)fixedMuscle;
if (_this < HumanoidMuscleType.TDoFBones)
{
return _this;
}
TDoFBoneType tdof = (TDoFBoneType)(_this - HumanoidMuscleType.TDoFBones);
TDoFBoneType fixedTdof = tdof.Update(version);
_this = HumanoidMuscleType.TDoFBones + (int)fixedTdof;
return _this;
}
public static string ToAttributeString(this HumanoidMuscleType _this)
{
if (_this < HumanoidMuscleType.Root)
{
int delta = _this - HumanoidMuscleType.Motion;
return nameof(HumanoidMuscleType.Motion) + GetTransformPostfix(delta % 7);
}
if (_this < HumanoidMuscleType.Limbs)
{
int delta = _this - HumanoidMuscleType.Root;
return nameof(HumanoidMuscleType.Root) + GetTransformPostfix(delta % 7);
}
if (_this < HumanoidMuscleType.Muscles)
{
int delta = _this - HumanoidMuscleType.Limbs;
LimbType limb = (LimbType)(delta / 7);
return limb.ToBoneType().ToAttributeString() + GetTransformPostfix(delta % 7);
}
if (_this < HumanoidMuscleType.Fingers)
{
int delta = _this - HumanoidMuscleType.Muscles;
MuscleType muscle = (MuscleType)delta;
return muscle.ToAttributeString();
}
if (_this < HumanoidMuscleType.TDoFBones)
{
const int armSize = (int)FingerType.Last * (int)FingerDoFType.Last;
const int dofSize = (int)FingerDoFType.Last;
int delta = _this - HumanoidMuscleType.Fingers;
ArmType arm = (ArmType)(delta / armSize);
delta = delta % armSize;
FingerType finger = (FingerType)(delta / dofSize);
delta = delta % dofSize;
FingerDoFType dof = (FingerDoFType)delta;
return $"{arm.ToBoneType().ToAttributeString()}.{finger.ToAttributeString()}.{dof.ToAttributeString()}";
}
if (_this < HumanoidMuscleType.Last)
{
int delta = _this - HumanoidMuscleType.TDoFBones;
TDoFBoneType tdof = (TDoFBoneType)(delta / 3);
return $"{tdof.ToBoneType().ToAttributeString()}{GetTDoFTransformPostfix(delta % 3)}";
}
throw new ArgumentException(_this.ToString());
}
private static string GetTransformPostfix(int index)
{
switch (index)
{
case 0:
return "T.x";
case 1:
return "T.y";
case 2:
return "T.z";
case 3:
return "Q.x";
case 4:
return "Q.y";
case 5:
return "Q.z";
case 6:
return "Q.w";
default:
throw new ArgumentException(index.ToString());
}
}
private static string GetTDoFTransformPostfix(int index)
{
switch (index)
{
case 0:
return "TDOF.x";
case 1:
return "TDOF.y";
case 2:
return "TDOF.z";
default:
throw new ArgumentException(index.ToString());
}
}
}
public enum LimbType
{
LeftFoot = 0,
RightFoot = 1,
LeftHand = 2,
RightHand = 3,
Last,
}
public static class LimbTypeExtensions
{
public static BoneType ToBoneType(this LimbType _this)
{
switch (_this)
{
case LimbType.LeftFoot:
return BoneType.LeftFoot;
case LimbType.RightFoot:
return BoneType.RightFoot;
case LimbType.LeftHand:
return BoneType.LeftHand;
case LimbType.RightHand:
return BoneType.RightHand;
default:
throw new ArgumentException(_this.ToString());
}
}
}
public enum MuscleType
{
SpineFrontBack = 0,
SpineLeftRight = 1,
SpineTwistLeftRight = 2,
ChestFrontBack = 3,
ChestLeftRight = 4,
ChestTwistLeftRight = 5,
UpperchestFrontBack = 6,
UpperchestLeftRight = 7,
UpperchestTwisLeftRight = 8,
NeckNodDownUp = 9,
NeckTiltLeftRight = 10,
NeckTurnLeftRight = 11,
HeadNodDownUp = 12,
HeadTiltLeftRight = 13,
HeadTurnLeftRight = 14,
LeftEyeDownUp = 15,
LeftEyeInOut = 16,
RightEyeDownUp = 17,
RightEyeInOut = 18,
JawClose = 19,
JawLeftRight = 20,
LeftUpperLegFrontBack = 21,
LeftUpperLegInOut = 22,
LeftUpperLegTwistInOut = 23,
LeftLowerLegStretch = 24,
LeftLowerLegTwistInOut = 25,
LeftFootUpDown = 26,
LeftFootTwistInOut = 27,
LeftToesUpDown = 28,
RightUpperLegFrontBack = 29,
RightUpperLegInOut = 30,
RightUpperLegTwistInOut = 31,
RightLowerLegStretch = 32,
RightLowerLegTwistInOut = 33,
RightFootUpDown = 34,
RightFootTwistInOut = 35,
RightToesUpDown = 36,
LeftShoulderDownUp = 37,
LeftShoulderFrontBack = 38,
LeftArmDownUp = 39,
LeftArmFrontBack = 40,
LeftArmTwistInOut = 41,
LeftForearmStretch = 42,
LeftForearmTwistInOut = 43,
LeftHandDownUp = 44,
LeftHandInOut = 45,
RightShoulderDownUp = 46,
RightShoulderFrontBack = 47,
RightArmDownUp = 48,
RightArmFrontBack = 49,
RightArmTwistInOut = 50,
RightForearmStretch = 51,
RightForearmTwistInOut = 52,
RightHandDownUp = 53,
RightHandInOut = 54,
Last,
}
public static class MuscleTypeExtensions
{
public static MuscleType Update(this MuscleType _this, int[] version)
{
if (!(version[0] > 5 || (version[0] == 5 && version[1] >= 6)))
{
if (_this >= MuscleType.UpperchestFrontBack)
{
_this += 3;
}
}
return _this;
}
public static string ToAttributeString(this MuscleType _this)
{
switch (_this)
{
case MuscleType.SpineFrontBack:
return "Spine Front-Back";
case MuscleType.SpineLeftRight:
return "Spine Left-Right";
case MuscleType.SpineTwistLeftRight:
return "Spine Twist Left-Right";
case MuscleType.ChestFrontBack:
return "Chest Front-Back";
case MuscleType.ChestLeftRight:
return "Chest Left-Right";
case MuscleType.ChestTwistLeftRight:
return "Chest Twist Left-Right";
case MuscleType.UpperchestFrontBack:
return "UpperChest Front-Back";
case MuscleType.UpperchestLeftRight:
return "UpperChest Left-Right";
case MuscleType.UpperchestTwisLeftRight:
return "UpperChest Twist Left-Right";
case MuscleType.NeckNodDownUp:
return "Neck Nod Down-Up";
case MuscleType.NeckTiltLeftRight:
return "Neck Tilt Left-Right";
case MuscleType.NeckTurnLeftRight:
return "Neck Turn Left-Right";
case MuscleType.HeadNodDownUp:
return "Head Nod Down-Up";
case MuscleType.HeadTiltLeftRight:
return "Head Tilt Left-Right";
case MuscleType.HeadTurnLeftRight:
return "Head Turn Left-Right";
case MuscleType.LeftEyeDownUp:
return "Left Eye Down-Up";
case MuscleType.LeftEyeInOut:
return "Left Eye In-Out";
case MuscleType.RightEyeDownUp:
return "Right Eye Down-Up";
case MuscleType.RightEyeInOut:
return "Right Eye In-Out";
case MuscleType.JawClose:
return "Jaw Close";
case MuscleType.JawLeftRight:
return "Jaw Left-Right";
case MuscleType.LeftUpperLegFrontBack:
return "Left Upper Leg Front-Back";
case MuscleType.LeftUpperLegInOut:
return "Left Upper Leg In-Out";
case MuscleType.LeftUpperLegTwistInOut:
return "Left Upper Leg Twist In-Out";
case MuscleType.LeftLowerLegStretch:
return "Left Lower Leg Stretch";
case MuscleType.LeftLowerLegTwistInOut:
return "Left Lower Leg Twist In-Out";
case MuscleType.LeftFootUpDown:
return "Left Foot Up-Down";
case MuscleType.LeftFootTwistInOut:
return "Left Foot Twist In-Out";
case MuscleType.LeftToesUpDown:
return "Left Toes Up-Down";
case MuscleType.RightUpperLegFrontBack:
return "Right Upper Leg Front-Back";
case MuscleType.RightUpperLegInOut:
return "Right Upper Leg In-Out";
case MuscleType.RightUpperLegTwistInOut:
return "Right Upper Leg Twist In-Out";
case MuscleType.RightLowerLegStretch:
return "Right Lower Leg Stretch";
case MuscleType.RightLowerLegTwistInOut:
return "Right Lower Leg Twist In-Out";
case MuscleType.RightFootUpDown:
return "Right Foot Up-Down";
case MuscleType.RightFootTwistInOut:
return "Right Foot Twist In-Out";
case MuscleType.RightToesUpDown:
return "Right Toes Up-Down";
case MuscleType.LeftShoulderDownUp:
return "Left Shoulder Down-Up";
case MuscleType.LeftShoulderFrontBack:
return "Left Shoulder Front-Back";
case MuscleType.LeftArmDownUp:
return "Left Arm Down-Up";
case MuscleType.LeftArmFrontBack:
return "Left Arm Front-Back";
case MuscleType.LeftArmTwistInOut:
return "Left Arm Twist In-Out";
case MuscleType.LeftForearmStretch:
return "Left Forearm Stretch";
case MuscleType.LeftForearmTwistInOut:
return "Left Forearm Twist In-Out";
case MuscleType.LeftHandDownUp:
return "Left Hand Down-Up";
case MuscleType.LeftHandInOut:
return "Left Hand In-Out";
case MuscleType.RightShoulderDownUp:
return "Right Shoulder Down-Up";
case MuscleType.RightShoulderFrontBack:
return "Right Shoulder Front-Back";
case MuscleType.RightArmDownUp:
return "Right Arm Down-Up";
case MuscleType.RightArmFrontBack:
return "Right Arm Front-Back";
case MuscleType.RightArmTwistInOut:
return "Right Arm Twist In-Out";
case MuscleType.RightForearmStretch:
return "Right Forearm Stretch";
case MuscleType.RightForearmTwistInOut:
return "Right Forearm Twist In-Out";
case MuscleType.RightHandDownUp:
return "Right Hand Down-Up";
case MuscleType.RightHandInOut:
return "Right Hand In-Out";
default:
throw new ArgumentException(_this.ToString());
}
}
}
public enum BoneType
{
Hips = 0,
LeftUpperLeg = 1,
RightUpperLeg = 2,
LeftLowerLeg = 3,
RightLowerLeg = 4,
LeftFoot = 5,
RightFoot = 6,
Spine = 7,
Chest = 8,
UpperChest = 9,
Neck = 10,
Head = 11,
LeftShoulder = 12,
RightShoulder = 13,
LeftUpperArm = 14,
RightUpperArm = 15,
LeftLowerArm = 16,
RightLowerArm = 17,
LeftHand = 18,
RightHand = 19,
LeftToes = 20,
RightToes = 21,
LeftEye = 22,
RightEye = 23,
Jaw = 24,
Last,
}
public static class BoneTypeExtensions
{
public static BoneType Update(this BoneType _this, int[] version)
{
if (version[0] > 5 || (version[0] == 5 && version[1] >= 6))
{
if (_this >= BoneType.UpperChest)
{
_this++;
}
}
return _this;
}
public static string ToAttributeString(this BoneType _this)
{
if (_this < BoneType.Last)
{
return _this.ToString();
}
throw new ArgumentException(_this.ToString());
}
}
public enum TransformType
{
Translation = 1,
Rotation = 2,
Scaling = 3,
EulerRotation = 4,
}
public static class BindingTypeExtensions
{
public static bool IsValid(this TransformType _this)
{
return _this >= TransformType.Translation && _this <= TransformType.EulerRotation;
}
public static int GetDimension(this TransformType _this)
{
switch (_this)
{
case TransformType.Translation:
case TransformType.Scaling:
case TransformType.EulerRotation:
return 3;
case TransformType.Rotation:
return 4;
default:
throw new NotImplementedException($"Binding type {_this} is not implemented");
}
}
}
public enum ArmType
{
LeftHand = 0,
RightHand = 1,
Last,
}
public static class ArmTypeExtensions
{
public static BoneType ToBoneType(this ArmType _this)
{
switch (_this)
{
case ArmType.LeftHand:
return BoneType.LeftHand;
case ArmType.RightHand:
return BoneType.RightHand;
default:
throw new ArgumentException(_this.ToString());
}
}
}
public enum FingerType
{
Thumb = 0,
Index = 1,
Middle = 2,
Ring = 3,
Little = 4,
Last,
}
public static class FingerTypeExtensions
{
public static string ToAttributeString(this FingerType _this)
{
if (_this < FingerType.Last)
{
return _this.ToString();
}
throw new ArgumentException(_this.ToString());
}
}
public enum FingerDoFType
{
_1Stretched = 0,
Spread = 1,
_2Stretched = 2,
_3Stretched = 3,
Last,
}
public static class FingerDoFTypeExtensions
{
public static string ToAttributeString(this FingerDoFType _this)
{
switch (_this)
{
case FingerDoFType._1Stretched:
return "1 Stretched";
case FingerDoFType.Spread:
return "Spread";
case FingerDoFType._2Stretched:
return "2 Stretched";
case FingerDoFType._3Stretched:
return "3 Stretched";
default:
throw new ArgumentException(_this.ToString());
}
}
}
public enum TDoFBoneType
{
Spine = 0,
Chest = 1,
UpperChest = 2,
Neck = 3,
Head = 4,
LeftUpperLeg = 5,
LeftLowerLeg = 6,
LeftFoot = 7,
LeftToes = 8,
RightUpperLeg = 9,
RightLowerLeg = 10,
RightFoot = 11,
RightToes = 12,
LeftShoulder = 13,
LeftUpperArm = 14,
LeftLowerArm = 15,
LeftHand = 16,
RightShoulder = 17,
RightUpperArm = 18,
RightLowerArm = 19,
RightHand = 20,
Last,
}
public static class TDoFBoneTypeExtensions
{
public static TDoFBoneType Update(this TDoFBoneType _this, int[] version)
{
if (!(version[0] > 5 || (version[0] == 5 && version[1] >= 6)))
{
if (_this >= TDoFBoneType.UpperChest)
{
_this++;
}
}
if (!(version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)))
{
if (_this >= TDoFBoneType.Head)
{
_this++;
}
}
if (!(version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)))
{
if (_this >= TDoFBoneType.LeftLowerLeg)
{
_this += 3;
}
}
if (!(version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)))
{
if (_this >= TDoFBoneType.RightLowerLeg)
{
_this += 3;
}
}
if (!(version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)))
{
if (_this >= TDoFBoneType.LeftUpperArm)
{
_this += 3;
}
}
if (!(version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)))
{
if (_this >= TDoFBoneType.RightUpperArm)
{
_this += 3;
}
}
return _this;
}
public static BoneType ToBoneType(this TDoFBoneType _this)
{
switch (_this)
{
case TDoFBoneType.Spine:
return BoneType.Spine;
case TDoFBoneType.Chest:
return BoneType.Chest;
case TDoFBoneType.UpperChest:
return BoneType.UpperChest;
case TDoFBoneType.Neck:
return BoneType.Neck;
case TDoFBoneType.Head:
return BoneType.Head;
case TDoFBoneType.LeftUpperLeg:
return BoneType.LeftUpperLeg;
case TDoFBoneType.LeftLowerLeg:
return BoneType.LeftLowerLeg;
case TDoFBoneType.LeftFoot:
return BoneType.LeftFoot;
case TDoFBoneType.LeftToes:
return BoneType.LeftToes;
case TDoFBoneType.RightUpperLeg:
return BoneType.RightUpperLeg;
case TDoFBoneType.RightLowerLeg:
return BoneType.RightLowerLeg;
case TDoFBoneType.RightFoot:
return BoneType.RightFoot;
case TDoFBoneType.RightToes:
return BoneType.RightToes;
case TDoFBoneType.LeftShoulder:
return BoneType.LeftShoulder;
case TDoFBoneType.LeftUpperArm:
return BoneType.LeftUpperArm;
case TDoFBoneType.LeftLowerArm:
return BoneType.LeftLowerArm;
case TDoFBoneType.LeftHand:
return BoneType.LeftHand;
case TDoFBoneType.RightShoulder:
return BoneType.RightShoulder;
case TDoFBoneType.RightUpperArm:
return BoneType.RightUpperArm;
case TDoFBoneType.RightLowerArm:
return BoneType.RightLowerArm;
case TDoFBoneType.RightHand:
return BoneType.RightHand;
default:
throw new ArgumentException(_this.ToString());
}
}
}
}