Browse Source

Merge pull request #13176 from bojidar-bg/allow-subproperty-set

Fix combatibility with older .scn files
Juan Linietsky 7 years ago
parent
commit
0300522189
2 changed files with 9 additions and 3 deletions
  1. 8 3
      core/io/resource_format_binary.cpp
  2. 1 0
      core/io/resource_format_binary.h

+ 8 - 3
core/io/resource_format_binary.cpp

@@ -84,8 +84,10 @@ enum {
 	OBJECT_INTERNAL_RESOURCE = 2,
 	OBJECT_INTERNAL_RESOURCE = 2,
 	OBJECT_EXTERNAL_RESOURCE_INDEX = 3,
 	OBJECT_EXTERNAL_RESOURCE_INDEX = 3,
 	//version 2: added 64 bits support for float and int
 	//version 2: added 64 bits support for float and int
-	FORMAT_VERSION = 2,
-	FORMAT_VERSION_CAN_RENAME_DEPS = 1
+	//version 3: changed nodepath encoding
+	FORMAT_VERSION = 3,
+	FORMAT_VERSION_CAN_RENAME_DEPS = 1,
+	FORMAT_VERSION_NO_NODEPATH_PROPERTY = 3,
 
 
 };
 };
 
 
@@ -273,6 +275,9 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) {
 			uint32_t subname_count = f->get_16();
 			uint32_t subname_count = f->get_16();
 			absolute = subname_count & 0x8000;
 			absolute = subname_count & 0x8000;
 			subname_count &= 0x7FFF;
 			subname_count &= 0x7FFF;
+			if (ver_format < FORMAT_VERSION_NO_NODEPATH_PROPERTY) {
+				subname_count += 1; // has a property field, so we should count it as well
+			}
 
 
 			for (int i = 0; i < name_count; i++)
 			for (int i = 0; i < name_count; i++)
 				names.push_back(_get_string());
 				names.push_back(_get_string());
@@ -854,7 +859,7 @@ void ResourceInteractiveLoaderBinary::open(FileAccess *p_f) {
 
 
 	uint32_t ver_major = f->get_32();
 	uint32_t ver_major = f->get_32();
 	uint32_t ver_minor = f->get_32();
 	uint32_t ver_minor = f->get_32();
-	uint32_t ver_format = f->get_32();
+	ver_format = f->get_32();
 
 
 	print_bl("big endian: " + itos(big_endian));
 	print_bl("big endian: " + itos(big_endian));
 #ifdef BIG_ENDIAN_ENABLED
 #ifdef BIG_ENDIAN_ENABLED

+ 1 - 0
core/io/resource_format_binary.h

@@ -41,6 +41,7 @@ class ResourceInteractiveLoaderBinary : public ResourceInteractiveLoader {
 	String res_path;
 	String res_path;
 	String type;
 	String type;
 	Ref<Resource> resource;
 	Ref<Resource> resource;
+	uint32_t ver_format;
 
 
 	FileAccess *f;
 	FileAccess *f;