Browse Source

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.
George Marques 3 years ago
parent
commit
9490146a16
2 changed files with 11 additions and 3 deletions
  1. 6 2
      editor/editor_properties.cpp
  2. 5 1
      modules/gdscript/gdscript_parser.cpp

+ 6 - 2
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<EditorPropertyNodePath *>(this)->get_edited_object()->get(_get_meta_pointer_property(), &r_valid);
+		return const_cast<EditorPropertyNodePath *>(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) {

+ 5 - 1
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;