diff --git a/Source/Editor/Surface/BehaviorTreeSurface.cs b/Source/Editor/Surface/BehaviorTreeSurface.cs index 30b548a5d..512a55638 100644 --- a/Source/Editor/Surface/BehaviorTreeSurface.cs +++ b/Source/Editor/Surface/BehaviorTreeSurface.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; +using FlaxEditor.Content; using FlaxEditor.Scripting; using FlaxEditor.Surface.ContextMenu; using FlaxEditor.Surface.Elements; @@ -145,6 +146,41 @@ namespace FlaxEditor.Surface base.CanUseNodeType(groupArchetype, nodeArchetype); } + /// + protected override bool ValidateDragItem(AssetItem assetItem) + { + if (assetItem.IsOfType()) + return true; + return base.ValidateDragItem(assetItem); + } + + /// + protected override void HandleDragDropAssets(List objects, DragDropEventArgs args) + { + for (int i = 0; i < objects.Count; i++) + { + var assetItem = objects[i]; + SurfaceNode node = null; + + if (assetItem.IsOfType()) + { + var instance = new BehaviorTreeSubTreeNode(); + instance.Name = Utilities.Utils.GetPropertyNameUI(assetItem.ShortName); + instance.Tree = (BehaviorTree)assetItem.LoadAsync(); + node = Context.SpawnNode(19, 1, args.SurfaceLocation, new object[] + { + typeof(BehaviorTreeSubTreeNode).FullName, + FlaxEngine.Json.JsonSerializer.SaveToBytes(instance), + }); + FlaxEngine.Object.Destroy(instance); + } + + if (node != null) + args.SurfaceLocation.X += node.Width + 10; + } + base.HandleDragDropAssets(objects, args); + } + /// public override void OnDestroy() {