diff --git a/OpenKh.Kh2/Models/ModelSkeletal.cs b/OpenKh.Kh2/Models/ModelSkeletal.cs index c09c1cbf1..5cf3c398d 100644 --- a/OpenKh.Kh2/Models/ModelSkeletal.cs +++ b/OpenKh.Kh2/Models/ModelSkeletal.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Numerics; +using System.Reflection; using Xe.BinaryMapper; using static OpenKh.Kh2.Models.ModelCommon; @@ -273,6 +274,14 @@ public static SkeletalMesh getMeshFromGroup(SkeletalGroup group, Matrix4x4[] bon return GetSkeletalMeshFromVpuGroup(vpuGroup, boneMatrices); } + public void recalculateMeshes() + { + foreach (SkeletalGroup group in Groups) + { + group.Mesh = getMeshFromGroup(group, GetBoneMatrices(Bones)); + } + } + //---------------------------- // INTERNAL FUNCTIONS // Kept public for ease of use diff --git a/OpenKh.Tools.Kh2MdlxEditor/ViewModels/ModelBones_VM.cs b/OpenKh.Tools.Kh2MdlxEditor/ViewModels/ModelBones_VM.cs new file mode 100644 index 000000000..f463b70d6 --- /dev/null +++ b/OpenKh.Tools.Kh2MdlxEditor/ViewModels/ModelBones_VM.cs @@ -0,0 +1,14 @@ +using OpenKh.Kh2.Models; + +namespace OpenKh.Tools.Kh2MdlxEditor.ViewModels +{ + public class ModelBones_VM + { + public ModelSkeletal ModelFile { get; set; } + public ModelBones_VM() { } + public ModelBones_VM(ModelSkeletal modelFile) + { + ModelFile = modelFile; + } + } +} diff --git a/OpenKh.Tools.Kh2MdlxEditor/Views/Main2_Window.xaml b/OpenKh.Tools.Kh2MdlxEditor/Views/Main2_Window.xaml index 78dae2569..9daacb63e 100644 --- a/OpenKh.Tools.Kh2MdlxEditor/Views/Main2_Window.xaml +++ b/OpenKh.Tools.Kh2MdlxEditor/Views/Main2_Window.xaml @@ -36,7 +36,7 @@ - + diff --git a/OpenKh.Tools.Kh2MdlxEditor/Views/Main2_Window.xaml.cs b/OpenKh.Tools.Kh2MdlxEditor/Views/Main2_Window.xaml.cs index d2c51b4d9..f9ef7c899 100644 --- a/OpenKh.Tools.Kh2MdlxEditor/Views/Main2_Window.xaml.cs +++ b/OpenKh.Tools.Kh2MdlxEditor/Views/Main2_Window.xaml.cs @@ -79,6 +79,10 @@ private void Side_Model(object sender, EventArgs e) { reloadModelControl(); } + private void Side_ModelBones(object sender, EventArgs e) + { + contentFrame.Content = new ModelBones_Control(mainVM.ModelFile); + } private void Side_Texture(object sender, EventArgs e) { contentFrame.Content = new TextureFile_Control(mainVM.TextureFile); diff --git a/OpenKh.Tools.Kh2MdlxEditor/Views/ModelBones_Control.xaml b/OpenKh.Tools.Kh2MdlxEditor/Views/ModelBones_Control.xaml new file mode 100644 index 000000000..2b65f26f6 --- /dev/null +++ b/OpenKh.Tools.Kh2MdlxEditor/Views/ModelBones_Control.xaml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OpenKh.Tools.Kh2MdlxEditor/Views/ModelBones_Control.xaml.cs b/OpenKh.Tools.Kh2MdlxEditor/Views/ModelBones_Control.xaml.cs new file mode 100644 index 000000000..6b268a715 --- /dev/null +++ b/OpenKh.Tools.Kh2MdlxEditor/Views/ModelBones_Control.xaml.cs @@ -0,0 +1,22 @@ +using OpenKh.Kh2.Models; +using OpenKh.Tools.Kh2MdlxEditor.ViewModels; +using System.Windows.Controls; + +namespace OpenKh.Tools.Kh2MdlxEditor.Views +{ + public partial class ModelBones_Control : UserControl + { + ModelBones_VM ThisVM { get; set; } + + public ModelBones_Control() + { + InitializeComponent(); + } + public ModelBones_Control(ModelSkeletal modelFile) + { + InitializeComponent(); + ThisVM = new ModelBones_VM(modelFile); + DataContext = ThisVM; + } + } +} diff --git a/OpenKh.Tools.Kh2MdlxEditor/Views/Model_Control.xaml.cs b/OpenKh.Tools.Kh2MdlxEditor/Views/Model_Control.xaml.cs index 623c6c18c..ed9e8accb 100644 --- a/OpenKh.Tools.Kh2MdlxEditor/Views/Model_Control.xaml.cs +++ b/OpenKh.Tools.Kh2MdlxEditor/Views/Model_Control.xaml.cs @@ -20,6 +20,10 @@ public Model_Control() public Model_Control(ModelSkeletal modelFile, ModelTexture textureFile, ModelCollision? collisionFile = null) { InitializeComponent(); + + // Recalc meshes + modelFile.recalculateMeshes(); + modelControlModel = new Model_VM(modelFile, textureFile, collisionFile); DataContext = modelControlModel; List geometry = new List();