mirror of
https://github.com/KillzXGaming/Switch-Toolbox
synced 2024-11-10 15:14:55 +00:00
Fix skeletal animation importing/exporting for wii u bfres,
This commit is contained in:
parent
86ccd5f023
commit
e82d065255
9 changed files with 75 additions and 26 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -3,6 +3,3 @@
|
||||||
*.resources
|
*.resources
|
||||||
Debug/
|
Debug/
|
||||||
Release/
|
Release/
|
||||||
Switch_Toolbox/Lib/Syroot.NintenTools.Bfres.dll
|
|
||||||
Switch_Toolbox/Lib/Syroot.NintenTools.Bfres.pdb
|
|
||||||
Switch_Toolbox/Lib/Syroot.NintenTools.Bfres.xml
|
|
||||||
|
|
|
@ -366,8 +366,8 @@ namespace FirstPlugin
|
||||||
Nodes.Add(fksaFolder);
|
Nodes.Add(fksaFolder);
|
||||||
foreach (ResU.SkeletalAnim ska in resFile.SkeletalAnims.Values)
|
foreach (ResU.SkeletalAnim ska in resFile.SkeletalAnims.Values)
|
||||||
{
|
{
|
||||||
BfresSkeletonAnim skeletonAnim = new BfresSkeletonAnim(ska.Name);
|
FSKA skeletonAnim = new FSKA(ska.Name);
|
||||||
skeletonAnim.Read(ska, resFile);
|
skeletonAnim.Read(ska);
|
||||||
fksaFolder.Nodes.Add(skeletonAnim);
|
fksaFolder.Nodes.Add(skeletonAnim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -377,8 +377,8 @@ namespace FirstPlugin
|
||||||
Nodes.Add(fksaFolder);
|
Nodes.Add(fksaFolder);
|
||||||
foreach (SkeletalAnim ska in resFile.SkeletalAnims)
|
foreach (SkeletalAnim ska in resFile.SkeletalAnims)
|
||||||
{
|
{
|
||||||
BfresSkeletonAnim skeletonAnim = new BfresSkeletonAnim(ska.Name);
|
FSKA skeletonAnim = new FSKA(ska.Name);
|
||||||
skeletonAnim.Read(ska, resFile);
|
skeletonAnim.Read(ska);
|
||||||
fksaFolder.Nodes.Add(skeletonAnim);
|
fksaFolder.Nodes.Add(skeletonAnim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -462,7 +462,7 @@ namespace FirstPlugin
|
||||||
}
|
}
|
||||||
if (Nodes.ContainsKey("FSKA"))
|
if (Nodes.ContainsKey("FSKA"))
|
||||||
{
|
{
|
||||||
foreach (BfresSkeletonAnim ska in Nodes["FSKA"].Nodes)
|
foreach (FSKA ska in Nodes["FSKA"].Nodes)
|
||||||
resFile.SkeletalAnims.Add(ska.SkeletalAnim);
|
resFile.SkeletalAnims.Add(ska.SkeletalAnim);
|
||||||
}
|
}
|
||||||
if (Nodes.ContainsKey("FMAA"))
|
if (Nodes.ContainsKey("FMAA"))
|
||||||
|
@ -495,7 +495,7 @@ namespace FirstPlugin
|
||||||
{
|
{
|
||||||
var resFileU = BFRESRender.ResFileNode.resFileU;
|
var resFileU = BFRESRender.ResFileNode.resFileU;
|
||||||
resFileU.Models.Clear();
|
resFileU.Models.Clear();
|
||||||
// resFileU.SkeletalAnims.Clear();
|
resFileU.SkeletalAnims.Clear();
|
||||||
// resFileU.SceneAnims.Clear();
|
// resFileU.SceneAnims.Clear();
|
||||||
// resFileU.ShapeAnims.Clear();
|
// resFileU.ShapeAnims.Clear();
|
||||||
// resFileU.BoneVisibilityAnims.Clear();
|
// resFileU.BoneVisibilityAnims.Clear();
|
||||||
|
@ -516,6 +516,15 @@ namespace FirstPlugin
|
||||||
resFileU.Textures.Add(tex.Text, tex.texture);
|
resFileU.Textures.Add(tex.Text, tex.texture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Nodes.ContainsKey("FSKA"))
|
||||||
|
{
|
||||||
|
foreach (FSKA ska in Nodes["FSKA"].Nodes)
|
||||||
|
{
|
||||||
|
ska.SkeletalAnimU.Name = ska.Text;
|
||||||
|
resFileU.SkeletalAnims.Add(ska.Text, ska.SkeletalAnimU);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
throw new Exception("Failed to find textures");
|
throw new Exception("Failed to find textures");
|
||||||
|
|
||||||
|
|
|
@ -37,10 +37,14 @@ namespace Bfres.Structs
|
||||||
if (sfd.ShowDialog() == DialogResult.OK)
|
if (sfd.ShowDialog() == DialogResult.OK)
|
||||||
{
|
{
|
||||||
string folderPath = sfd.SelectedPath;
|
string folderPath = sfd.SelectedPath;
|
||||||
foreach (BfresSkeletonAnim fska in Nodes)
|
foreach (FSKA fska in Nodes)
|
||||||
{
|
{
|
||||||
string FileName = folderPath + '\\' + fska.Text + ".bfska";
|
string FileName = folderPath + '\\' + fska.Text + ".bfska";
|
||||||
((BfresSkeletonAnim)fska).SkeletalAnim.Export(FileName, fska.GetResFile());
|
|
||||||
|
if (fska.GetResFileU() != null)
|
||||||
|
((FSKA)fska).SkeletalAnimU.Export(FileName, fska.GetResFileU());
|
||||||
|
else
|
||||||
|
((FSKA)fska).SkeletalAnim.Export(FileName, fska.GetResFile());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,7 +58,7 @@ namespace Bfres.Structs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BfresSkeletonAnim : Animation
|
public class FSKA : Animation
|
||||||
{
|
{
|
||||||
public enum TrackType
|
public enum TrackType
|
||||||
{
|
{
|
||||||
|
@ -71,7 +75,7 @@ namespace Bfres.Structs
|
||||||
public SkeletalAnim SkeletalAnim;
|
public SkeletalAnim SkeletalAnim;
|
||||||
public ResU.SkeletalAnim SkeletalAnimU;
|
public ResU.SkeletalAnim SkeletalAnimU;
|
||||||
|
|
||||||
public BfresSkeletonAnim()
|
public FSKA()
|
||||||
{
|
{
|
||||||
ImageKey = "skeletonAnimation";
|
ImageKey = "skeletonAnimation";
|
||||||
SelectedImageKey = "skeletonAnimation";
|
SelectedImageKey = "skeletonAnimation";
|
||||||
|
@ -84,7 +88,7 @@ namespace Bfres.Structs
|
||||||
ContextMenu.MenuItems.Add(replace);
|
ContextMenu.MenuItems.Add(replace);
|
||||||
replace.Click += Replace;
|
replace.Click += Replace;
|
||||||
}
|
}
|
||||||
public BfresSkeletonAnim(string name)
|
public FSKA(string name)
|
||||||
{
|
{
|
||||||
Text = name;
|
Text = name;
|
||||||
|
|
||||||
|
@ -120,7 +124,7 @@ namespace Bfres.Structs
|
||||||
{
|
{
|
||||||
if (GetResFileU() != null)
|
if (GetResFileU() != null)
|
||||||
{
|
{
|
||||||
throw new Exception("Wii U unsupported!");
|
SkeletalAnimU.Export(sfd.FileName, GetResFileU());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -137,19 +141,24 @@ namespace Bfres.Structs
|
||||||
{
|
{
|
||||||
if (GetResFileU() != null)
|
if (GetResFileU() != null)
|
||||||
{
|
{
|
||||||
throw new Exception("Wii U unsupported!");
|
SkeletalAnimU.Import(ofd.FileName, GetResFileU());
|
||||||
|
SkeletalAnimU.Name = Text;
|
||||||
|
Read(SkeletalAnimU);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SkeletalAnim.Import(ofd.FileName);
|
SkeletalAnim.Import(ofd.FileName);
|
||||||
|
SkeletalAnim.Name = Text;
|
||||||
|
Read(SkeletalAnim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SkeletalAnim.Name = Text;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Animation> SkeletonAnimations = new List<Animation>();
|
public void Read(ResU.SkeletalAnim ska)
|
||||||
public void Read(ResU.SkeletalAnim ska, ResU.ResFile b)
|
|
||||||
{
|
{
|
||||||
|
Nodes.Clear();
|
||||||
|
Bones.Clear();
|
||||||
|
|
||||||
FrameCount = ska.FrameCount;
|
FrameCount = ska.FrameCount;
|
||||||
SkeletalAnimU = ska;
|
SkeletalAnimU = ska;
|
||||||
|
|
||||||
|
@ -220,8 +229,11 @@ namespace Bfres.Structs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Read(SkeletalAnim ska, ResFile b)
|
public void Read(SkeletalAnim ska)
|
||||||
{
|
{
|
||||||
|
Nodes.Clear();
|
||||||
|
Bones.Clear();
|
||||||
|
|
||||||
FrameCount = ska.FrameCount;
|
FrameCount = ska.FrameCount;
|
||||||
SkeletalAnim = ska;
|
SkeletalAnim = ska;
|
||||||
|
|
||||||
|
@ -311,8 +323,6 @@ namespace Bfres.Structs
|
||||||
public List<FSKATrack> tracks = new List<FSKATrack>();
|
public List<FSKATrack> tracks = new List<FSKATrack>();
|
||||||
public FSKANode(ResU.BoneAnim b)
|
public FSKANode(ResU.BoneAnim b)
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
|
|
||||||
Text = b.Name;
|
Text = b.Name;
|
||||||
|
|
||||||
sca = new Vector3(b.BaseData.Scale.X, b.BaseData.Scale.Y, b.BaseData.Scale.Z);
|
sca = new Vector3(b.BaseData.Scale.X, b.BaseData.Scale.Y, b.BaseData.Scale.Z);
|
||||||
|
|
|
@ -338,7 +338,7 @@ namespace FirstPlugin
|
||||||
VertexBufferHelperAttrib attd = helper[attName];
|
VertexBufferHelperAttrib attd = helper[attName];
|
||||||
return attd.Data;
|
return attd.Data;
|
||||||
}
|
}
|
||||||
public static SkeletalAnim SetSkeletalAniamtion(BfresSkeletonAnim anim)
|
public static SkeletalAnim SetSkeletalAniamtion(FSKA anim)
|
||||||
{
|
{
|
||||||
SkeletalAnim animation = new SkeletalAnim();
|
SkeletalAnim animation = new SkeletalAnim();
|
||||||
|
|
||||||
|
@ -359,7 +359,7 @@ namespace FirstPlugin
|
||||||
|
|
||||||
return animation;
|
return animation;
|
||||||
}
|
}
|
||||||
private static BoneAnim createBoneAnim(Animation.KeyNode bone, BfresSkeletonAnim anim)
|
private static BoneAnim createBoneAnim(Animation.KeyNode bone, FSKA anim)
|
||||||
{
|
{
|
||||||
BoneAnim boneAnim = new BoneAnim();
|
BoneAnim boneAnim = new BoneAnim();
|
||||||
boneAnim.Name = bone.Name;
|
boneAnim.Name = bone.Name;
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -2417,6 +2417,11 @@
|
||||||
Starts serializing the data from the <see cref="P:Syroot.NintenTools.Bfres.Core.ResFileSaver.Material"/> root.
|
Starts serializing the data from the <see cref="P:Syroot.NintenTools.Bfres.Core.ResFileSaver.Material"/> root.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Syroot.NintenTools.Bfres.Core.ResFileSaver.ExportSkeletalAnimation">
|
||||||
|
<summary>
|
||||||
|
Starts serializing the data from the <see cref="P:Syroot.NintenTools.Bfres.Core.ResFileSaver.SkeletalAnim"/> root.
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="M:Syroot.NintenTools.Bfres.Core.ResFileSaver.Execute">
|
<member name="M:Syroot.NintenTools.Bfres.Core.ResFileSaver.Execute">
|
||||||
<summary>
|
<summary>
|
||||||
Starts serializing the data from the <see cref="P:Syroot.NintenTools.Bfres.Core.ResFileSaver.ResFile"/> root.
|
Starts serializing the data from the <see cref="P:Syroot.NintenTools.Bfres.Core.ResFileSaver.ResFile"/> root.
|
||||||
|
@ -5316,6 +5321,34 @@
|
||||||
Gets or sets customly attached <see cref="P:Syroot.NintenTools.Bfres.SkeletalAnim.UserData"/> instances.
|
Gets or sets customly attached <see cref="P:Syroot.NintenTools.Bfres.SkeletalAnim.UserData"/> instances.
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Syroot.NintenTools.Bfres.SkeletalAnim.Import(System.IO.Stream,Syroot.NintenTools.Bfres.ResFile,System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
Initializes a new instance of the <see cref="T:Syroot.NintenTools.Bfres.Material"/> class from the given <paramref name="stream"/> which
|
||||||
|
is optionally left open.
|
||||||
|
</summary>
|
||||||
|
<param name="stream">The <see cref="T:System.IO.Stream"/> to load the data from.</param>
|
||||||
|
<param name="leaveOpen"><c>true</c> to leave the stream open after reading, otherwise <c>false</c>.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Syroot.NintenTools.Bfres.SkeletalAnim.Import(System.String,Syroot.NintenTools.Bfres.ResFile)">
|
||||||
|
<summary>
|
||||||
|
Initializes a new instance of the <see cref="T:Syroot.NintenTools.Bfres.ResFile"/> class from the file with the given
|
||||||
|
<paramref name="fileName"/>.
|
||||||
|
</summary>
|
||||||
|
<param name="fileName">The name of the file to load the data from.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Syroot.NintenTools.Bfres.SkeletalAnim.Export(System.IO.Stream,Syroot.NintenTools.Bfres.ResFile,System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
Saves the contents in the given <paramref name="stream"/> and optionally leaves it open
|
||||||
|
</summary>
|
||||||
|
<param name="stream">The <see cref="T:System.IO.Stream"/> to save the contents into.</param>
|
||||||
|
<param name="leaveOpen"><c>true</c> to leave the stream open after writing, otherwise <c>false</c>.</param>
|
||||||
|
</member>
|
||||||
|
<member name="M:Syroot.NintenTools.Bfres.SkeletalAnim.Export(System.String,Syroot.NintenTools.Bfres.ResFile)">
|
||||||
|
<summary>
|
||||||
|
Saves the contents in the file with the given <paramref name="fileName"/>.
|
||||||
|
</summary>
|
||||||
|
<param name="fileName">The name of the file to save the contents into.</param>
|
||||||
|
</member>
|
||||||
<member name="T:Syroot.NintenTools.Bfres.SkeletalAnimFlags">
|
<member name="T:Syroot.NintenTools.Bfres.SkeletalAnimFlags">
|
||||||
<summary>
|
<summary>
|
||||||
Represents flags specifying how animation data is stored or should be played.
|
Represents flags specifying how animation data is stored or should be played.
|
||||||
|
|
BIN
Switch_Toolbox/Lib/Syroot.NintenTools.Bfres.zip
Normal file
BIN
Switch_Toolbox/Lib/Syroot.NintenTools.Bfres.zip
Normal file
Binary file not shown.
|
@ -16,7 +16,7 @@ namespace Switch_Toolbox.Library
|
||||||
public virtual void OnMouseRightClick(TreeView treeview) { }
|
public virtual void OnMouseRightClick(TreeView treeview) { }
|
||||||
public virtual void OnDoubleMouseClick(TreeView treeview) { }
|
public virtual void OnDoubleMouseClick(TreeView treeview) { }
|
||||||
|
|
||||||
public void Sort(TreeNode node)
|
public void SortNodes(TreeNode node)
|
||||||
{
|
{
|
||||||
/* string[] array = new string[Nodes.Count];
|
/* string[] array = new string[Nodes.Count];
|
||||||
for (int i = 0; i < Nodes.Count; ++i)
|
for (int i = 0; i < Nodes.Count; ++i)
|
||||||
|
@ -29,7 +29,7 @@ namespace Switch_Toolbox.Library
|
||||||
|
|
||||||
//Good enough for now. I'll update with a more cleaner method later
|
//Good enough for now. I'll update with a more cleaner method later
|
||||||
foreach (TreeNode n in node.Nodes)
|
foreach (TreeNode n in node.Nodes)
|
||||||
Sort(n);
|
SortNodes(n);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
TreeNode temp = null;
|
TreeNode temp = null;
|
||||||
|
|
Loading…
Reference in a new issue