Exemplo n.º 1
0
        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);
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        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++;
            }
        }
Exemplo n.º 3
0
        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);
                    }
                }
            }
        }
Exemplo n.º 4
0
        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);
                        }
                    }
                }
            }
        }
Exemplo n.º 5
0
        public string GetBoneNameFromIndex(FMDL mdl, int index)
        {
            if (index == 0)
            {
                return("");
            }

            return(mdl.Skeleton.bones[mdl.Skeleton.Node_Array[index]].Text);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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;
                }
            }
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
 private void RemoveBone(FMDL model, int CurrentIndex)
 {
 }
Exemplo n.º 10
0
        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;
                }
            }
        }
Exemplo n.º 11
0
        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");
        }