public void CreateBoneList(GenericObject ob, FMDL mdl) { string[] nodeArrStrings = new string[mdl.Skeleton.Node_Array.Length]; int CurNode = 0; foreach (int thing in mdl.Skeleton.Node_Array) { nodeArrStrings[CurNode++] = mdl.Skeleton.bones[thing].Text; } foreach (Vertex v in ob.vertices) { foreach (string bn in v.boneNames) { foreach (var defBn in nodeArrStrings.Select((Value, Index) => new { Value, Index })) { if (bn == defBn.Value) { v.boneIds.Add(defBn.Index); } } } } }
public void CreateIndexList(GenericObject ob, FMDL mdl = null) { BoneIndices = new List <ushort>(); List <string> boneNames = new List <string>(); foreach (Vertex v in ob.vertices) { foreach (string bn in v.boneNames) { if (!boneNames.Contains(bn)) { boneNames.Add(bn); } } } int index = 0; foreach (STBone bone in mdl.Skeleton.bones) { foreach (string bnam in boneNames) { if (bone.Text == bnam) { BoneIndices.Add((ushort)index); } } index++; } }
public void CreateIndexList(STGenericObject ob, FMDL mdl = null) { BoneIndices = new List <ushort>(); List <string> boneNames = new List <string>(); foreach (Vertex v in ob.vertices) { foreach (string bn in v.boneNames) { if (!boneNames.Contains(bn)) { boneNames.Add(bn); } } } foreach (STBone bone in mdl.Skeleton.bones) { foreach (string bnam in boneNames) { if (bone.Text == bnam) { int index = boneNames.IndexOf(bone.Text); STConsole.WriteLine($"Adding bone to shape index list! {bone.Text} {index}"); BoneIndices.Add((ushort)index); } } } }
public void CreateBoneList(STGenericObject ob, FMDL mdl) { if (mdl.Skeleton.Node_Array == null) { mdl.Skeleton.Node_Array = new int[0]; } string[] nodeArrStrings = new string[mdl.Skeleton.Node_Array.Length]; short[] nodeRigidIndex = new short[mdl.Skeleton.Node_Array.Length]; int CurNode = 0; foreach (int thing in mdl.Skeleton.Node_Array) { nodeArrStrings[CurNode] = mdl.Skeleton.bones[thing].Text; nodeRigidIndex[CurNode] = mdl.Skeleton.bones[thing].RigidMatrixIndex; CurNode++; } foreach (Vertex v in ob.vertices) { List <int> RigidIds = new List <int>(); foreach (string bn in v.boneNames) { int i = 0; foreach (var defBn in nodeArrStrings.Select((Value, Index) => new { Value, Index })) { if (bn == defBn.Value) { //Add these after smooth matrices if (nodeRigidIndex[i] != -1) { RigidIds.Add(defBn.Index); } else { if (v.boneIds.Count < 4) { v.boneIds.Add(defBn.Index); } } } i++; } } if (RigidIds.Count > 0) { foreach (int id in RigidIds) { if (v.boneIds.Count < 4) { v.boneIds.Add(id); } } } } }
public string GetBoneNameFromIndex(FMDL mdl, int index) { if (index == 0) { return(""); } return(mdl.Skeleton.bones[mdl.Skeleton.Node_Array[index]].Text); }
private void RemoveMaterial(FMDL model, int CurrentIndex) { //Adjust all the indices properly based on this current index foreach (var shape in model.shapes) { //If there are indices higher or equal than this index, shift them if (shape.MaterialIndex >= CurrentIndex && shape.MaterialIndex != 0) { shape.MaterialIndex -= 1; } } model.materials.Remove(Text); Parent.Nodes.Remove(this); }
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 ResourceNameExt = Path.GetFileName(FileName); string extension = Path.GetExtension(FileName); switch (Type) { case BRESGroupType.Models: FMDL fmdl = NewModel(false); fmdl.Text = ResourceName; fmdl.Replace(FileName, resFileNX, resFileU); fmdl.UpdateVertexData(); AddNode(fmdl); 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: if (IsWiiU) { FSHU fshu = new FSHU(new ResU.ShaderParamAnim(), MaterialAnimation.AnimationType.ShaderParam); fshu.Text = ResourceName; fshu.Replace(FileName, resFileU); Nodes.Add(fshu); } else { FMAA fmaaPrm = new FMAA(new ResNX.MaterialAnim()); fmaaPrm.Text = ResourceName; fmaaPrm.Replace(FileName); Nodes.Add(fmaaPrm); } break; case BRESGroupType.ColorAnim: if (IsWiiU) { FSHU fclh = new FSHU(new ResU.ShaderParamAnim(), MaterialAnimation.AnimationType.Color); fclh.Text = ResourceName; fclh.Replace(FileName, resFileU); Nodes.Add(fclh); } else { FMAA fmaaClr = new FMAA(new ResNX.MaterialAnim()); fmaaClr.Text = ResourceName; fmaaClr.Replace(FileName); Nodes.Add(fmaaClr); } break; case BRESGroupType.TexSrtAnim: if (IsWiiU) { FSHU fsth = new FSHU(new ResU.ShaderParamAnim(), MaterialAnimation.AnimationType.TextureSrt); fsth.Text = ResourceName; fsth.Replace(FileName, resFileU); Nodes.Add(fsth); } else { FMAA fmaaSrt = new FMAA(new ResNX.MaterialAnim()); fmaaSrt.Text = ResourceName; fmaaSrt.Replace(FileName); Nodes.Add(fmaaSrt); } break; case BRESGroupType.TexPatAnim: if (IsWiiU) { FTXP ftxp = new FTXP(new ResU.TexPatternAnim()); ftxp.Text = ResourceName; ftxp.Replace(FileName, resFileU); Nodes.Add(ftxp); } else { FMAA fmaaTxp = new FMAA(new ResNX.MaterialAnim()); fmaaTxp.Text = ResourceName; fmaaTxp.Replace(FileName); Nodes.Add(fmaaTxp); } 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: if (IsWiiU) { FVIS fmtv = new FVIS(new ResU.VisibilityAnim() { Type = ResU.VisibilityAnimType.Material }); fmtv.Text = ResourceName; fmtv.Replace(FileName, resFileNX, resFileU); Nodes.Add(fmtv); } else { FMAA fmaaVis = new FMAA(new ResNX.MaterialAnim()); fmaaVis.Text = ResourceName; fmaaVis.Replace(FileName); Nodes.Add(fmaaVis); } 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(ResourceNameExt, File.ReadAllBytes(FileName)); ext.Replace(FileName); Nodes.Add(ext); break; case BRESGroupType.MaterialAnim: FMAA fmaa = new FMAA(new ResNX.MaterialAnim()); fmaa.Replace(FileName); Nodes.Add(fmaa); break; } } }
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); }
private void RemoveBone(FMDL model, int CurrentIndex) { }
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"); }