From 1ae6d94b2fdd53f9e4e44252230363341dbff4d1 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Thu, 19 Sep 2024 16:57:26 +0200 Subject: [PATCH] Cloud import fixes --- base/sources/import_arm.ts | 39 ++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/base/sources/import_arm.ts b/base/sources/import_arm.ts index 530a1270..3fb7a0a8 100644 --- a/base/sources/import_arm.ts +++ b/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, 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 = armpack_decode_to_map(b); let project: project_format_t = {}; project.version = "1.0 alpha";