public override void Replace(string FileName) { string extension = System.IO.Path.GetExtension(FileName); if (extension == ".bfskl") { //Todo regenerate indices. //This will just fix swapping the same bonesets with slightly adjusted indices if (SkeletonU != null) { var indices = this.SkeletonU.MatrixToBoneList; SkeletonU = new ResU.Skeleton(); SkeletonU.Import(FileName, GetResFileU()); SkeletonU.MatrixToBoneList = indices; Nodes.Clear(); fskl.bones.Clear(); BfresWiiU.ReadSkeleton(this, SkeletonU, fskl); } else { var indices = this.SkeletonU.MatrixToBoneList; Skeleton = new Skeleton(); Skeleton.Import(FileName); SkeletonU.MatrixToBoneList = indices; Nodes.Clear(); fskl.bones.Clear(); BfresSwitch.ReadSkeleton(this, Skeleton, fskl); } } }
public FSKL(ResU.Skeleton skl) { node = new fsklNode(); node.fskl = this; node.SkeletonU = skl; BfresWiiU.ReadSkeleton(node, skl, this); }
public void ReplaceMatchingFile( ) { OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = ReplaceFilter; if (ofd.ShowDialog() == DialogResult.OK) { string extension = System.IO.Path.GetExtension(ofd.FileName); if (extension == ".bfskl") { if (SkeletonU != null) { ResU.Skeleton SkeltonTemp = new ResU.Skeleton(); SkeltonTemp.Import(ofd.FileName, GetResFileU()); foreach (BfresBone bone in fskl.bones) { if (SkeltonTemp.Bones.ContainsKey(bone.Text)) { bone.CopyData(SkeltonTemp.Bones[bone.Text]); } } BfresWiiU.ReadSkeleton(this, SkeletonU, fskl); } else { Skeleton SkeltonTemp = new Skeleton(); SkeltonTemp.Import(ofd.FileName); foreach (BfresBone bone in fskl.bones) { if (SkeltonTemp.BoneDict.ContainsKey(bone.Text)) { int index = SkeltonTemp.BoneDict.GetIndex(bone.Text); bone.CopyData(SkeltonTemp.Bones[index]); } } BfresSwitch.ReadSkeleton(this, Skeleton, fskl); } } } }
public override void Replace(string FileName) { string extension = System.IO.Path.GetExtension(FileName); if (extension == ".bfskl") { if (SkeletonU != null) { SkeletonU = new ResU.Skeleton(); SkeletonU.Import(FileName, GetResFileU()); Nodes.Clear(); fskl.bones.Clear(); BfresWiiU.ReadSkeleton(this, SkeletonU, fskl); } else { Skeleton = new Skeleton(); Skeleton.Import(FileName); Nodes.Clear(); fskl.bones.Clear(); BfresSwitch.ReadSkeleton(this, Skeleton, fskl); } } }
public FMDL NewModel(bool AddTreeNode = true) { FMDL fmdl = new FMDL(); if (IsWiiU) { fmdl.ModelU = new ResU.Model(); //Create skeleton with empty bone var skeleton = new ResU.Skeleton(); //Create skeleton with empty bone skeleton.Bones.Add("Root", new ResU.Bone() { Name = "Root" }); fmdl.ModelU.Skeleton = skeleton; var shape = new ResU.Shape() { Name = "NewShape" }; shape.CreateEmptyMesh(); var VertexBuffer = new ResU.VertexBuffer(); VertexBuffer.CreateEmptyVertexBuffer(); fmdl.ModelU.VertexBuffers.Add(VertexBuffer); fmdl.ModelU.Shapes.Add("NewShape", shape); fmdl.ModelU.Materials.Add("NewMaterial", new ResU.Material() { Name = "NewMaterial", RenderState = new ResU.RenderState(), }); BfresWiiU.ReadModel(fmdl, fmdl.ModelU); ((BFRES)Parent).DrawableContainer.Drawables.Add(fmdl.Skeleton); } else { fmdl.Model = new ResNX.Model(); //Create skeleton with empty bone var skeleton = new ResNX.Skeleton(); //Create skeleton with empty bone skeleton.Bones.Add(new ResNX.Bone() { Name = "Root" }); fmdl.Model.Skeleton = skeleton; var shape = new ResNX.Shape() { Name = "NewShape" }; shape.CreateEmptyMesh(); fmdl.Model.Shapes.Add(shape); fmdl.Model.Materials.Add(new ResNX.Material() { Name = "NewMaterial" }); var VertexBuffer = new ResNX.VertexBuffer(); VertexBuffer.CreateEmptyVertexBuffer(); fmdl.Model.VertexBuffers.Add(VertexBuffer); BfresSwitch.ReadModel(fmdl, fmdl.Model); ((BFRES)Parent).DrawableContainer.Drawables.Add(fmdl.Skeleton); } if (AddTreeNode) { AddNode(fmdl, "NewModel"); } return(fmdl); }
public void ReplaceMatchingFile( ) { OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = ReplaceFilter; if (ofd.ShowDialog() == DialogResult.OK) { string extension = System.IO.Path.GetExtension(ofd.FileName); if (extension == ".bfskl") { if (SkeletonU != null) { ResU.Skeleton SkeltonTemp = new ResU.Skeleton(); SkeltonTemp.Import(ofd.FileName, GetResFileU()); foreach (BfresBone bone in fskl.bones) { if (SkeltonTemp.Bones.ContainsKey(bone.Text)) { bone.CopyData(SkeltonTemp.Bones[bone.Text]); } } BfresWiiU.ReadSkeleton(this, SkeletonU, fskl); } else { Skeleton SkeltonTemp = new Skeleton(); SkeltonTemp.Import(ofd.FileName); foreach (BfresBone bone in fskl.bones) { if (SkeltonTemp.BoneDict.ContainsKey(bone.Text)) { int index = SkeltonTemp.BoneDict.GetIndex(bone.Text); bone.CopyData(SkeltonTemp.Bones[index]); } } BfresSwitch.ReadSkeleton(this, Skeleton, fskl); } } if (extension == ".csv") { using (var reader = new System.IO.StringReader(System.IO.File.ReadAllText(ofd.FileName))) { string value = reader.ReadLine(); if (value != "Bones Geometry") { return; } float X = 0; float Y = 0; float Z = 0; float W = 0; while (true) { string line = reader.ReadLine(); if (line != null) { foreach (BfresBone bone in fskl.bones) { if (bone.Text == line) { string name = line; string scaleStr = reader.ReadLine(); string rotationStr = reader.ReadLine(); string translationStr = reader.ReadLine(); string[] valuesS = scaleStr.Replace("\n", "").Replace("\r", "").Split(','); string[] valuesR = rotationStr.Replace("\n", "").Replace("\r", "").Split(','); string[] valuesT = translationStr.Replace("\n", "").Replace("\r", "").Split(','); Syroot.Maths.Vector3F translate; Syroot.Maths.Vector3F scale; Syroot.Maths.Vector4F rotate; float.TryParse(valuesT[0], out X); float.TryParse(valuesT[1], out Y); float.TryParse(valuesT[2], out Z); translate = new Syroot.Maths.Vector3F(X, Y, Z); float.TryParse(valuesR[0], out X); float.TryParse(valuesR[1], out Y); float.TryParse(valuesR[2], out Z); float.TryParse(valuesR[3], out W); rotate = new Syroot.Maths.Vector4F(X, Y, Z, W); float.TryParse(valuesS[0], out X); float.TryParse(valuesS[1], out Y); float.TryParse(valuesS[2], out Z); scale = new Syroot.Maths.Vector3F(X, Y, Z); if (bone.BoneU != null) { bone.BoneU.Position = translate; bone.BoneU.Scale = scale; bone.BoneU.Rotation = rotate; } else { bone.Bone.Position = translate; bone.Bone.Scale = scale; bone.Bone.Rotation = rotate; } } } } else { break; } } if (SkeletonU != null) { BfresWiiU.ReadSkeleton(this, SkeletonU, fskl); } else { BfresSwitch.ReadSkeleton(this, Skeleton, fskl); } LibraryGUI.UpdateViewport(); } } } }
public void Import(string[] FileNames, ResNX.ResFile resFileNX, ResU.ResFile resFileU) { if (Type == BRESGroupType.Textures) { ImportTexture(FileNames); return; } foreach (string FileName in FileNames) { string ResourceName = Path.GetFileNameWithoutExtension(FileName); string extension = Path.GetExtension(FileName); switch (Type) { case BRESGroupType.Models: FMDL fmdl = new FMDL(); fmdl.Text = ResourceName; if (IsWiiU) { fmdl.ModelU = new ResU.Model(); fmdl.ModelU = new ResU.Model(); fmdl.ModelU.Name = ResourceName; var skeleton = new ResU.Skeleton(); //Create skeleton with empty bone skeleton.Bones.Add("Root", new ResU.Bone() { Name = "Root" }); fmdl.ModelU.Skeleton = skeleton; BfresWiiU.ReadModel(fmdl, fmdl.ModelU); ((BFRES)Parent).AddSkeletonDrawable(fmdl.Skeleton); } else { fmdl.Model = new ResNX.Model(); fmdl.Model.Name = ResourceName; //Create skeleton with empty bone var skeleton = new ResNX.Skeleton(); skeleton.Bones.Add(new ResNX.Bone() { Name = "Root" }); fmdl.Model.Skeleton = skeleton; BfresSwitch.ReadModel(fmdl, fmdl.Model); ((BFRES)Parent).AddSkeletonDrawable(fmdl.Skeleton); } fmdl.Replace(FileName, resFileNX, resFileU); Nodes.Add(fmdl); fmdl.UpdateVertexData(); break; case BRESGroupType.SkeletalAnim: FSKA fska = new FSKA(); fska.Text = ResourceName; if (IsWiiU) { fska.SkeletalAnimU = new ResU.SkeletalAnim(); } else { fska.SkeletalAnim = new ResNX.SkeletalAnim(); } fska.Replace(FileName, resFileNX, resFileU); Nodes.Add(fska); break; case BRESGroupType.ShaderParamAnim: FSHU fshu = new FSHU(new ResU.ShaderParamAnim(), MaterialAnimation.AnimationType.ShaderParam); fshu.Text = ResourceName; fshu.Replace(FileName, resFileU); Nodes.Add(fshu); break; case BRESGroupType.ColorAnim: FSHU fclh = new FSHU(new ResU.ShaderParamAnim(), MaterialAnimation.AnimationType.Color); fclh.Text = ResourceName; fclh.Replace(FileName, resFileU); Nodes.Add(fclh); break; case BRESGroupType.TexSrtAnim: FSHU fsth = new FSHU(new ResU.ShaderParamAnim(), MaterialAnimation.AnimationType.TextureSrt); fsth.Text = ResourceName; fsth.Replace(FileName, resFileU); Nodes.Add(fsth); break; case BRESGroupType.TexPatAnim: FTXP ftxp = new FTXP(new ResU.TexPatternAnim()); ftxp.Text = ResourceName; ftxp.Replace(FileName, resFileU); Nodes.Add(ftxp); break; case BRESGroupType.BoneVisAnim: FVIS fbnv = new FVIS(); fbnv.Text = ResourceName; if (IsWiiU) { fbnv.VisibilityAnimU = new ResU.VisibilityAnim() { Type = ResU.VisibilityAnimType.Bone } } ; else { fbnv.VisibilityAnim = new ResNX.VisibilityAnim(); } fbnv.Replace(FileName, resFileNX, resFileU); Nodes.Add(fbnv); break; case BRESGroupType.MatVisAnim: FVIS fmtv = new FVIS(new ResU.VisibilityAnim() { Type = ResU.VisibilityAnimType.Material }); fmtv.Text = ResourceName; fmtv.Replace(FileName, resFileNX, resFileU); Nodes.Add(fmtv); break; case BRESGroupType.ShapeAnim: FSHA fsha = new FSHA(); fsha.Text = ResourceName; if (IsWiiU) { fsha.ShapeAnimU = new ResU.ShapeAnim(); } else { fsha.ShapeAnim = new ResNX.ShapeAnim(); } fsha.Replace(FileName, resFileNX, resFileU); Nodes.Add(fsha); break; case BRESGroupType.SceneAnim: FSCN fscn = new FSCN(); fscn.Text = ResourceName; if (IsWiiU) { fscn.SceneAnimU = new ResU.SceneAnim(); } else { fscn.SceneAnim = new ResNX.SceneAnim(); } fscn.Replace(FileName, resFileNX, resFileU); Nodes.Add(fscn); break; case BRESGroupType.Embedded: ExternalFileData ext = new ExternalFileData(ResourceName, File.ReadAllBytes(FileName)); ext.Replace(FileName); Nodes.Add(ext); break; case BRESGroupType.MaterialAnim: FMAA fmaa = new FMAA(new ResNX.MaterialAnim(), MaterialAnimation.AnimationType.ShaderParam); fmaa.Replace(FileName); Nodes.Add(fmaa); break; } } }
public void NewModel() { FMDL fmdl = new FMDL(); if (IsWiiU) { fmdl.ModelU = new ResU.Model(); //Create skeleton with empty bone var skeleton = new ResU.Skeleton(); //Create skeleton with empty bone skeleton.Bones.Add("Root", new ResU.Bone() { Name = "Root" }); fmdl.ModelU.Skeleton = skeleton; var shape = new ResU.Shape() { Name = "NewShape" }; shape.CreateEmptyMesh(); var VertexBuffer = new ResU.VertexBuffer(); VertexBuffer.CreateEmptyVertexBuffer(); fmdl.ModelU.VertexBuffers.Add(VertexBuffer); fmdl.ModelU.Shapes.Add("NewShape", shape); fmdl.ModelU.Materials.Add("NewMaterial", new ResU.Material() { Name = "NewMaterial" }); BfresWiiU.ReadModel(fmdl, fmdl.ModelU); ((BFRES)Parent).AddSkeletonDrawable(fmdl.Skeleton); } else { fmdl.Model = new ResNX.Model(); //Create skeleton with empty bone var skeleton = new ResNX.Skeleton(); //Create skeleton with empty bone skeleton.Bones.Add(new ResNX.Bone() { Name = "Root" }); fmdl.Model.Skeleton = skeleton; var shape = new ResNX.Shape() { Name = "NewShape" }; shape.CreateEmptyMesh(); fmdl.Model.Shapes.Add(shape); fmdl.Model.Materials.Add(new ResNX.Material() { Name = "NewMaterial" }); var VertexBuffer = new ResNX.VertexBuffer(); VertexBuffer.CreateEmptyVertexBuffer(); fmdl.Model.VertexBuffers.Add(VertexBuffer); BfresSwitch.ReadModel(fmdl, fmdl.Model); ((BFRES)Parent).AddSkeletonDrawable(fmdl.Skeleton); } AddNode(fmdl, "NewModel"); }