示例#1
0
        public void Replace(string FileName, ResFile resFile)
        {
            string ext = Utils.GetExtension(FileName);

            if (ext == ".bftxp")
            {
                bool IsSwitch = BfresUtilies.IsSubSectionSwitch(FileName);
                if (IsSwitch)
                {
                    var fmaa = new Syroot.NintenTools.NSW.Bfres.MaterialAnim();
                    fmaa.Import(FileName);
                    TexPatternAnim = BfresPlatformConverter.FTXPConvertSwitchToWiiU(fmaa);
                }
                else
                {
                    TexPatternAnim.Import(FileName, resFile);
                }

                TexPatternAnim.Name = Text;
                LoadAnim(TexPatternAnim);
            }
            else if (ext == ".yaml")
            {
                var fmaa = new Syroot.NintenTools.NSW.Bfres.MaterialAnim();
                fmaa                = YamlFmaa.FromYaml(FileName);
                TexPatternAnim      = BfresPlatformConverter.FTXPConvertSwitchToWiiU(fmaa);
                TexPatternAnim.Name = Text;
                LoadAnim(TexPatternAnim);
            }
            else if (ext == ".gif")
            {
                BFRESGroupNode ftexFolder         = PluginRuntime.ftexContainers[0];
                GifToTexturePatternAnimation anim = new GifToTexturePatternAnimation(FileName, ftexFolder, this);
                TexPatternAnim.Name = Text;
                LoadAnim(TexPatternAnim);
            }
        }
示例#2
0
            public BFRES_FVTX(BFRES.MTA mta, TexPatternAnim tex, ResFile b)
            {
                mta.Text = tex.Name;

                mta.FrameCount = (uint)tex.FrameCount;


                if (tex.TextureRefs != null || tex.TextureRefNames != null)
                {
                    if (b.Version >= 0x03040000)
                    {
                        foreach (var tx in tex.TextureRefs)
                        {
                            mta.Pat0.Add(tx.Key);
                        }
                    }
                    else
                    {
                        foreach (var tx in tex.TextureRefNames)
                        {
                            mta.Pat0.Add(tx.Name);
                            //Console.WriteLine(tx.Name);
                        }
                    }
                }

                foreach (TexPatternMatAnim matanim in tex.TexPatternMatAnims)
                {
                    BFRES.MatAnimEntry mat = new BFRES.MatAnimEntry();

                    mat.Text = matanim.Name;
                    //Console.WriteLine($"MatAnim = {mat.Text}");
                    //Console.WriteLine($"Curve Count = {matanim.Curves.Count}");

                    if (matanim.Curves.Count == 0)
                    {
                        int CurTex = 0;
                        foreach (PatternAnimInfo inf in matanim.PatternAnimInfos)
                        {
                            if (tex.TextureRefs != null || tex.TextureRefNames != null)
                            {
                                BFRES.MatAnimData md = new BFRES.MatAnimData();

                                md.Pat0Tex     = mta.Pat0[CurTex];
                                md.SamplerName = inf.Name;
                                md.Frame       = 0;

                                mat.matCurves.Add(md);
                            }
                            CurTex++;
                        }
                    }

                    int CurCurve = 0;
                    foreach (AnimCurve cr in matanim.Curves)
                    {
                        for (int i = 0; i < (ushort)cr.Frames.Length; i++)
                        {
                            BFRES.MatAnimData md = new BFRES.MatAnimData();

                            foreach (PatternAnimInfo inf in matanim.PatternAnimInfos)
                            {
                                if (inf.CurveIndex == CurCurve)
                                {
                                    md.SamplerName = inf.Name;
                                }
                            }

                            if (tex.TextureRefs != null || tex.TextureRefNames != null)
                            {
                                if (cr.KeyType == AnimCurveKeyType.SByte)
                                {
                                    md.CurveIndex = CurCurve;

                                    if (cr.Scale != 0)
                                    {
                                        int   test = (int)cr.Keys[i, 0];
                                        float key  = cr.Offset + test * cr.Scale;
                                        md.Pat0Tex = (mta.Pat0[(int)key]);
                                        md.Frame   = (int)cr.Frames[i];
                                    }
                                    else
                                    {
                                        int test = (int)cr.Keys[i, 0];
                                        int key  = cr.Offset + test;
                                        md.Pat0Tex = (mta.Pat0[(int)key]);
                                        md.Frame   = (int)cr.Frames[i];
                                        //Console.WriteLine($"{md.Frame} {md.Pat0Tex}");
                                    }
                                }
                            }
                            mat.matCurves.Add(md);
                        }
                        CurCurve++;
                    }

                    foreach (BFRES.MatAnimData md in mat.matCurves)
                    {
                        //Console.WriteLine($"At frame {md.Frame} show {md.Pat0Tex} {md.SamplerName}");
                    }

                    mta.matEntries.Add(mat);
                }
            }
示例#3
0
        private void LoadAnim(TexPatternAnim anim)
        {
            CanReplace = true;
            CanExport  = true;
            CanDelete  = true;
            CanRename  = true;

            Text = anim.Name;

            TexPatternAnim = anim;
            FrameCount     = anim.FrameCount;

            Materials.Clear();
            Textures.Clear();
            if (anim.TextureRefNames != null)
            {
                foreach (var tex in anim.TextureRefNames)
                {
                    Textures.Add(tex.Name);
                }
            }

            if (anim.TextureRefs != null)
            {
                foreach (var tex in anim.TextureRefs)
                {
                    Textures.Add(tex.Key);
                }
            }


            foreach (TexPatternMatAnim matanim in anim.TexPatternMatAnims)
            {
                var mat = new MaterialAnimEntry(matanim.Name);
                mat.TexPatternMatAnim = matanim;
                Materials.Add(mat);

                foreach (PatternAnimInfo SamplerInfo in matanim.PatternAnimInfos)
                {
                    BfresSamplerAnim sampler = new BfresSamplerAnim(SamplerInfo.Name, this);
                    mat.Samplers.Add(sampler);

                    int textureIndex = 0;

                    if (SamplerInfo.SubBindIndex != -1)
                    {
                        textureIndex = SamplerInfo.SubBindIndex;

                        sampler.Keys.Add(new Animation.KeyFrame()
                        {
                            Frame = 0, Value = textureIndex
                        });
                        sampler.Constant = true;
                    }
                    if (SamplerInfo.CurveIndex != -1)
                    {
                        int index = (int)SamplerInfo.CurveIndex;

                        Animation.KeyGroup keyGroup = CurveHelper.CreateTrackWiiU(matanim.Curves[index]);
                        sampler.AnimDataOffset = matanim.Curves[index].AnimDataOffset;
                        sampler.Keys           = keyGroup.Keys;

                        foreach (var ind in keyGroup.Keys)
                        {
                            Console.WriteLine($"{SamplerInfo.Name} {ind.Value}");
                        }
                    }
                }
            }
        }
示例#4
0
 public FTXP(TexPatternAnim anim)
 {
     LoadAnim(anim);
 }