Пример #1
0
                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);
        }
Пример #3
0
            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);
        }