diff --git a/File_Format_Library/FileFormats/BFRES/BFRES.cs b/File_Format_Library/FileFormats/BFRES/BFRES.cs index 154a9c71..94e7b298 100644 --- a/File_Format_Library/FileFormats/BFRES/BFRES.cs +++ b/File_Format_Library/FileFormats/BFRES/BFRES.cs @@ -1150,34 +1150,35 @@ namespace FirstPlugin for (int i = 0; i < resFile.MaterialAnims.Count; i++) { var anim = resFile.MaterialAnims[i]; - if (FMAA.IsShaderParamAnimation(anim.Name)) + var fmaa = new FMAA(anim); + if (fmaa.AnimType == MaterialAnimation.AnimationType.ShaderParam) { - group.AddNode(new FMAA(anim, MaterialAnimation.AnimationType.ShaderParam)); + group.AddNode(fmaa); HasShaderParamsAnim = true; } - else if (FMAA.IsSRTAnimation(anim.Name)) + else if (fmaa.AnimType == MaterialAnimation.AnimationType.TextureSrt) { - group2.AddNode(new FMAA(anim, MaterialAnimation.AnimationType.TextureSrt)); + group2.AddNode(fmaa); HasTextureSrtAnim = true; } - else if(FMAA.IsTexturePattern(anim.Name)) + else if (fmaa.AnimType == MaterialAnimation.AnimationType.TexturePattern) { - group3.AddNode(new FMAA(anim, MaterialAnimation.AnimationType.TexturePattern)); + group3.AddNode(fmaa); HasTexturePatternAnim = true; } - else if (FMAA.IsColorAnimation(anim.Name)) + else if (fmaa.AnimType == MaterialAnimation.AnimationType.Color) { - group4.AddNode(new FMAA(anim, MaterialAnimation.AnimationType.Color)); + group4.AddNode(fmaa); HasColorAnim = true; } - else if (FMAA.IsVisibiltyAnimation(anim.Name)) + else if (fmaa.AnimType == MaterialAnimation.AnimationType.Visibilty) { - group5.AddNode(new FMAA(anim, MaterialAnimation.AnimationType.Visibilty)); + group5.AddNode(fmaa); HasMatVisAnim = true; } else { - group6.AddNode(new FMAA(anim, MaterialAnimation.AnimationType.ShaderParam)); + group.AddNode(fmaa); HasMaterialAnim = true; } } diff --git a/File_Format_Library/FileFormats/BFRES/BFRESAnimFolder.cs b/File_Format_Library/FileFormats/BFRES/BFRESAnimFolder.cs index 1f9fe3c0..b0c969a3 100644 --- a/File_Format_Library/FileFormats/BFRES/BFRESAnimFolder.cs +++ b/File_Format_Library/FileFormats/BFRES/BFRESAnimFolder.cs @@ -296,7 +296,7 @@ namespace Bfres.Structs else { group = GetOrCreateFolder(type); - FMAA fmaa = new FMAA(new ResNX.MaterialAnim(), type); + FMAA fmaa = new FMAA(new ResNX.MaterialAnim()); group.AddNode(fmaa, "NewShaderParamAnim_fsp"); } @@ -317,7 +317,7 @@ namespace Bfres.Structs else { group = GetOrCreateFolder(type); - FMAA fmaa = new FMAA(new ResNX.MaterialAnim(), type); + FMAA fmaa = new FMAA(new ResNX.MaterialAnim()); group.AddNode(fmaa, "NewColorAnim_fcl"); } @@ -338,7 +338,7 @@ namespace Bfres.Structs else { group = GetOrCreateFolder(type); - FMAA fmaa = new FMAA(new ResNX.MaterialAnim(), type); + FMAA fmaa = new FMAA(new ResNX.MaterialAnim()); group.AddNode(fmaa, "NewTextureTransformAnim_fts"); } @@ -359,7 +359,7 @@ namespace Bfres.Structs else { group = GetOrCreateFolder(type); - FMAA fmaa = new FMAA(new ResNX.MaterialAnim(), type); + FMAA fmaa = new FMAA(new ResNX.MaterialAnim()); group.AddNode(fmaa, "NewTexturePatternAnim_ftp"); } @@ -396,7 +396,7 @@ namespace Bfres.Structs else { group = GetOrCreateFolder(MaterialAnimation.AnimationType.Visibilty); - FMAA fmaa = new FMAA(new ResNX.MaterialAnim(), MaterialAnimation.AnimationType.Visibilty); + FMAA fmaa = new FMAA(new ResNX.MaterialAnim()); group.AddNode(fmaa, "NewMatVisAnim_fvm"); } diff --git a/File_Format_Library/FileFormats/BFRES/BFRESGroupNode.cs b/File_Format_Library/FileFormats/BFRES/BFRESGroupNode.cs index e9307fed..33c94686 100644 --- a/File_Format_Library/FileFormats/BFRES/BFRESGroupNode.cs +++ b/File_Format_Library/FileFormats/BFRES/BFRESGroupNode.cs @@ -483,7 +483,7 @@ namespace Bfres.Structs } else { - FMAA fmaaPrm = new FMAA(new ResNX.MaterialAnim(), MaterialAnimation.AnimationType.ShaderParam); + FMAA fmaaPrm = new FMAA(new ResNX.MaterialAnim()); fmaaPrm.Text = ResourceName; fmaaPrm.Replace(FileName); Nodes.Add(fmaaPrm); @@ -499,7 +499,7 @@ namespace Bfres.Structs } else { - FMAA fmaaClr = new FMAA(new ResNX.MaterialAnim(), MaterialAnimation.AnimationType.Color); + FMAA fmaaClr = new FMAA(new ResNX.MaterialAnim()); fmaaClr.Text = ResourceName; fmaaClr.Replace(FileName); Nodes.Add(fmaaClr); @@ -515,7 +515,7 @@ namespace Bfres.Structs } else { - FMAA fmaaSrt = new FMAA(new ResNX.MaterialAnim(), MaterialAnimation.AnimationType.TextureSrt); + FMAA fmaaSrt = new FMAA(new ResNX.MaterialAnim()); fmaaSrt.Text = ResourceName; fmaaSrt.Replace(FileName); Nodes.Add(fmaaSrt); @@ -531,7 +531,7 @@ namespace Bfres.Structs } else { - FMAA fmaaTxp = new FMAA(new ResNX.MaterialAnim(), MaterialAnimation.AnimationType.TexturePattern); + FMAA fmaaTxp = new FMAA(new ResNX.MaterialAnim()); fmaaTxp.Text = ResourceName; fmaaTxp.Replace(FileName); Nodes.Add(fmaaTxp); @@ -560,7 +560,7 @@ namespace Bfres.Structs } else { - FMAA fmaaVis = new FMAA(new ResNX.MaterialAnim(), MaterialAnimation.AnimationType.Visibilty); + FMAA fmaaVis = new FMAA(new ResNX.MaterialAnim()); fmaaVis.Text = ResourceName; fmaaVis.Replace(FileName); Nodes.Add(fmaaVis); @@ -594,7 +594,7 @@ namespace Bfres.Structs Nodes.Add(ext); break; case BRESGroupType.MaterialAnim: - FMAA fmaa = new FMAA(new ResNX.MaterialAnim(), MaterialAnimation.AnimationType.ShaderParam); + FMAA fmaa = new FMAA(new ResNX.MaterialAnim()); fmaa.Replace(FileName); Nodes.Add(fmaa); break; diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs index 966f8e0a..8ac9e85c 100644 --- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs +++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Text; using System.Collections.Generic; using System.Windows.Forms; @@ -13,56 +14,39 @@ namespace Bfres.Structs { public class FMAA : MaterialAnimation { - private static readonly string ShaderParamAnimType = "_fsp"; - private static readonly string ShaderParamAnimType2= "_sp"; - private static readonly string TexturePatternAnimType = "_ftp"; - private static readonly string TexturePatternAnimType2 = "_tp"; - private static readonly string TextureSrtAnimType = "_fts"; - private static readonly string TextureSrtAnimType2 = "_ts"; - private static readonly string ColorAnimType = "_fcl"; - private static readonly string ColorAnimType2 = "_cl"; - private static readonly string VisibiltyAnimType = "_fvm"; - private static readonly string VisibiltyAnimType2 = "_vm"; - - public string GetTypeExtension() + public override AnimationType AnimType { - if (Parent == null) - return ""; - - BFRESGroupNode AnimFolder = (BFRESGroupNode)Parent; - - switch (AnimFolder.Type) + get { - case BRESGroupType.TexPatAnim: return TexturePatternAnimType; - case BRESGroupType.ShaderParamAnim: return ShaderParamAnimType; - case BRESGroupType.TexSrtAnim: return TextureSrtAnimType; - case BRESGroupType.ColorAnim: return ColorAnimType; - case BRESGroupType.MatVisAnim: return VisibiltyAnimType; - default: - return ""; + if (MaterialAnim != null) + { + string nameType = MaterialAnim.Name.Split('_').Last(); + + if (MaterialAnim.TextureNames?.Count > 0) + return AnimationType.TexturePattern; + else if (nameMappedTypes.ContainsKey($"_{nameType}")) + return nameMappedTypes[$"_{nameType}"]; + else + return AnimationType.ShaderParam; + } + + return AnimationType.ShaderParam; } } - public static bool IsShaderParamAnimation(string name) { - return name.Contains(ShaderParamAnimType) || - name.Contains(ShaderParamAnimType2); - } - public static bool IsSRTAnimation(string name){ - return name.Contains(TextureSrtAnimType) || - name.Contains(TextureSrtAnimType2); - } - public static bool IsTexturePattern(string name) { - return name.Contains(TexturePatternAnimType) || - name.Contains(TexturePatternAnimType2); - } - public static bool IsColorAnimation(string name) { - return name.Contains(ColorAnimType) || - name.Contains(ColorAnimType2); - } - public static bool IsVisibiltyAnimation(string name) { - return name.Contains(VisibiltyAnimType) || - name.Contains(VisibiltyAnimType2); - } + private Dictionary nameMappedTypes = new Dictionary + { + {"_fsp", AnimationType.ShaderParam }, + {"_sp", AnimationType.ShaderParam }, + {"_ftp", AnimationType.TexturePattern }, + {"_tp", AnimationType.TexturePattern }, + {"_fts", AnimationType.TextureSrt }, + {"_ts", AnimationType.TextureSrt }, + {"_fcl", AnimationType.Color }, + {"_cl", AnimationType.Color }, + {"_fvm", AnimationType.Visibilty }, + {"_vm", AnimationType.Visibilty }, + }; public override void OnDoubleMouseClick(TreeView treeview) { @@ -147,6 +131,7 @@ namespace Bfres.Structs { MaterialAnim.FrameCount = FrameCount; MaterialAnim.TextureNames = Textures; + MaterialAnim.Name = Text; int TexturePatternCurveIndex = 0; int ParamCurveIndex = 0; @@ -306,42 +291,6 @@ namespace Bfres.Structs } - private string GetString(string Name) - { - StringBuilder builder = new StringBuilder(Name); - - builder.Replace(ShaderParamAnimType, ""); - builder.Replace(TexturePatternAnimType, ""); - builder.Replace(TextureSrtAnimType, ""); - builder.Replace(ColorAnimType, ""); - builder.Replace(VisibiltyAnimType, ""); - - return builder.ToString(); - } - - public string SetName() - { - Text = GetString(Text); //Remove any extension just in case - - //Add extension to the end of the string based on type - if (AnimType == AnimationType.Color) - Text += ColorAnimType; - else if (AnimType == AnimationType.ShaderParam) - Text += ShaderParamAnimType; - else if (AnimType == AnimationType.TexturePattern) - Text += TexturePatternAnimType; - else if (AnimType == AnimationType.TextureSrt) - Text += TextureSrtAnimType; - else if (AnimType == AnimationType.Visibilty) - Text += VisibiltyAnimType; - else - Text += ShaderParamAnimType; - - MaterialAnim.Name = Text; - - return Text; - } - public BFRESRender BFRESRender; public MaterialAnim MaterialAnim; public FMAA() @@ -382,7 +331,7 @@ namespace Bfres.Structs return ((BFRESGroupNode)Parent).GetResFile(); } - public FMAA(MaterialAnim anim, AnimationType type) { LoadAnim(anim); AnimType = type; } + public FMAA(MaterialAnim anim) { LoadAnim(anim); } private void LoadAnim(MaterialAnim anim) { @@ -390,7 +339,7 @@ namespace Bfres.Structs MaterialAnim = anim; FrameCount = MaterialAnim.FrameCount; - Text = GetString(anim.Name); + Text = anim.Name; Textures.Clear(); if (anim.TextureNames != null) @@ -414,11 +363,13 @@ namespace Bfres.Structs paramInfo.Type = AnimationType.ShaderParam; //There is no better way to determine if the param is a color type afaik - if (anim.Name.Contains(ColorAnimType) || param.Name.Contains("Color") || param.Name.Contains("color") || param.Name == "multi_tex_reg2") + if (param.Name.Contains("Color") || param.Name.Contains("color") || param.Name == "multi_tex_reg2") paramInfo.Type = AnimationType.Color; - else if (anim.Name.Contains(TextureSrtAnimType)) + else if (AnimType == AnimationType.TexturePattern) paramInfo.Type = AnimationType.TexturePattern; - else if (anim.Name.Contains(ShaderParamAnimType)) + else if (AnimType == AnimationType.TextureSrt) + paramInfo.Type = AnimationType.TextureSrt; + else paramInfo.Type = AnimationType.ShaderParam; //Get constant anims @@ -731,20 +682,20 @@ namespace Bfres.Structs if (ext == ".bfmaa") { MaterialAnim.Import(FileName); - MaterialAnim.Name = Text + GetTypeExtension(); + MaterialAnim.Name = Text; LoadAnim(MaterialAnim); } else if (ext == ".yaml") { MaterialAnim = YamlFmaa.FromYaml(FileName); - MaterialAnim.Name = Text + GetTypeExtension(); + MaterialAnim.Name = Text; LoadAnim(MaterialAnim); } else if (ext == ".gif" || ext == ".png" || ext == ".apng") { BNTX bntx = PluginRuntime.bntxContainers[0]; GifToTexturePatternAnimation anim = new GifToTexturePatternAnimation(FileName, bntx, this); - MaterialAnim.Name = Text + GetTypeExtension(); + MaterialAnim.Name = Text; LoadAnim(MaterialAnim); } diff --git a/Switch_Toolbox_Library/Animations/MaterialAnimation.cs b/Switch_Toolbox_Library/Animations/MaterialAnimation.cs index 911b53a0..bad59118 100644 --- a/Switch_Toolbox_Library/Animations/MaterialAnimation.cs +++ b/Switch_Toolbox_Library/Animations/MaterialAnimation.cs @@ -10,7 +10,7 @@ namespace Toolbox.Library.Animations { public class MaterialAnimation : Animation { - public AnimationType AnimType; + public virtual AnimationType AnimType { get; set; } public enum AnimationType { ShaderParam,