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:
Wojtek Figat
2021-02-23 22:32:17 +01:00
129 changed files with 6085 additions and 1891 deletions

View File

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

View File

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