public void LoadFile(ResFile resFile) { ResFileNode.Load(resFile); BfresSwitch.Read(this, resFile, ResFileNode); UpdateVertexData(); UpdateTextureMaps(); }
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); }
private void button1_Click(object sender, EventArgs e) { if (formatCB.SelectedIndex < 0) { return; } string SelectedText = attributeCB.GetItemText(attributeCB.SelectedItem); DialogResult dialogResult = MessageBox.Show($"Are you sure you want to remove all {SelectedText} from" + $" FMDL {ActiveFMDL}? )", "", MessageBoxButtons.YesNo); if (dialogResult == DialogResult.Yes) { foreach (var shape in ActiveFMDL.shapes) { foreach (var att in shape.vertexAttributes) { if (att.Name == SelectedText) { shape.vertexAttributes.Remove(att); shape.SaveVertexBuffer(shape.IsWiiU); if (shape.IsWiiU) { BfresWiiU.ReadShapesVertices(shape, shape.ShapeU, shape.VertexBufferU, ActiveFMDL); } else { BfresSwitch.ReadShapesVertices(shape, shape.Shape, shape.VertexBuffer, ActiveFMDL); } attributeCB.Items.Remove(att.Name); if (attributeCB.Items.Count > 0) { attributeCB.SelectedIndex = 0; } break; } } } LoadObjects(ActiveFMDL); ActiveFMDL.UpdateVertexData(); } }
private void SaveSwitch(MemoryStream mem) { var resFile = bfres.ResFileNode.resFile; resFile.Models.Clear(); resFile.SkeletalAnims.Clear(); resFile.MaterialAnims.Clear(); resFile.SceneAnims.Clear(); resFile.ShapeAnims.Clear(); resFile.BoneVisibilityAnims.Clear(); resFile.ModelDict.Clear(); resFile.SkeletalAnimDict.Clear(); resFile.MaterialAnimDict.Clear(); resFile.SceneAnimDict.Clear(); resFile.ShapeAnimDict.Clear(); resFile.BoneVisibilityAnimDict.Clear(); int CurMdl = 0; if (EditorRoot.Nodes.ContainsKey("FMDL")) { foreach (FMDL model in EditorRoot.Nodes["FMDL"].Nodes) { resFile.Models.Add(BfresSwitch.SetModel(model)); } } if (EditorRoot.Nodes.ContainsKey("FSKA")) { foreach (BfresSkeletonAnim ska in EditorRoot.Nodes["FSKA"].Nodes) { resFile.SkeletalAnims.Add(ska.SkeletalAnim); } } if (EditorRoot.Nodes.ContainsKey("FMAA")) { foreach (FMAA fmaa in EditorRoot.Nodes["FMAA"].Nodes) { resFile.MaterialAnims.Add(fmaa.MaterialAnim); } } if (EditorRoot.Nodes.ContainsKey("FBNV")) { foreach (FBNV fbnv in EditorRoot.Nodes["FBNV"].Nodes) { resFile.BoneVisibilityAnims.Add(fbnv.VisibilityAnim); } } if (EditorRoot.Nodes.ContainsKey("FSHPA")) { foreach (FSHA fsha in EditorRoot.Nodes["FSHPA"].Nodes) { resFile.ShapeAnims.Add(fsha.ShapeAnim); } } if (EditorRoot.Nodes.ContainsKey("FSCN")) { foreach (FSCN fscn in EditorRoot.Nodes["FSCN"].Nodes) { resFile.SceneAnims.Add(fscn.SceneAnim); } } ErrorCheck(); BfresSwitch.WriteExternalFiles(resFile, EditorRoot); resFile.Save(mem); }