// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. using System; using System.Threading.Tasks; using FlaxEditor.Windows; using FlaxEditor.Windows.Assets; using FlaxEngine; namespace FlaxEditor.Content { /// /// A asset proxy object. /// /// public class CollisionDataProxy : BinaryAssetProxy { /// public override string Name => "Collision Data"; /// public override EditorWindow Open(Editor editor, ContentItem item) { return new CollisionDataWindow(editor, item as AssetItem); } /// public override Color AccentColor => Color.FromRGB(0x2c3e50); /// public override Type AssetType => typeof(CollisionData); /// public override bool CanCreate(ContentFolder targetLocation) { return targetLocation.CanHaveAssets; } /// public override void Create(string outputPath, object arg) { if (Editor.CreateAsset(Editor.NewAssetType.CollisionData, outputPath)) throw new Exception("Failed to create new asset."); } /// /// Create collision data from model. /// /// The associated model. public void CreateCollisionDataFromModel(Model model) { Action created = contentItem => { var ai = (AssetItem)contentItem; var cd = FlaxEngine.Content.LoadAsync(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); } } }