Allow dropping custom node scripts in VisualScript editor

This commit is contained in:
David Cambré 2021-07-21 15:00:02 +02:00
parent 40b57319e2
commit 968dd73141

View file

@ -2180,6 +2180,11 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
} }
if (String(d["type"]) == "files") { 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_CONTROL);
#endif
Vector2 pos = _get_pos_in_graph(p_point); Vector2 pos = _get_pos_in_graph(p_point);
Array files = d["files"]; Array files = d["files"];
@ -2195,13 +2200,22 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da
if (!res.is_valid()) { if (!res.is_valid()) {
continue; 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.instance();
vscn->set_script(drop_script.get_ref_ptr());
Ref<VisualScriptPreload> prnode; undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, vscn, pos);
prnode.instance(); undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id);
prnode->set_preload(res); } else {
Ref<VisualScriptPreload> prnode;
prnode.instance();
prnode->set_preload(res);
undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, prnode, pos); undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, prnode, pos);
undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id); undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id);
}
new_ids.push_back(new_id); new_ids.push_back(new_id);
new_id++; new_id++;
pos += Vector2(20, 20); pos += Vector2(20, 20);