Browse Source

Cloud import fixes

luboslenco 1 năm trước cách đây
mục cha
commit
1ae6d94b2f
1 tập tin đã thay đổi với 29 bổ sung10 xóa
  1. 29 10
      base/sources/import_arm.ts

+ 29 - 10
base/sources/import_arm.ts

@@ -1,10 +1,13 @@
 
 function import_arm_run_project(path: string) {
 	let b: buffer_t = data_get_blob(path);
-	let project: project_format_t = armpack_decode(b);
+	let project: project_format_t;
 
-	if (project.version != null && project.version == "0.8") {
-		project = import_arm_upgrade_from_08(b);
+	if (import_arm_is_legacy(b)) {
+		project = import_arm_from_legacy(b);
+	}
+	else {
+		project = armpack_decode(b);
 	}
 
 	///if (is_paint || is_sculpt)
@@ -24,7 +27,7 @@ function import_arm_run_project(path: string) {
 		return;
 	}
 
-	let import_as_mesh: bool = b[10] != 'v'; // No version
+	let import_as_mesh: bool = b[10] != 118; // 'v', no version
 	context_raw.layers_preview_dirty = true;
 	context_raw.layer_filter = 0;
 	///end
@@ -425,14 +428,18 @@ function import_arm_run_mesh(raw: scene_t) {
 
 function import_arm_run_material(path: string) {
 	let b: buffer_t = data_get_blob(path);
-	let project: project_format_t = armpack_decode(b);
+	let project: project_format_t;
+	if (import_arm_is_legacy(b)) {
+		project = import_arm_from_legacy(b);
+	}
+	else {
+		project = armpack_decode(b);
+	}
+
 	if (project.version == null) {
 		data_delete_blob(path);
 		return;
 	}
-	if (project.version == "0.8") {
-		project = import_arm_upgrade_from_08(b);
-	}
 	import_arm_run_material_from_project(project, path);
 }
 
@@ -816,9 +823,21 @@ function _import_arm_get_node_canvas_array(map: map_t<string, any>, key: string)
 	return ar;
 }
 
-function import_arm_upgrade_from_08(b: buffer_t): project_format_t {
+function import_arm_is_legacy(b: buffer_t): bool {
+	// Cloud materials are at version 0.8 / 0.9
+	let has_version: bool = b[10] == 118; // 'v'
+	let has_zero: bool = b[22] == 48; // '0'
+	let has_dot: bool = b[23] == 46; // '.'
+	let has_eight: bool = b[24] == 56; // '8'
+	let has_nine: bool = b[24] == 57; // '9'
+	if (has_version && has_zero && has_dot && (has_eight || has_nine)) {
+		return true;
+	}
+	return false;
+}
+
+function import_arm_from_legacy(b: buffer_t): project_format_t {
 	// Deprecated
-	// Cloud materials are at version 0.8
 	let old: map_t<string, any> = armpack_decode_to_map(b);
 	let project: project_format_t = {};
 	project.version = "1.0 alpha";