From f22105c2c3f65f950b6665b003f68f6828a6a9d3 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 10 May 2024 16:58:40 -0500 Subject: [PATCH] Allow adding script via drag drop --- Source/Editor/SceneGraph/GUI/ActorTreeNode.cs | 18 ++++++++++++++++-- .../Editor/Viewport/MainEditorGizmoViewport.cs | 4 ++-- Source/Editor/Viewport/PrefabWindowViewport.cs | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Source/Editor/SceneGraph/GUI/ActorTreeNode.cs b/Source/Editor/SceneGraph/GUI/ActorTreeNode.cs index a56ab7b42..44ec4a74b 100644 --- a/Source/Editor/SceneGraph/GUI/ActorTreeNode.cs +++ b/Source/Editor/SceneGraph/GUI/ActorTreeNode.cs @@ -15,6 +15,7 @@ using FlaxEditor.Windows.Assets; using FlaxEngine; using FlaxEngine.GUI; using FlaxEngine.Utilities; +using Object = FlaxEngine.Object; namespace FlaxEditor.SceneGraph.GUI { @@ -625,6 +626,7 @@ namespace FlaxEditor.SceneGraph.GUI { var item = _dragScriptItems.Objects[i]; var actorType = Editor.Instance.CodeEditing.Actors.Get(item); + var scriptType = Editor.Instance.CodeEditing.Scripts.Get(item); if (actorType != ScriptType.Null) { var actor = actorType.CreateInstance() as Actor; @@ -639,6 +641,18 @@ namespace FlaxEditor.SceneGraph.GUI ActorNode.Root.Spawn(actor, spawnParent); actor.OrderInParent = newOrder; } + else if (scriptType != ScriptType.Null) + { + if (DragOverMode == DragItemPositioning.Above || DragOverMode == DragItemPositioning.Below) + { + Editor.LogWarning("Failed to spawn script of type " + actorType.TypeName); + continue; + } + IUndoAction action = new AddRemoveScript(true, newParent, scriptType); + Select(); + ActorNode.Root.Undo?.AddAction(action); + action.Do(); + } } result = DragDropEffect.Move; } @@ -699,9 +713,9 @@ namespace FlaxEditor.SceneGraph.GUI return Editor.Instance.CodeEditing.Controls.Get().Contains(controlType); } - private static bool ValidateDragScriptItem(ScriptItem script) + private bool ValidateDragScriptItem(ScriptItem script) { - return Editor.Instance.CodeEditing.Actors.Get(script) != ScriptType.Null; + return Editor.Instance.CodeEditing.Actors.Get(script) != ScriptType.Null || Editor.Instance.CodeEditing.Scripts.Get(script) != ScriptType.Null; } /// diff --git a/Source/Editor/Viewport/MainEditorGizmoViewport.cs b/Source/Editor/Viewport/MainEditorGizmoViewport.cs index 7d08213fa..5d2b1f15e 100644 --- a/Source/Editor/Viewport/MainEditorGizmoViewport.cs +++ b/Source/Editor/Viewport/MainEditorGizmoViewport.cs @@ -620,12 +620,12 @@ namespace FlaxEditor.Viewport private static bool ValidateDragActorType(ScriptType actorType) { - return Level.IsAnySceneLoaded; + return Level.IsAnySceneLoaded && Editor.Instance.CodeEditing.Actors.Get().Contains(actorType); } private static bool ValidateDragScriptItem(ScriptItem script) { - return Editor.Instance.CodeEditing.Actors.Get(script) != ScriptType.Null; + return Level.IsAnySceneLoaded && Editor.Instance.CodeEditing.Actors.Get(script) != ScriptType.Null; } /// diff --git a/Source/Editor/Viewport/PrefabWindowViewport.cs b/Source/Editor/Viewport/PrefabWindowViewport.cs index d7624892d..a774b5095 100644 --- a/Source/Editor/Viewport/PrefabWindowViewport.cs +++ b/Source/Editor/Viewport/PrefabWindowViewport.cs @@ -498,7 +498,7 @@ namespace FlaxEditor.Viewport private static bool ValidateDragActorType(ScriptType actorType) { - return true; + return Editor.Instance.CodeEditing.Actors.Get().Contains(actorType); } private static bool ValidateDragScriptItem(ScriptItem script)