public FSKANode(ResNSW.BoneAnim b) { Text = b.Name; if (b.BaseData.Scale != Syroot.Maths.Vector3F.Zero) { sca = new Vector3(b.BaseData.Scale.X, b.BaseData.Scale.Y, b.BaseData.Scale.Z); } if (b.BaseData.Rotate != Syroot.Maths.Vector4F.Zero) { rot = new Vector4(b.BaseData.Rotate.X, b.BaseData.Rotate.Y, b.BaseData.Rotate.Z, b.BaseData.Rotate.W); } if (b.BaseData.Translate != Syroot.Maths.Vector3F.Zero) { pos = new Vector3(b.BaseData.Translate.X, b.BaseData.Translate.Y, b.BaseData.Translate.Z); } foreach (ResNSW.AnimCurve tr in b.Curves) { FSKATrack t = new FSKATrack(); t.flag = (int)tr.AnimDataOffset; tracks.Add(t); float tanscale = tr.Delta; if (tanscale == 0) { tanscale = 1; } for (int i = 0; i < (ushort)tr.Frames.Length; i++) { if (tr.CurveType == ResNSW.AnimCurveType.Cubic) { int framedata = (int)tr.Frames[i]; float keydata = tr.Offset + ((tr.Keys[i, 0] * tr.Scale)); float keydata2 = tr.Offset + ((tr.Keys[i, 1] * tr.Scale)); float keydata3 = tr.Offset + ((tr.Keys[i, 2] * tr.Scale)); float keydata4 = tr.Offset + ((tr.Keys[i, 3] * tr.Scale)); } if (tr.KeyType == ResNSW.AnimCurveKeyType.Int16) { } else if (tr.KeyType == ResNSW.AnimCurveKeyType.Single) { } else if (tr.KeyType == ResNSW.AnimCurveKeyType.SByte) { } t.keys.Add(new FSKAKey() { frame = (int)tr.Frames[i], unk1 = tr.Offset + ((tr.Keys[i, 0] * tr.Scale)), unk2 = tr.Offset + ((tr.Keys[i, 1] * tr.Scale)), unk3 = tr.Offset + ((tr.Keys[i, 2] * tr.Scale)), unk4 = tr.Offset + ((tr.Keys[i, 3] * tr.Scale)), }); } } }
public static ResNX.SkeletalAnim FSKAConvertWiiUToSwitch(ResU.SkeletalAnim skeletalAnimU) { ResNX.SkeletalAnim ska = new ResNX.SkeletalAnim(); ska.Name = skeletalAnimU.Name; ska.Path = skeletalAnimU.Path; ska.FrameCount = skeletalAnimU.FrameCount; ska.FlagsScale = ResNX.SkeletalAnimFlagsScale.None; if (skeletalAnimU.FlagsScale.HasFlag(ResU.SkeletalAnimFlagsScale.Maya)) { ska.FlagsScale = ResNX.SkeletalAnimFlagsScale.Maya; } if (skeletalAnimU.FlagsScale.HasFlag(ResU.SkeletalAnimFlagsScale.Softimage)) { ska.FlagsScale = ResNX.SkeletalAnimFlagsScale.Softimage; } if (skeletalAnimU.FlagsScale.HasFlag(ResU.SkeletalAnimFlagsScale.Standard)) { ska.FlagsScale = ResNX.SkeletalAnimFlagsScale.Standard; } ska.FrameCount = skeletalAnimU.FrameCount; ska.BindIndices = skeletalAnimU.BindIndices; ska.BakedSize = skeletalAnimU.BakedSize; ska.Loop = skeletalAnimU.Loop; ska.Baked = skeletalAnimU.Baked; foreach (var boneAnimU in skeletalAnimU.BoneAnims) { var boneAnim = new ResNX.BoneAnim(); ska.BoneAnims.Add(boneAnim); boneAnim.Name = boneAnimU.Name; boneAnim.BeginRotate = boneAnimU.BeginRotate; boneAnim.BeginTranslate = boneAnimU.BeginTranslate; boneAnim.BeginBaseTranslate = boneAnimU.BeginBaseTranslate; var baseData = new ResNX.BoneAnimData(); baseData.Translate = boneAnimU.BaseData.Translate; baseData.Scale = boneAnimU.BaseData.Scale; baseData.Rotate = boneAnimU.BaseData.Rotate; baseData.Flags = boneAnimU.BaseData.Flags; boneAnim.BaseData = baseData; boneAnim.FlagsBase = (ResNX.BoneAnimFlagsBase)boneAnimU.FlagsBase; boneAnim.FlagsCurve = (ResNX.BoneAnimFlagsCurve)boneAnimU.FlagsCurve; boneAnim.FlagsTransform = (ResNX.BoneAnimFlagsTransform)boneAnimU.FlagsTransform; boneAnim.Curves = ConvertAnimCurveWiiUToSwitch(boneAnimU.Curves); } return(ska); }
public FSKANode(Syroot.NintenTools.NSW.Bfres.BoneAnim b) { Text = b.Name; // offset 1 is base positions //Console.WriteLine(off1.ToString("x")); if (b.BaseData.Scale != new Syroot.Maths.Vector3F(0f, 0f, 0f)) { sca = new Vector3(b.BaseData.Scale.X, b.BaseData.Scale.Y, b.BaseData.Scale.Z); rot = new Vector3(b.BaseData.Rotate.X, b.BaseData.Rotate.Y, b.BaseData.Rotate.Z); pos = new Vector3(b.BaseData.Translate.X, b.BaseData.Translate.Y, b.BaseData.Translate.Z); } else { sca = new Vector3(1, 1, 1); rot = new Vector3(0, 0, 0); pos = new Vector3(0, 0, 0); } // Console.WriteLine("Name = " + b.Name); foreach (Syroot.NintenTools.NSW.Bfres.AnimCurve tr in b.Curves) { // Console.WriteLine(tr.AnimDataOffset); FSKATrack t = new FSKATrack(); t.flag = (int)tr.AnimDataOffset; tracks.Add(t); // Console.WriteLine("Flag = " + (int)tr.AnimDataOffset + " Offset = " + tr.Offset + " Scale = " + tr.Scale); // Console.WriteLine(); float tanscale = tr.Delta; if (tanscale == 0) { tanscale = 1; } for (int i = 0; i < (ushort)tr.Frames.Length; i++) { if (tr.CurveType == Syroot.NintenTools.NSW.Bfres.AnimCurveType.Cubic) { int framedata = (int)tr.Frames[i]; float keydata = tr.Offset + ((tr.Keys[i, 0] * tr.Scale)); float keydata2 = tr.Offset + ((tr.Keys[i, 1] * tr.Scale)); float keydata3 = tr.Offset + ((tr.Keys[i, 2] * tr.Scale)); float keydata4 = tr.Offset + ((tr.Keys[i, 3] * tr.Scale)); // Console.WriteLine($"{framedata} {keydata} {keydata2} {keydata3} {keydata4} "); // Console.WriteLine($"Raw Data = " + tr.Keys[i, 0]); } if (tr.KeyType == ResNSW.AnimCurveKeyType.Int16) { } else if (tr.KeyType == ResNSW.AnimCurveKeyType.Single) { } else if (tr.KeyType == ResNSW.AnimCurveKeyType.SByte) { } t.keys.Add(new FSKAKey() { frame = (int)tr.Frames[i], unk1 = tr.Offset + ((tr.Keys[i, 0] * tr.Scale)), unk2 = tr.Offset + ((tr.Keys[i, 1] * tr.Scale)), unk3 = tr.Offset + ((tr.Keys[i, 2] * tr.Scale)), unk4 = tr.Offset + ((tr.Keys[i, 3] * tr.Scale)), }); } } }
public static ResNX.SkeletalAnim FSKAConvertWiiUToSwitch(ResU.SkeletalAnim skeletalAnimU) { ResNX.SkeletalAnim ska = new ResNX.SkeletalAnim(); ska.Name = skeletalAnimU.Name; ska.Path = skeletalAnimU.Path; ska.FrameCount = skeletalAnimU.FrameCount; ska.FlagsScale = ResNX.SkeletalAnimFlagsScale.None; if (skeletalAnimU.FlagsScale.HasFlag(ResU.SkeletalAnimFlagsScale.Maya)) { ska.FlagsScale = ResNX.SkeletalAnimFlagsScale.Maya; } if (skeletalAnimU.FlagsScale.HasFlag(ResU.SkeletalAnimFlagsScale.Softimage)) { ska.FlagsScale = ResNX.SkeletalAnimFlagsScale.Softimage; } if (skeletalAnimU.FlagsScale.HasFlag(ResU.SkeletalAnimFlagsScale.Standard)) { ska.FlagsScale = ResNX.SkeletalAnimFlagsScale.Standard; } ska.FrameCount = skeletalAnimU.FrameCount; ska.BindIndices = skeletalAnimU.BindIndices; ska.BakedSize = skeletalAnimU.BakedSize; ska.Loop = skeletalAnimU.Loop; ska.Baked = skeletalAnimU.Baked; foreach (var userDataU in skeletalAnimU.UserData) { var parser = new UserDataParser(); var userDataNX = new ResNX.UserData(); parser.Type = userDataU.Value.Type.ToString(); parser.UserDataName = userDataU.Value.Name; userDataNX.Name = parser.UserDataName; if (parser.Type == "Byte") { userDataNX.SetValue(parser.GetBytes()); } if (parser.Type == "Single") { parser.LoadValues(userDataU.Value.GetValueSingleArray()); } userDataNX.SetValue(parser.GetFloats()); if (parser.Type == "Int32") { userDataNX.SetValue(parser.GetInts()); } if (parser.Type == "String") { userDataNX.SetValue(parser.GetStringASCII()); } if (parser.Type == "WString") { userDataNX.SetValue(parser.GetStringUnicode()); } ska.UserDatas.Add(userDataNX); } foreach (var boneAnimU in skeletalAnimU.BoneAnims) { var boneAnim = new ResNX.BoneAnim(); ska.BoneAnims.Add(boneAnim); boneAnim.Name = boneAnimU.Name; boneAnim.BeginRotate = boneAnimU.BeginRotate; boneAnim.BeginTranslate = boneAnimU.BeginTranslate; boneAnim.BeginBaseTranslate = boneAnimU.BeginBaseTranslate; var baseData = new ResNX.BoneAnimData(); baseData.Translate = boneAnimU.BaseData.Translate; baseData.Scale = boneAnimU.BaseData.Scale; baseData.Rotate = boneAnimU.BaseData.Rotate; baseData.Flags = boneAnimU.BaseData.Flags; boneAnim.BaseData = baseData; boneAnim.FlagsBase = (ResNX.BoneAnimFlagsBase)boneAnimU.FlagsBase; boneAnim.FlagsCurve = (ResNX.BoneAnimFlagsCurve)boneAnimU.FlagsCurve; boneAnim.FlagsTransform = (ResNX.BoneAnimFlagsTransform)boneAnimU.FlagsTransform; boneAnim.Curves = ConvertAnimCurveWiiUToSwitch(boneAnimU.Curves); } return(ska); }