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);
+ }
+ }
}
}