public static SkeletalAnim SetSkeletalAniamtion(BfresSkeletonAnim anim) { SkeletalAnim animation = new SkeletalAnim(); animation.Name = anim.Text; animation.FrameCount = anim.FrameCount; animation.FlagsAnimSettings = SkeletalAnimFlags.Looping; animation.FlagsRotate = SkeletalAnimFlagsRotate.EulerXYZ; animation.FlagsScale = SkeletalAnimFlagsScale.Maya; animation.BindIndices = new ushort[anim.Bones.Count]; animation.BindSkeleton = new Skeleton(); animation.BakedSize = 0; animation.BoneAnims = new List <BoneAnim>(); animation.UserDataDict = new ResDict(); animation.UserDatas = new List <UserData>(); foreach (var bone in anim.Bones) { animation.BoneAnims.Add(createBoneAnim(bone, anim)); } return(animation); }
private static BoneAnim createBoneAnim(Animation.KeyNode bone, BfresSkeletonAnim anim) { BoneAnim boneAnim = new BoneAnim(); boneAnim.Name = bone.Name; var posx = bone.XPOS.GetValue(0); var posy = bone.YPOS.GetValue(0); var posz = bone.ZPOS.GetValue(0); var scax = bone.XSCA.GetValue(0); var scay = bone.YSCA.GetValue(0); var scaz = bone.ZSCA.GetValue(0); var rotx = bone.XROT.GetValue(0); var roty = bone.YROT.GetValue(0); var rotz = bone.ZROT.GetValue(0); var rotw = bone.WROT.GetValue(0); BoneAnimData boneBaseData = new BoneAnimData(); boneBaseData.Translate = new Syroot.Maths.Vector3F(posx, posy, posz); boneBaseData.Scale = new Syroot.Maths.Vector3F(scax, scay, scaz); boneBaseData.Rotate = new Syroot.Maths.Vector4F(rotx, roty, rotz, rotw); boneAnim.BaseData = boneBaseData; boneAnim.BeginBaseTranslate = 0; boneAnim.BeginRotate = 0; boneAnim.BeginTranslate = 0; boneAnim.Curves = new List <AnimCurve>(); boneAnim.FlagsBase = BoneAnimFlagsBase.Translate | BoneAnimFlagsBase.Scale | BoneAnimFlagsBase.Rotate; boneAnim.FlagsTransform = BoneAnimFlagsTransform.Identity; if (bone.XPOS.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.TranslateX; boneAnim.Curves.Add(SetAnimationCurve(bone.XPOS)); } if (bone.YPOS.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.TranslateY; boneAnim.Curves.Add(SetAnimationCurve(bone.YPOS)); } if (bone.ZPOS.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.TranslateZ; boneAnim.Curves.Add(SetAnimationCurve(bone.ZPOS)); } if (bone.XSCA.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.ScaleX; boneAnim.Curves.Add(SetAnimationCurve(bone.XSCA)); } if (bone.YSCA.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.ScaleY; boneAnim.Curves.Add(SetAnimationCurve(bone.YSCA)); } if (bone.ZSCA.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.ScaleZ; boneAnim.Curves.Add(SetAnimationCurve(bone.ZSCA)); } if (bone.XROT.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.RotateX; boneAnim.Curves.Add(SetAnimationCurve(bone.XROT)); } if (bone.YROT.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.RotateY; boneAnim.Curves.Add(SetAnimationCurve(bone.YROT)); } if (bone.ZROT.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.RotateZ; boneAnim.Curves.Add(SetAnimationCurve(bone.ZROT)); } if (bone.WROT.HasAnimation()) { boneAnim.FlagsCurve |= BoneAnimFlagsCurve.RotateW; boneAnim.Curves.Add(SetAnimationCurve(bone.WROT)); } return(boneAnim); }