Use a different strategy for path remaps, try loading from a remap file instead.
This ensures multiple PCK exports still work.
This commit is contained in:
parent
d9f7fa4557
commit
b3a1bf3245
2 changed files with 62 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -740,7 +740,24 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> &
|
|||
|
||||
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<uint8_t> 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
|
||||
|
|
Loading…
Reference in a new issue