|
@@ -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;
|
|
|
}
|
|
|
|