diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2021-07-20 12:46:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-20 12:46:50 +0200 |
commit | 124e27b7b24edbea1e71be14a07489f151c86030 (patch) | |
tree | 914632440c5dfda800c9fabfe9f95be6697d28e9 | |
parent | 313c88ef39bb0935b4e9e2ed44ca5e1a1e66b431 (diff) | |
parent | aefde680a4a1df4e5b57c6cf31c0b38fcd52602f (diff) |
Merge pull request #50581 from DavidCambre/VisualScript-Drop-Custom-Nodes
Allow dropping custom node scripts in VisualScript editor
-rw-r--r-- | modules/visual_script/visual_script_editor.cpp | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index de63700c4c..b18d0fdb4b 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -2172,6 +2172,11 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da } if (String(d["type"]) == "files") { +#ifdef OSX_ENABLED + bool use_preload = Input::get_singleton()->is_key_pressed(KEY_META); +#else + bool use_preload = Input::get_singleton()->is_key_pressed(KEY_CTRL); +#endif Vector2 pos = _get_pos_in_graph(p_point); Array files = d["files"]; @@ -2187,13 +2192,22 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da if (!res.is_valid()) { continue; } + Ref<Script> drop_script = ResourceLoader::load(files[i]); + if (drop_script.is_valid() && drop_script->is_tool() && drop_script->get_instance_base_type() == "VisualScriptCustomNode" && !use_preload) { + Ref<VisualScriptCustomNode> vscn; + vscn.instantiate(); + vscn->set_script(drop_script); + + undo_redo->add_do_method(script.ptr(), "add_node", new_id, vscn, pos); + undo_redo->add_undo_method(script.ptr(), "remove_node", new_id); + } else { + Ref<VisualScriptPreload> prnode; + prnode.instantiate(); + prnode->set_preload(res); - Ref<VisualScriptPreload> prnode; - prnode.instantiate(); - prnode->set_preload(res); - - undo_redo->add_do_method(script.ptr(), "add_node", new_id, prnode, pos); - undo_redo->add_undo_method(script.ptr(), "remove_node", new_id); + undo_redo->add_do_method(script.ptr(), "add_node", new_id, prnode, pos); + undo_redo->add_undo_method(script.ptr(), "remove_node", new_id); + } new_ids.push_back(new_id); new_id++; pos += Vector2(20, 20); |