Merge remote-tracking branch 'origin/1.1' into linux-editor
# Conflicts: # Source/Engine/Core/Math/BoundingSphere.cs # Source/Engine/Debug/DebugDraw.cpp # Source/Engine/Platform/Win32/Win32Platform.cpp # Source/Engine/Platform/Win32/Win32Platform.h
This commit is contained in:
@@ -46,24 +46,47 @@ namespace FlaxEditor.Content
|
||||
/// Create collision data from model.
|
||||
/// </summary>
|
||||
/// <param name="model">The associated model.</param>
|
||||
public void CreateCollisionDataFromModel(Model model)
|
||||
/// <param name="created">The action to call once the collision data gets created (or reused from existing).</param>
|
||||
public void CreateCollisionDataFromModel(Model model, Action<CollisionData> created = null)
|
||||
{
|
||||
Action<ContentItem> created = contentItem =>
|
||||
// Check if there already is collision data for that model to reuse
|
||||
var modelItem = (AssetItem)Editor.Instance.ContentDatabase.Find(model.ID);
|
||||
if (modelItem?.ParentFolder != null)
|
||||
{
|
||||
var ai = (AssetItem)contentItem;
|
||||
var cd = FlaxEngine.Content.LoadAsync<CollisionData>(ai.ID);
|
||||
if (cd == null || cd.WaitForLoaded())
|
||||
foreach (var child in modelItem.ParentFolder.Children)
|
||||
{
|
||||
if (child is BinaryAssetItem b && b.IsOfType<CollisionData>())
|
||||
{
|
||||
var collisionData = FlaxEngine.Content.Load<CollisionData>(b.ID);
|
||||
if (collisionData && collisionData.Options.Model == model.ID)
|
||||
{
|
||||
Editor.Instance.Windows.ContentWin.Select(b);
|
||||
if (created != null)
|
||||
FlaxEngine.Scripting.InvokeOnUpdate(() => created(collisionData));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create new item so user can name it and then generate collision for it in async
|
||||
Action<ContentItem> create = contentItem =>
|
||||
{
|
||||
var assetItem = (AssetItem)contentItem;
|
||||
var collisionData = FlaxEngine.Content.LoadAsync<CollisionData>(assetItem.ID);
|
||||
if (collisionData == null || collisionData.WaitForLoaded())
|
||||
{
|
||||
Editor.LogError("Failed to load created collision data.");
|
||||
return;
|
||||
}
|
||||
|
||||
Task.Run(() =>
|
||||
{
|
||||
Editor.CookMeshCollision(ai.Path, CollisionDataType.TriangleMesh, model);
|
||||
});
|
||||
Editor.CookMeshCollision(assetItem.Path, CollisionDataType.TriangleMesh, model);
|
||||
if (created != null)
|
||||
FlaxEngine.Scripting.InvokeOnUpdate(() => created(collisionData));
|
||||
});
|
||||
};
|
||||
Editor.Instance.Windows.ContentWin.NewItem(this, null, created);
|
||||
Editor.Instance.Windows.ContentWin.NewItem(this, null, create);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,11 +45,11 @@ namespace FlaxEditor.Content
|
||||
{
|
||||
base.OnContentWindowContextMenu(menu, item);
|
||||
|
||||
menu.AddButton("Generate collision data", () =>
|
||||
menu.AddButton("Create collision data", () =>
|
||||
{
|
||||
var model = FlaxEngine.Content.LoadAsync<Model>(((ModelAssetItem)item).ID);
|
||||
var cdProxy = (CollisionDataProxy)Editor.Instance.ContentDatabase.GetProxy<CollisionData>();
|
||||
cdProxy.CreateCollisionDataFromModel(model);
|
||||
var collisionDataProxy = (CollisionDataProxy)Editor.Instance.ContentDatabase.GetProxy<CollisionData>();
|
||||
collisionDataProxy.CreateCollisionDataFromModel(model);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user