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); } }
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); } }
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}"); } } } } }
public FTXP(TexPatternAnim anim) { LoadAnim(anim); }