Merge branch 'collisiondata-from-model' of git://github.com/jb-perrier/FlaxEngine into jb-perrier-collisiondata-from-model

This commit is contained in:
Wojtek Figat
2020-12-29 23:06:26 +01:00
2 changed files with 34 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved.
using System;
using System.Threading.Tasks;
using FlaxEditor.Windows;
using FlaxEditor.Windows.Assets;
using FlaxEngine;
@@ -40,5 +41,29 @@ namespace FlaxEditor.Content
if (Editor.CreateAsset(Editor.NewAssetType.CollisionData, outputPath))
throw new Exception("Failed to create new asset.");
}
/// <summary>
/// Create collision data from model.
/// </summary>
/// <param name="model">The associated model.</param>
public void CreateCollisionDataFromModel(Model model)
{
Action<ContentItem> created = contentItem =>
{
var ai = (AssetItem)contentItem;
var cd = FlaxEngine.Content.LoadAsync<CollisionData>(ai.ID);
if (cd == null || cd.WaitForLoaded())
{
Editor.LogError("Failed to load created collision data.");
return;
}
Task.Run(() =>
{
Editor.CookMeshCollision(ai.Path, CollisionDataType.TriangleMesh, model);
});
};
Editor.Instance.Windows.ContentWin.NewItem(this, null, created);
}
}
}

View File

@@ -89,6 +89,15 @@ namespace FlaxEditor.Windows
if (item is AssetItem assetItem)
{
cm.AddButton("Copy asset ID", () => Clipboard.Text = JsonSerializer.GetStringID(assetItem.ID));
if (item is ModelAssetItem modelAssetItem)
{
cm.AddButton("Generate collision data", () =>
{
var model = FlaxEngine.Content.Load<Model>(modelAssetItem.ID);
var cdProxy = (CollisionDataProxy)Editor.Instance.ContentDatabase.GetProxy<CollisionData>();
cdProxy.CreateCollisionDataFromModel(model);
});
}
}
if (Editor.CanExport(item.Path))