From b3a1bf324566af58ceedc918c83396cba97aeedb Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 18 Dec 2017 11:21:13 -0300 Subject: Use a different strategy for path remaps, try loading from a remap file instead. This ensures multiple PCK exports still work. --- core/io/resource_loader.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ editor/editor_export.cpp | 19 ++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index d2aad1d63a..dea9f38634 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -35,6 +35,7 @@ #include "print_string.h" #include "project_settings.h" #include "translation.h" +#include "variant_parser.h" ResourceFormatLoader *ResourceLoader::loader[MAX_LOADERS]; int ResourceLoader::loader_count = 0; @@ -454,6 +455,49 @@ String ResourceLoader::_path_remap(const String &p_path, bool *r_translation_rem if (path_remaps.has(new_path)) { new_path = path_remaps[new_path]; } + + if (new_path == p_path) { //did not remap + //try file remap + Error err; + FileAccess *f = FileAccess::open(p_path + ".remap", FileAccess::READ, &err); + + if (f) { + + VariantParser::StreamFile stream; + stream.f = f; + + String assign; + Variant value; + VariantParser::Tag next_tag; + + int lines = 0; + String error_text; + while (true) { + + assign = Variant(); + next_tag.fields.clear(); + next_tag.name = String(); + + err = VariantParser::parse_tag_assign_eof(&stream, lines, error_text, next_tag, assign, value, NULL, true); + if (err == ERR_FILE_EOF) { + break; + } else if (err != OK) { + ERR_PRINTS("Parse error: " + p_path + ".remap:" + itos(lines) + " error: " + error_text); + break; + } + + if (assign == "path") { + new_path = value; + break; + } else if (next_tag.name != "remap") { + break; + } + } + + memdelete(f); + } + } + return new_path; } diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index 3585417d13..1b88a56b75 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -740,7 +740,24 @@ Error EditorExportPlatform::export_project_files(const Ref & ProjectSettings::CustomMap custom_map; if (path_remaps.size()) { - custom_map["path_remap/remapped_paths"] = path_remaps; + if (1) { //new remap mode, use always as it's friendlier with multiple .pck exports + for (int i = 0; i < path_remaps.size(); i += 2) { + String from = path_remaps[i]; + String to = path_remaps[i + 1]; + String remap_file = "[remap]\n\npath=\"" + to.c_escape() + "\"\n"; + CharString utf8 = remap_file.utf8(); + Vector new_file; + new_file.resize(utf8.length()); + for (int j = 0; j < utf8.length(); j++) { + new_file[j] = utf8[j]; + } + + p_func(p_udata, from + ".remap", new_file, idx, total); + } + } else { + //old remap mode, will still work, but it's unused because it's not multiple pck export friendly + custom_map["path_remap/remapped_paths"] = path_remaps; + } } // Store icon and splash images directly, they need to bypass the import system and be loaded as images -- cgit v1.2.3