From 12f5157bfbd0dbbc56975a46e243b86504f8ddf2 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 26 Apr 2023 17:28:58 +0200 Subject: [PATCH] Add debug drawing selected skeleton node in Skinned Model window viewport --- .../Editor/Viewport/Previews/AssetPreview.cs | 13 +++++++++++++ .../Windows/Assets/SkinnedModelWindow.cs | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Source/Editor/Viewport/Previews/AssetPreview.cs b/Source/Editor/Viewport/Previews/AssetPreview.cs index 1267fded6..0bcc4e115 100644 --- a/Source/Editor/Viewport/Previews/AssetPreview.cs +++ b/Source/Editor/Viewport/Previews/AssetPreview.cs @@ -128,6 +128,18 @@ namespace FlaxEditor.Viewport.Previews /// public EditorPrimitives EditorPrimitives => _editorPrimitives; + /// + /// Custom debug drawing event (via ). + /// + public event CustomDebugDrawDelegate CustomDebugDraw; + + /// + /// Debug shapes drawing delegate. + /// + /// The GPU context. + /// The render context. + public delegate void CustomDebugDrawDelegate(GPUContext context, ref RenderContext renderContext); + /// /// Initializes a new instance of the class. /// @@ -249,6 +261,7 @@ namespace FlaxEditor.Viewport.Previews { DebugDraw.SetContext(_debugDrawContext); DebugDraw.UpdateContext(_debugDrawContext, 1.0f / Mathf.Max(Engine.FramesPerSecond, 1)); + CustomDebugDraw?.Invoke(context, ref renderContext); OnDebugDraw(context, ref renderContext); DebugDraw.Draw(ref renderContext, target.View(), targetDepth.View(), true); DebugDraw.SetContext(IntPtr.Zero); diff --git a/Source/Editor/Windows/Assets/SkinnedModelWindow.cs b/Source/Editor/Windows/Assets/SkinnedModelWindow.cs index 6bc2e477c..ab7f49d1c 100644 --- a/Source/Editor/Windows/Assets/SkinnedModelWindow.cs +++ b/Source/Editor/Windows/Assets/SkinnedModelWindow.cs @@ -278,6 +278,8 @@ namespace FlaxEditor.Windows.Assets [CustomEditor(typeof(ProxyEditor))] private sealed class SkeletonPropertiesProxy : PropertiesProxyBase { + internal Tree NodesTree; + private class ProxyEditor : ProxyEditorBase { public override void Initialize(LayoutElementsContainer layout) @@ -325,6 +327,7 @@ namespace FlaxEditor.Windows.Assets node.TreeNode.ExpandAll(true); } } + proxy.NodesTree = tree.TreeControl; } // Blend Shapes @@ -808,6 +811,21 @@ namespace FlaxEditor.Windows.Assets { Proxy = new SkeletonPropertiesProxy(); Presenter.Select(Proxy); + window._preview.CustomDebugDraw += OnDebugDraw; + } + + private void OnDebugDraw(GPUContext context, ref RenderContext renderContext) + { + var proxy = (SkeletonPropertiesProxy)Proxy; + if (proxy.NodesTree != null) + { + // Draw selected skeleton nodes + foreach (var node in proxy.NodesTree.Selection) + { + proxy.Window._preview.PreviewActor.GetNodeTransformation(node.Text, out var nodeTransformation, true); + DebugDraw.DrawWireSphere(new BoundingSphere(nodeTransformation.TranslationVector, 4.0f), Color.Red, 0.0f, false); + } + } } }