From 9490146a164194bc45dfe26b43da1def60e773d9 Mon Sep 17 00:00:00 2001 From: George Marques Date: Mon, 27 Jun 2022 18:41:07 -0300 Subject: [PATCH] GDScript: Enable exporting nodes to the inspector Also fix an small issue in the property editor for NodePath trying to use the meta property when not needed. --- editor/editor_properties.cpp | 8 ++++++-- modules/gdscript/gdscript_parser.cpp | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 0e6c9162cea..7bc01e36f22 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -3026,13 +3026,17 @@ String EditorPropertyNodePath::_get_meta_pointer_property() const { Variant EditorPropertyNodePath::_get_cache_value(const StringName &p_prop, bool &r_valid) const { if (p_prop == get_edited_property()) { r_valid = true; - return const_cast(this)->get_edited_object()->get(_get_meta_pointer_property(), &r_valid); + return const_cast(this)->get_edited_object()->get(pointer_mode ? StringName(_get_meta_pointer_property()) : get_edited_property(), &r_valid); } return Variant(); } StringName EditorPropertyNodePath::_get_revert_property() const { - return _get_meta_pointer_property(); + if (pointer_mode) { + return _get_meta_pointer_property(); + } else { + return get_edited_property(); + } } void EditorPropertyNodePath::_node_selected(const NodePath &p_path) { diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 9e347eed5a2..ca430b0f727 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -3605,8 +3605,12 @@ bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node variable->export_info.type = Variant::OBJECT; variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE; variable->export_info.hint_string = export_type.native_type; + } else if (ClassDB::is_parent_class(export_type.native_type, SNAME("Node"))) { + variable->export_info.type = Variant::OBJECT; + variable->export_info.hint = PROPERTY_HINT_NODE_TYPE; + variable->export_info.hint_string = export_type.native_type; } else { - push_error(R"(Export type can only be built-in, a resource, or an enum.)", variable); + push_error(R"(Export type can only be built-in, a resource, a node, or an enum.)", variable); return false; } break;