1
0
mirror of synced 2024-11-14 19:17:39 +01:00

Convert wii u and switch texture pattern animations

This commit is contained in:
KillzXGaming 2019-07-14 13:22:59 -04:00
parent 3312f5ab00
commit a08d878d45
10 changed files with 80 additions and 6 deletions

Binary file not shown.

View File

@ -720,7 +720,7 @@ namespace Bfres.Structs
} }
else if (ext == ".yaml") else if (ext == ".yaml")
{ {
System.IO.File.WriteAllText(FileName, YamlFmaa.ToYaml(FileName, this)); System.IO.File.WriteAllText(FileName, YamlFmaa.ToYaml(FileName, MaterialAnim));
} }
} }
public override void Replace(string FileName) public override void Replace(string FileName)

View File

@ -225,9 +225,23 @@ namespace Bfres.Structs
public override string ExportFilter => FileFilters.GetFilter(typeof(FTXP)); public override string ExportFilter => FileFilters.GetFilter(typeof(FTXP));
public override void Export(string FileName) public override void Export(string FileName)
{
string ext = Utils.GetExtension(FileName);
if (ext == ".bftxp")
{ {
TexPatternAnim.Export(FileName, GetResFile()); TexPatternAnim.Export(FileName, GetResFile());
} }
else if (ext == ".bfmaa")
{
var fmaa = BfresPlatformConverter.FTXPConvertWiiUToSwitch(TexPatternAnim);
fmaa.Export(FileName, new Syroot.NintenTools.NSW.Bfres.ResFile());
}
else if (ext == ".yaml")
{
var yaml = YamlFmaa.ToYaml(FileName, BfresPlatformConverter.FTXPConvertWiiUToSwitch(TexPatternAnim));
System.IO.File.WriteAllText(FileName, yaml);
}
}
public override void Replace(string FileName) { public override void Replace(string FileName) {
Replace(FileName, GetResFile()); Replace(FileName, GetResFile());
@ -239,10 +253,25 @@ namespace Bfres.Structs
if (ext == ".bftxp") 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.Import(FileName, resFile);
TexPatternAnim.Name = Text; TexPatternAnim.Name = Text;
LoadAnim(TexPatternAnim); LoadAnim(TexPatternAnim);
} }
else if (ext == ".yaml")
{
var fmaa = new Syroot.NintenTools.NSW.Bfres.MaterialAnim();
fmaa = YamlFmaa.FromYaml(FileName);
TexPatternAnim = BfresPlatformConverter.FTXPConvertSwitchToWiiU(fmaa);
}
else if (ext == ".gif") else if (ext == ".gif")
{ {
BFRESGroupNode ftexFolder = PluginRuntime.ftexContainers[0]; BFRESGroupNode ftexFolder = PluginRuntime.ftexContainers[0];

View File

@ -131,6 +131,51 @@ namespace FirstPlugin
return matAnim; return matAnim;
} }
public static ResU.TexPatternAnim FTXPConvertSwitchToWiiU(ResNX.MaterialAnim materialAnim)
{
var texPatternAnim = new ResU.TexPatternAnim();
//Different versions use different lists
if (texPatternAnim.TextureRefNames == null)
texPatternAnim.TextureRefNames = new List<ResU.TextureRef>();
if (texPatternAnim.TextureRefs == null)
texPatternAnim.TextureRefs = new ResU.ResDict<ResU.TextureRef>();
texPatternAnim.Name = materialAnim.Name;
texPatternAnim.Path = materialAnim.Path;
texPatternAnim.BindIndices = materialAnim.BindIndices;
//Fill both lists. On save only one will be used depending on version
foreach (var texName in materialAnim.TextureNames)
{
texPatternAnim.TextureRefNames.Add(new ResU.TextureRef() { Name = texName });
texPatternAnim.TextureRefs.Add(texName, new ResU.TextureRef() { Name = texName });
}
for (int m = 0; m < materialAnim.MaterialAnimDataList.Count; m++)
{
ResU.TexPatternMatAnim matAnimData = new ResU.TexPatternMatAnim();
matAnimData.Name = materialAnim.MaterialAnimDataList[m].Name;
matAnimData.Curves = ConvertAnimCurveSwitchToWiiU(materialAnim.MaterialAnimDataList[m].Curves);
foreach (var constants in materialAnim.MaterialAnimDataList[m].Constants)
{
matAnimData.BaseDataList.Add((ushort)(int)constants.Value);
}
foreach (var patternInfoNX in materialAnim.MaterialAnimDataList[m].TexturePatternAnimInfos)
{
var patternInfoU = new ResU.PatternAnimInfo();
patternInfoU.Name = patternInfoNX.Name;
patternInfoU.CurveIndex = (sbyte)patternInfoNX.CurveIndex;
patternInfoU.SubBindIndex = patternInfoNX.SubBindIndex;
matAnimData.PatternAnimInfos.Add(patternInfoU);
}
}
return texPatternAnim;
}
public static ResNX.MaterialAnim FTXPConvertWiiUToSwitch(ResU.TexPatternAnim texPatternAnim) public static ResNX.MaterialAnim FTXPConvertWiiUToSwitch(ResU.TexPatternAnim texPatternAnim)
{ {
//Different versions use different lists //Different versions use different lists

View File

@ -35,7 +35,7 @@ namespace FirstPlugin
public static string FCLH = GetFilter(".bfcsh"); public static string FCLH = GetFilter(".bfcsh");
public static string FSTH = GetFilter(".bfsth"); public static string FSTH = GetFilter(".bfsth");
public static string FTXP = GetFilter(".bftxp", ".gif"); public static string FTXP = GetFilter(".bftxp", ".yaml", ".gif");
public static string FMTV = GetFilter(".bfmvi"); public static string FMTV = GetFilter(".bfmvi");
public static string FBNV = GetFilter(".bfbvi"); public static string FBNV = GetFilter(".bfbvi");
public static string FSCN = GetFilter(".bfscn"); public static string FSCN = GetFilter(".bfscn");
@ -134,6 +134,7 @@ namespace FirstPlugin
case ".chr0": filters.Add(ext, "CHR0 Animation"); break; case ".chr0": filters.Add(ext, "CHR0 Animation"); break;
case ".anim": filters.Add(ext, "Maya Animation"); break; case ".anim": filters.Add(ext, "Maya Animation"); break;
case ".yaml": filters.Add(ext, "Yet Another Markup Language"); break; case ".yaml": filters.Add(ext, "Yet Another Markup Language"); break;
case ".gif": filters.Add(ext, "Graphics Interchange Format"); break;
default: default:
filters.Add(ext, ""); break; filters.Add(ext, ""); break;
} }

View File

@ -308,7 +308,7 @@ namespace FirstPlugin
return config.FromYaml(); return config.FromYaml();
} }
public static string ToYaml(string Name, FMAA anim) public static string ToYaml(string Name, MaterialAnim MatAnim)
{ {
var serializerSettings = new SerializerSettings() var serializerSettings = new SerializerSettings()
{ {
@ -319,7 +319,6 @@ namespace FirstPlugin
serializerSettings.ComparerForKeySorting = null; serializerSettings.ComparerForKeySorting = null;
serializerSettings.RegisterTagMapping("AnimConfig", typeof(AnimConfig)); serializerSettings.RegisterTagMapping("AnimConfig", typeof(AnimConfig));
var MatAnim = anim.MaterialAnim;
var config = new AnimConfig(); var config = new AnimConfig();
config.ToYaml(MatAnim); config.ToYaml(MatAnim);