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); }