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 30b4c147f..cf39357e3 100644 --- a/Source/Editor/Viewport/MainEditorGizmoViewport.cs +++ b/Source/Editor/Viewport/MainEditorGizmoViewport.cs @@ -622,12 +622,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 588a9bc85..b1fdc1720 100644 --- a/Source/Editor/Viewport/PrefabWindowViewport.cs +++ b/Source/Editor/Viewport/PrefabWindowViewport.cs @@ -499,7 +499,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)