diff --git a/Source/Editor/Windows/Assets/CollisionDataWindow.cs b/Source/Editor/Windows/Assets/CollisionDataWindow.cs index 3f265eea9..8fa32f890 100644 --- a/Source/Editor/Windows/Assets/CollisionDataWindow.cs +++ b/Source/Editor/Windows/Assets/CollisionDataWindow.cs @@ -7,6 +7,7 @@ using FlaxEditor.Content.Create; using FlaxEditor.CustomEditors; using FlaxEditor.CustomEditors.Editors; using FlaxEditor.CustomEditors.Elements; +using FlaxEditor.GUI; using FlaxEditor.Viewport.Cameras; using FlaxEditor.Viewport.Previews; using FlaxEngine; @@ -171,13 +172,49 @@ namespace FlaxEditor.Windows.Assets } private readonly SplitPanel _split; - private readonly ModelBasePreview _preview; + private readonly CollisionDataPreview _preview; private readonly CustomEditorPresenter _propertiesPresenter; private readonly PropertiesProxy _properties; private Model _collisionWiresModel; private StaticModel _collisionWiresShowActor; private bool _updateWireMesh; + private class CollisionDataPreview : ModelBasePreview + { + public bool ShowCollisionData = false; + private int _verticesCount = 0; + private int _trianglesCount = 0; + + public void SetVerticesAndTriangleCount(int verticesCount, int triangleCount) + { + _verticesCount = verticesCount; + _trianglesCount = triangleCount; + } + + /// + public CollisionDataPreview(bool useWidgets) + : base(useWidgets) + { + ViewportCamera = new FPSCamera(); + Task.ViewFlags &= ~ViewFlags.Sky & ~ViewFlags.Bloom & ~ViewFlags.EyeAdaptation; + } + + /// + public override void Draw() + { + base.Draw(); + + if (ShowCollisionData) + { + var text = string.Format("\nTriangles: {0:N0}\nVertices: {1:N0}\nMemory Size: {2:N0} bytes", _trianglesCount, _verticesCount, Asset.MemoryUsage); + var font = Style.Current.FontMedium; + var pos = new Float2(10, 50); + Render2D.DrawText(font, text, new Rectangle(pos + Float2.One, Size), Color.Black); + Render2D.DrawText(font, text, new Rectangle(pos, Size), Color.White); + } + } + } + /// public CollisionDataWindow(Editor editor, AssetItem item) : base(editor, item) @@ -185,6 +222,12 @@ namespace FlaxEditor.Windows.Assets // Toolstrip _toolstrip.AddSeparator(); _toolstrip.AddButton(editor.Icons.CenterView64, () => _preview.ResetCamera()).LinkTooltip("Show whole collision"); + var infoButton = (ToolStripButton)_toolstrip.AddButton(editor.Icons.Info64).LinkTooltip("Show Collision Data"); + infoButton.Clicked += () => + { + _preview.ShowCollisionData = !_preview.ShowCollisionData; + infoButton.Checked = _preview.ShowCollisionData; + }; _toolstrip.AddButton(editor.Icons.Docs64, () => Platform.OpenUrl(Utilities.Constants.DocsUrl + "manual/physics/colliders/collision-data.html")).LinkTooltip("See documentation to learn more"); // Split Panel @@ -197,12 +240,10 @@ namespace FlaxEditor.Windows.Assets }; // Model preview - _preview = new ModelBasePreview(true) + _preview = new CollisionDataPreview(true) { - ViewportCamera = new FPSCamera(), Parent = _split.Panel1 }; - _preview.Task.ViewFlags &= ~ViewFlags.Sky & ~ViewFlags.Bloom & ~ViewFlags.EyeAdaptation; // Asset properties _propertiesPresenter = new CustomEditorPresenter(null); @@ -240,7 +281,7 @@ namespace FlaxEditor.Windows.Assets _collisionWiresModel = FlaxEngine.Content.CreateVirtualAsset(); _collisionWiresModel.SetupLODs(new[] { 1 }); } - Editor.Internal_GetCollisionWires(FlaxEngine.Object.GetUnmanagedPtr(Asset), out var triangles, out var indices, out var _, out var _); + Editor.Internal_GetCollisionWires(FlaxEngine.Object.GetUnmanagedPtr(Asset), out var triangles, out var indices, out var triangleCount, out var indicesCount); if (triangles != null && indices != null) _collisionWiresModel.LODs[0].Meshes[0].UpdateMesh(triangles, indices); else @@ -252,6 +293,7 @@ namespace FlaxEditor.Windows.Assets } _collisionWiresShowActor.Model = _collisionWiresModel; _collisionWiresShowActor.SetMaterial(0, FlaxEngine.Content.LoadAsyncInternal(EditorAssets.WiresDebugMaterial)); + _preview.SetVerticesAndTriangleCount(triangleCount, indicesCount / 3); _preview.Asset = FlaxEngine.Content.LoadAsync(_asset.Options.Model); }