diff --git a/FModel/Views/Snooper/Animations/Skeleton.cs b/FModel/Views/Snooper/Animations/Skeleton.cs index c0c7293b..87febc9f 100644 --- a/FModel/Views/Snooper/Animations/Skeleton.cs +++ b/FModel/Views/Snooper/Animations/Skeleton.cs @@ -356,7 +356,6 @@ public class Skeleton : IDisposable ImGui.TableNextColumn(); var flags = ImGuiTreeNodeFlags.OpenOnArrow | ImGuiTreeNodeFlags.SpanFullWidth; - // if (boneName == SelectedBone) flags |= ImGuiTreeNodeFlags.Selected; if (bone.IsVirtual) flags |= ImGuiTreeNodeFlags.Leaf; else if (!bone.IsDaron) flags |= ImGuiTreeNodeFlags.Bullet; diff --git a/FModel/Views/Snooper/Models/SkeletalModel.cs b/FModel/Views/Snooper/Models/SkeletalModel.cs index d66117db..1e84d604 100644 --- a/FModel/Views/Snooper/Models/SkeletalModel.cs +++ b/FModel/Views/Snooper/Models/SkeletalModel.cs @@ -21,8 +21,6 @@ public class SkeletalModel : UModel public float MorphTime; - public bool TreeIsOpen; - public SkeletalModel(USkeletalMesh export, CSkeletalMesh skeletalMesh, Transform transform = null) : base(export, skeletalMesh.LODs[LodLevel], export.Materials, skeletalMesh.LODs[LodLevel].Verts, skeletalMesh.LODs.Count, transform) { diff --git a/FModel/Views/Snooper/Renderer.cs b/FModel/Views/Snooper/Renderer.cs index c411db19..285c8154 100644 --- a/FModel/Views/Snooper/Renderer.cs +++ b/FModel/Views/Snooper/Renderer.cs @@ -52,6 +52,7 @@ public class Renderer : IDisposable public bool ShowGrid; public bool ShowLights; public bool AnimateWithRotationOnly; + public bool IsSkeletonTreeOpen; public VertexColor Color; public Camera CameraOp { get; } @@ -263,7 +264,7 @@ public class Renderer : IDisposable // debug + outline pass if (Options.TryGetModel(out var selected) && selected.IsVisible) { - if (selected is SkeletalModel { TreeIsOpen: true } skeletalModel) + if (IsSkeletonTreeOpen && selected is SkeletalModel skeletalModel) { _bone.Render(viewMatrix, projMatrix); skeletalModel.RenderBones(_bone); @@ -295,7 +296,7 @@ public class Renderer : IDisposable { model.Update(Options); } - if (Options.TryGetModel(out var selected) && selected is SkeletalModel { IsVisible: true, TreeIsOpen: true } skeletalModel) + if (IsSkeletonTreeOpen && Options.TryGetModel(out var selected) && selected is SkeletalModel { IsVisible: true } skeletalModel) { skeletalModel.Skeleton.UpdateVertices(); } diff --git a/FModel/Views/Snooper/SnimGui.cs b/FModel/Views/Snooper/SnimGui.cs index 58ad5a5e..e774c83f 100644 --- a/FModel/Views/Snooper/SnimGui.cs +++ b/FModel/Views/Snooper/SnimGui.cs @@ -66,7 +66,7 @@ public class SnimGui private readonly float _tableWidth; private Vector2 _outlinerSize; - private bool _ti_open; + private bool _tiOpen; private bool _viewportFocus; private readonly Vector4 _accentColor = new (0.125f, 0.42f, 0.831f, 1.0f); @@ -434,34 +434,31 @@ Snooper aims to give an accurate preview of models, materials, skeletal animatio _saver.Value = model.Save(out _saver.Label, out _saver.Path); s.WindowShouldFreeze(false); } - if (model is SkeletalModel skeletalModel) + if (ImGui.MenuItem("Animate", model is SkeletalModel)) { - if (ImGui.MenuItem("Animate")) + if (_swapper.IsAware) { - if (_swapper.IsAware) + s.Renderer.Options.RemoveAnimations(); + s.Renderer.Options.AnimateMesh(true); + s.WindowShouldClose(true, false); + } + else + { + _swapper.Title = "Skeletal Animation"; + _swapper.Description = "You're about to animate a model.\nThe window will close for you to extract an animation!\n\n"; + _swapper.Content = () => { s.Renderer.Options.RemoveAnimations(); s.Renderer.Options.AnimateMesh(true); - s.WindowShouldClose(true, false); - } - else - { - _swapper.Title = "Skeletal Animation"; - _swapper.Description = "You're about to animate a model.\nThe window will close for you to extract an animation!\n\n"; - _swapper.Content = () => - { - s.Renderer.Options.RemoveAnimations(); - s.Renderer.Options.AnimateMesh(true); - }; - _swapper.Value = true; - } - } - if (ImGui.MenuItem("Skeleton Tree")) - { - skeletalModel.TreeIsOpen = true; - ImGui.SetWindowFocus("Skeleton Tree"); + }; + _swapper.Value = true; } } + if (ImGui.MenuItem("Skeleton Tree", model is SkeletalModel)) + { + s.Renderer.IsSkeletonTreeOpen = true; + ImGui.SetWindowFocus("Skeleton Tree"); + } if (ImGui.MenuItem("Teleport To")) { s.Renderer.CameraOp.Teleport(model.GetTransform().Matrix.Translation, model.Box); @@ -671,7 +668,7 @@ Snooper aims to give an accurate preview of models, materials, skeletal animatio ImGui.SeparatorText("Textures"); if (material.ImGuiTextures(icons, model)) { - _ti_open = true; + _tiOpen = true; ImGui.SetWindowFocus("Texture Inspector"); } @@ -713,8 +710,8 @@ Snooper aims to give an accurate preview of models, materials, skeletal animatio private void DrawTextureInspector(Snooper s) { - if (!_ti_open) return; - if (ImGui.Begin("Texture Inspector", ref _ti_open, ImGuiWindowFlags.NoScrollbar) && + if (!_tiOpen) return; + if (ImGui.Begin("Texture Inspector", ref _tiOpen, ImGuiWindowFlags.NoScrollbar) && s.Renderer.Options.TryGetModel(out var model) && s.Renderer.Options.TryGetSection(model, out var section)) { @@ -725,11 +722,11 @@ Snooper aims to give an accurate preview of models, materials, skeletal animatio private void DrawSkeletonTree(Snooper s) { - if (!s.Renderer.Options.TryGetModel(out var model) || model is not SkeletalModel { TreeIsOpen: true } skeletalModel) - return; + if (!s.Renderer.IsSkeletonTreeOpen) return; ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, Vector2.Zero); - if (ImGui.Begin("Skeleton Tree", ref skeletalModel.TreeIsOpen, ImGuiWindowFlags.NoScrollbar)) + if (ImGui.Begin("Skeleton Tree", ref s.Renderer.IsSkeletonTreeOpen, ImGuiWindowFlags.NoScrollbar) && + s.Renderer.Options.TryGetModel(out var model) && model is SkeletalModel skeletalModel) { skeletalModel.Skeleton.ImGuiBoneBreadcrumb(); if (ImGui.BeginTable("skeleton_tree", 2, ImGuiTableFlags.NoSavedSettings | ImGuiTableFlags.RowBg, ImGui.GetContentRegionAvail(), ImGui.GetWindowWidth()))