Exemplo n.º 1
0
        private void SaveSwitch(MemoryStream mem)
        {
            int CurMdl = 0;

            foreach (FMDL model in bfres.models)
            {
                bfres.resFile.Models[CurMdl].Shapes.Clear();
                bfres.resFile.Models[CurMdl].VertexBuffers.Clear();
                bfres.resFile.Models[CurMdl].Materials.Clear();
                //    bfres.resFile.Models[CurMdl].MaterialDict.Clear();

                int i          = 0;
                var duplicates = model.shapes.GroupBy(c => c.Text).Where(g => g.Skip(1).Any()).SelectMany(c => c);
                foreach (var shape in duplicates)
                {
                    shape.Text += i++;
                }

                foreach (FSHP shape in model.shapes)
                {
                    CheckMissingTextures(shape);
                    BfresSwitch.SetShape(shape, shape.Shape);

                    bfres.resFile.Models[CurMdl].Shapes.Add(shape.Shape);
                    bfres.resFile.Models[CurMdl].VertexBuffers.Add(shape.VertexBuffer);

                    SetShaderAssignAttributes(shape.GetMaterial().shaderassign, shape);
                }
                foreach (FMAT mat in model.materials.Values)
                {
                    BfresSwitch.SetMaterial(mat, mat.Material);
                    bfres.resFile.Models[CurMdl].Materials.Add(mat.Material);
                }
                CurMdl++;
            }
            bfres.resFile.SkeletalAnims.Clear();
            if (EditorRoot.Nodes.ContainsKey("FSKA"))
            {
                foreach (BfresSkeletonAnim ska in EditorRoot.Nodes["FSKA"].Nodes)
                {
                    bfres.resFile.SkeletalAnims.Add(ska.SkeletalAnim);
                }
            }

            ErrorCheck();

            BfresSwitch.WriteExternalFiles(bfres.resFile, EditorRoot);
            bfres.resFile.Save(mem);
        }