Переглянути джерело

Remove error when getting dependencies from tscn files in some cases, closes #3897

Juan Linietsky 9 роки тому
батько
коміт
519fce94e9

+ 34 - 21
scene/resources/scene_format_text.cpp

@@ -67,12 +67,17 @@ Error ResourceInteractiveLoaderText::_parse_sub_resource(VariantParser::Stream*
 
 	String path = local_path+"::"+itos(index);
 
-	if (!ResourceCache::has(path)) {
-		r_err_str="Can't load cached sub-resource: "+path;
-		return ERR_PARSE_ERROR;
-	}
+	if (!ignore_resource_parsing) {
 
-	r_res=RES(ResourceCache::get(path));
+		if (!ResourceCache::has(path)) {
+			r_err_str="Can't load cached sub-resource: "+path;
+			return ERR_PARSE_ERROR;
+		}
+
+		r_res=RES(ResourceCache::get(path));
+	} else {
+		r_res=RES();
+	}
 
 	VariantParser::get_token(p_stream,token,line,r_err_str);
 	if (token.type!=VariantParser::TK_PARENTHESIS_CLOSE) {
@@ -95,25 +100,29 @@ Error ResourceInteractiveLoaderText::_parse_ext_resource(VariantParser::Stream*
 
 	int id = token.value;
 
+	if (!ignore_resource_parsing) {
 
-	if (!ext_resources.has(id)) {
-		r_err_str="Can't load cached ext-resource #"+itos(id);
-		return ERR_PARSE_ERROR;
-	}
+		if (!ext_resources.has(id)) {
+			r_err_str="Can't load cached ext-resource #"+itos(id);
+			return ERR_PARSE_ERROR;
+		}
 
-	String path = ext_resources[id].path;
-	String type = ext_resources[id].type;
+		String path = ext_resources[id].path;
+		String type = ext_resources[id].type;
 
-	if (path.find("://")==-1 && path.is_rel_path()) {
-		// path is relative to file being loaded, so convert to a resource path
-		path=Globals::get_singleton()->localize_path(res_path.get_base_dir().plus_file(path));
+		if (path.find("://")==-1 && path.is_rel_path()) {
+			// path is relative to file being loaded, so convert to a resource path
+			path=Globals::get_singleton()->localize_path(res_path.get_base_dir().plus_file(path));
 
-	}
+		}
 
-	r_res=ResourceLoader::load(path,type);
+		r_res=ResourceLoader::load(path,type);
 
-	if (r_res.is_null()) {
-		WARN_PRINT(String("Couldn't load external resource: "+path).utf8().get_data());
+		if (r_res.is_null()) {
+			WARN_PRINT(String("Couldn't load external resource: "+path).utf8().get_data());
+		}
+	} else {
+		r_res=RES();
 	}
 
 	VariantParser::get_token(p_stream,token,line,r_err_str);
@@ -625,6 +634,7 @@ void ResourceInteractiveLoaderText::get_dependencies(FileAccess *f,List<String>
 
 
 	open(f);
+	ignore_resource_parsing=true;
 	ERR_FAIL_COND(error!=OK);
 
 	while(next_tag.name=="ext_resource") {
@@ -662,6 +672,7 @@ void ResourceInteractiveLoaderText::get_dependencies(FileAccess *f,List<String>
 		Error err = VariantParser::parse_tag(&stream,lines,error_text,next_tag,&rp);
 
 		if (err) {
+			print_line(error_text+" - "+itos(lines));
 			error_text="Unexpected end of file";
 			_printerr();
 			error=ERR_FILE_CORRUPT;
@@ -676,7 +687,7 @@ Error ResourceInteractiveLoaderText::rename_dependencies(FileAccess *p_f, const
 
 	open(p_f,true);
 	ERR_FAIL_COND_V(error!=OK,error);
-
+	ignore_resource_parsing=true;
 	//FileAccess
 
 	FileAccess *fw = NULL;
@@ -794,7 +805,7 @@ void ResourceInteractiveLoaderText::open(FileAccess *p_f,bool p_skip_first_tag)
 
 	stream.f=f;
 	is_scene=false;
-
+	ignore_resource_parsing=false;
 	resource_current=0;
 
 
@@ -879,6 +890,8 @@ String ResourceInteractiveLoaderText::recognize(FileAccess *p_f) {
 
 	stream.f=f;
 
+	ignore_resource_parsing=true;
+
 
 	VariantParser::Tag tag;
 	Error err = VariantParser::parse_tag(&stream,lines,error_text,tag);
@@ -1296,7 +1309,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path,const RES& p_re
 				if ((PE->get().usage&PROPERTY_USAGE_STORE_IF_NONZERO && value.is_zero())||(PE->get().usage&PROPERTY_USAGE_STORE_IF_NONONE && value.is_one()) )
 					continue;
 
-				if (PE->get().type==Variant::OBJECT && value.is_zero() && (!PE->get().usage&PROPERTY_USAGE_STORE_IF_NULL))
+				if (PE->get().type==Variant::OBJECT && value.is_zero() && !(PE->get().usage&PROPERTY_USAGE_STORE_IF_NULL))
 					continue;
 
 				String vars;

+ 1 - 1
scene/resources/scene_format_text.h

@@ -56,7 +56,7 @@ class ResourceInteractiveLoaderText : public ResourceInteractiveLoader {
 	bool is_scene;
 	String res_type;
 
-
+	bool ignore_resource_parsing;
 
 //	Map<String,String> remaps;