From 3f7200538ec2debf510fa63e5131477e162b7527 Mon Sep 17 00:00:00 2001 From: Nicholas Moser Date: Sun, 24 Mar 2024 21:54:57 -0500 Subject: [PATCH 1/4] start getting it workin --- HSDRawViewer/Converters/ModelExporter.cs | 1 + HSDRawViewer/Converters/ModelInfoSheet.cs | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/HSDRawViewer/Converters/ModelExporter.cs b/HSDRawViewer/Converters/ModelExporter.cs index 4a16300..be96c72 100644 --- a/HSDRawViewer/Converters/ModelExporter.cs +++ b/HSDRawViewer/Converters/ModelExporter.cs @@ -102,6 +102,7 @@ public static void ExportFile(string filePath, HSD_JOBJ rootJOBJ, ModelExportSet if (settings.ExportModelInfoSheet) { ModelInfoSheet.Export(settings.Directory + "model_sheet.json", rootJOBJ); + ModelInfoSheet.Import(settings.Directory + "model_sheet.json"); } IOManager.ExportScene(exp.Scene, filePath, exportsettings); diff --git a/HSDRawViewer/Converters/ModelInfoSheet.cs b/HSDRawViewer/Converters/ModelInfoSheet.cs index 333032b..024f43d 100644 --- a/HSDRawViewer/Converters/ModelInfoSheet.cs +++ b/HSDRawViewer/Converters/ModelInfoSheet.cs @@ -98,6 +98,17 @@ public void Export(string filepath) File.WriteAllText(filepath, json); } + /// + /// + /// + /// + public static void Import(string filepath) + { + string json = File.ReadAllText(filepath); + ModelInfoSheet? thing = JsonSerializer.Deserialize(json); + Console.WriteLine(json); + } + /// /// /// From bfdfc6a2d975d78baffe15fedff06fda6ee5da9f Mon Sep 17 00:00:00 2001 From: Nicholas Moser Date: Mon, 25 Mar 2024 17:18:17 -0500 Subject: [PATCH 2/4] Get json parsing working and add menu entries --- HSDRawViewer/ContextMenus/JOBJContextMenu.cs | 15 +++++++++++++++ HSDRawViewer/Converters/ModelExporter.cs | 1 - HSDRawViewer/Converters/ModelInfoSheet.cs | 17 +++++++++++++---- .../JObjEditor/JObjEditorNew.Designer.cs | 10 ++++++++++ .../GUI/Controls/JObjEditor/JObjEditorNew.cs | 12 ++++++++++++ 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/HSDRawViewer/ContextMenus/JOBJContextMenu.cs b/HSDRawViewer/ContextMenus/JOBJContextMenu.cs index d801413..0223057 100644 --- a/HSDRawViewer/ContextMenus/JOBJContextMenu.cs +++ b/HSDRawViewer/ContextMenus/JOBJContextMenu.cs @@ -24,6 +24,21 @@ public JOBJContextMenu() : base() }; Items.Add(Import); + ToolStripMenuItem ImportSheet = new ToolStripMenuItem("Import Model Info Sheet From File"); + ImportSheet.Click += (sender, args) => + { + if (MainForm.SelectedDataNode.Accessor is HSD_JOBJ root) + { + MainForm.SelectedDataNode.Collapse(); + var f = Tools.FileIO.OpenFile("JSON (*.json)|*.json"); + if (f != null) + { + ModelInfoSheet infoSheet = ModelInfoSheet.Import(f); + infoSheet.updateJobj(root); + } + } + }; + Items.Add(ImportSheet); ToolStripMenuItem GenerateMatAnimJoint = new ToolStripMenuItem("Generate and Export MatAnimJoint Structure"); GenerateMatAnimJoint.Click += (sender, args) => diff --git a/HSDRawViewer/Converters/ModelExporter.cs b/HSDRawViewer/Converters/ModelExporter.cs index be96c72..4a16300 100644 --- a/HSDRawViewer/Converters/ModelExporter.cs +++ b/HSDRawViewer/Converters/ModelExporter.cs @@ -102,7 +102,6 @@ public static void ExportFile(string filePath, HSD_JOBJ rootJOBJ, ModelExportSet if (settings.ExportModelInfoSheet) { ModelInfoSheet.Export(settings.Directory + "model_sheet.json", rootJOBJ); - ModelInfoSheet.Import(settings.Directory + "model_sheet.json"); } IOManager.ExportScene(exp.Scene, filePath, exportsettings); diff --git a/HSDRawViewer/Converters/ModelInfoSheet.cs b/HSDRawViewer/Converters/ModelInfoSheet.cs index 024f43d..fba66c4 100644 --- a/HSDRawViewer/Converters/ModelInfoSheet.cs +++ b/HSDRawViewer/Converters/ModelInfoSheet.cs @@ -30,7 +30,12 @@ public class ModelInfoSheet { private HashSet textures = new HashSet(); - public List Objects { get; set; } = new List(); + public List Objects { get; set; } = new List(); + + public ModelInfoSheet() + { + // Necessary in order to deserialize + } /// /// @@ -88,6 +93,11 @@ private void ProcessTexture(HSD_TOBJ texture) } } + public void updateJobj(HSD_JOBJ jobj) + { + + } + /// /// /// @@ -102,11 +112,10 @@ public void Export(string filepath) /// /// /// - public static void Import(string filepath) + public static ModelInfoSheet Import(string filepath) { string json = File.ReadAllText(filepath); - ModelInfoSheet? thing = JsonSerializer.Deserialize(json); - Console.WriteLine(json); + return JsonSerializer.Deserialize(json); } /// diff --git a/HSDRawViewer/GUI/Controls/JObjEditor/JObjEditorNew.Designer.cs b/HSDRawViewer/GUI/Controls/JObjEditor/JObjEditorNew.Designer.cs index 92f8cac..c69fbcb 100644 --- a/HSDRawViewer/GUI/Controls/JObjEditor/JObjEditorNew.Designer.cs +++ b/HSDRawViewer/GUI/Controls/JObjEditor/JObjEditorNew.Designer.cs @@ -33,6 +33,7 @@ private void InitializeComponent() this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.toolStripDropDownButton2 = new System.Windows.Forms.ToolStripDropDownButton(); this.importModelFromFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.importModelInfoSheetStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.exportModelToFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.importSceneSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -97,6 +98,7 @@ private void InitializeComponent() this.toolStripDropDownButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.toolStripDropDownButton2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.importModelFromFileToolStripMenuItem, + this.importModelInfoSheetStripMenuItem, this.exportModelToFileToolStripMenuItem, this.toolStripSeparator2, this.importSceneSettingsToolStripMenuItem, @@ -114,6 +116,13 @@ private void InitializeComponent() this.importModelFromFileToolStripMenuItem.Text = "Import Model From File"; this.importModelFromFileToolStripMenuItem.Click += new System.EventHandler(this.importModelFromFileToolStripMenuItem_Click); // + // importModelInfoSheetStripMenuItem + // + this.importModelInfoSheetStripMenuItem.Name = "importModelInfoSheetStripMenuItem"; + this.importModelInfoSheetStripMenuItem.Size = new System.Drawing.Size(199, 22); + this.importModelInfoSheetStripMenuItem.Text = "Import Model Info Sheet From File"; + this.importModelInfoSheetStripMenuItem.Click += new System.EventHandler(this.importModelInfoSheetToolStripMenuItem_Click); + // // exportModelToFileToolStripMenuItem // this.exportModelToFileToolStripMenuItem.Name = "exportModelToFileToolStripMenuItem"; @@ -373,6 +382,7 @@ private void InitializeComponent() private System.Windows.Forms.ToolStrip toolStrip1; private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton2; private System.Windows.Forms.ToolStripMenuItem importModelFromFileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem importModelInfoSheetStripMenuItem; private System.Windows.Forms.ToolStripMenuItem exportModelToFileToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripMenuItem importSceneSettingsToolStripMenuItem; diff --git a/HSDRawViewer/GUI/Controls/JObjEditor/JObjEditorNew.cs b/HSDRawViewer/GUI/Controls/JObjEditor/JObjEditorNew.cs index 0e4f0bd..98798b9 100644 --- a/HSDRawViewer/GUI/Controls/JObjEditor/JObjEditorNew.cs +++ b/HSDRawViewer/GUI/Controls/JObjEditor/JObjEditorNew.cs @@ -614,6 +614,18 @@ private void importModelFromFileToolStripMenuItem_Click(object sender, EventArgs SetJOBJ(_root); } + private void importModelInfoSheetToolStripMenuItem_Click(object sender, EventArgs e) + { + ClearAnimation(); + var f = Tools.FileIO.OpenFile("JSON (*.json)|*.json"); + if (f != null) + { + ModelInfoSheet infoSheet = ModelInfoSheet.Import(f); + infoSheet.updateJobj(_root); + } + SetJOBJ(_root); + } + /// /// /// From fd93e216e7655fe771b9e2581e70d11e673f66ee Mon Sep 17 00:00:00 2001 From: Nicholas Moser Date: Mon, 25 Mar 2024 17:36:19 -0500 Subject: [PATCH 3/4] Get it working --- HSDRawViewer/Converters/ModelInfoSheet.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/HSDRawViewer/Converters/ModelInfoSheet.cs b/HSDRawViewer/Converters/ModelInfoSheet.cs index fba66c4..008f0bf 100644 --- a/HSDRawViewer/Converters/ModelInfoSheet.cs +++ b/HSDRawViewer/Converters/ModelInfoSheet.cs @@ -95,7 +95,27 @@ private void ProcessTexture(HSD_TOBJ texture) public void updateJobj(HSD_JOBJ jobj) { + int objectIndex = 0; + foreach (var j in jobj.TreeList) + { + if (j.Dobj != null) + { + foreach (var dobj in j.Dobj.List) + { + MI_Object current = this.Objects[objectIndex]; + var mobj = dobj.Mobj; + var mat = mobj.Material; + + mat.AmbientColor = System.Drawing.Color.FromArgb(Convert.ToInt32(current.Ambient, 16)); + mat.DiffuseColor = System.Drawing.Color.FromArgb(Convert.ToInt32(current.Diffuse, 16)); + mat.SpecularColor = System.Drawing.Color.FromArgb(Convert.ToInt32(current.Specular, 16)); + mat.Shininess = current.Shininess; + mat.Alpha = current.Alpha; + objectIndex++; + } + } + } } /// From eaa3c7fc28ef404f9d3012c9342d52630be01d0a Mon Sep 17 00:00:00 2001 From: Nicholas Moser Date: Wed, 27 Mar 2024 16:34:59 -0500 Subject: [PATCH 4/4] Add error checking --- HSDRawViewer/Converters/ModelInfoSheet.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/HSDRawViewer/Converters/ModelInfoSheet.cs b/HSDRawViewer/Converters/ModelInfoSheet.cs index 008f0bf..69772ff 100644 --- a/HSDRawViewer/Converters/ModelInfoSheet.cs +++ b/HSDRawViewer/Converters/ModelInfoSheet.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; +using System.Windows.Forms; namespace HSDRawViewer.Converters { @@ -95,6 +96,22 @@ private void ProcessTexture(HSD_TOBJ texture) public void updateJobj(HSD_JOBJ jobj) { + int sheetSize = Objects.Count; + int nodeSize = 0; + foreach (var x in jobj.TreeList) + { + if (x.Dobj != null) + { + nodeSize += x.Dobj.List.Count; + } + } + if (sheetSize != nodeSize) + { + string message = "The model info sheet you are importing has {0} objects but the current model has {1}."; + MessageBox.Show(String.Format(message, sheetSize, nodeSize), "Invalid Model Info Sheet"); + return; + } + int objectIndex = 0; foreach (var j in jobj.TreeList) {