summaryrefslogtreecommitdiffstats
path: root/editor/editor_file_system.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/editor_file_system.cpp')
-rw-r--r--editor/editor_file_system.cpp42
1 files changed, 27 insertions, 15 deletions
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp
index f0dc850af0..4664defa59 100644
--- a/editor/editor_file_system.cpp
+++ b/editor/editor_file_system.cpp
@@ -150,6 +150,11 @@ uint64_t EditorFileSystemDirectory::get_file_modified_time(int p_idx) const {
return files[p_idx]->modified_time;
}
+uint64_t EditorFileSystemDirectory::get_file_import_modified_time(int p_idx) const {
+ ERR_FAIL_INDEX_V(p_idx, files.size(), 0);
+ return files[p_idx]->import_modified_time;
+}
+
String EditorFileSystemDirectory::get_file_script_class_name(int p_idx) const {
return files[p_idx]->script_class_name;
}
@@ -326,8 +331,8 @@ void EditorFileSystem::_scan_filesystem() {
FileCache fc;
fc.type = split[1];
if (fc.type.contains("/")) {
- fc.type = fc.type.get_slice("/", 0);
- fc.resource_script_class = fc.type.get_slice("/", 1);
+ fc.type = split[1].get_slice("/", 0);
+ fc.resource_script_class = split[1].get_slice("/", 1);
}
fc.uid = split[2].to_int();
fc.modification_time = split[3].to_int();
@@ -720,12 +725,22 @@ bool EditorFileSystem::_update_scan_actions() {
int idx = ia.dir->find_file_index(ia.file);
ERR_CONTINUE(idx == -1);
String full_path = ia.dir->get_file_path(idx);
- if (_test_for_reimport(full_path, false)) {
+
+ bool need_reimport = _test_for_reimport(full_path, false);
+ if (!need_reimport && FileAccess::exists(full_path + ".import")) {
+ uint64_t import_mt = ia.dir->get_file_import_modified_time(idx);
+ if (import_mt != FileAccess::get_modified_time(full_path + ".import")) {
+ need_reimport = true;
+ }
+ }
+
+ if (need_reimport) {
//must reimport
reimports.push_back(full_path);
Vector<String> dependencies = _get_dependencies(full_path);
- for (const String &dependency_path : dependencies) {
- if (import_extensions.has(dependency_path.get_extension())) {
+ for (const String &dep : dependencies) {
+ const String &dependency_path = dep.contains("::") ? dep.get_slice("::", 0) : dep;
+ if (import_extensions.has(dep.get_extension())) {
reimports.push_back(dependency_path);
}
}
@@ -1748,7 +1763,8 @@ String EditorFileSystem::_get_global_script_class(const String &p_type, const St
void EditorFileSystem::_update_file_icon_path(EditorFileSystemDirectory::FileInfo *file_info) {
String icon_path;
if (file_info->script_class_icon_path.is_empty() && !file_info->deps.is_empty()) {
- const String &script_path = file_info->deps[0]; // Assuming the first dependency is a script.
+ const String &script_dep = file_info->deps[0]; // Assuming the first dependency is a script.
+ const String &script_path = script_dep.contains("::") ? script_dep.get_slice("::", 2) : script_dep;
if (!script_path.is_empty()) {
String *cached = file_icon_cache.getptr(script_path);
if (cached) {
@@ -1891,7 +1907,7 @@ void EditorFileSystem::_update_scene_groups() {
continue;
}
- const HashSet<StringName> scene_groups = _get_scene_groups(path);
+ const HashSet<StringName> scene_groups = PackedScene::get_scene_groups(path);
if (!scene_groups.is_empty()) {
ProjectSettings::get_singleton()->add_scene_groups_cache(path, scene_groups);
}
@@ -1935,12 +1951,6 @@ void EditorFileSystem::_get_all_scenes(EditorFileSystemDirectory *p_dir, HashSet
}
}
-HashSet<StringName> EditorFileSystem::_get_scene_groups(const String &p_path) {
- Ref<PackedScene> packed_scene = ResourceLoader::load(p_path);
- ERR_FAIL_COND_V(packed_scene.is_null(), HashSet<StringName>());
- return packed_scene->get_state()->get_all_groups();
-}
-
void EditorFileSystem::update_file(const String &p_file) {
ERR_FAIL_COND(p_file.is_empty());
update_files({ p_file });
@@ -2072,7 +2082,6 @@ void EditorFileSystem::update_files(const Vector<String> &p_script_paths) {
}
if (updated) {
- _process_update_pending();
if (update_files_icon_cache) {
_update_files_icon_path();
} else {
@@ -2080,7 +2089,10 @@ void EditorFileSystem::update_files(const Vector<String> &p_script_paths) {
_update_file_icon_path(fi);
}
}
- call_deferred(SNAME("emit_signal"), "filesystem_changed"); //update later
+ if (!is_scanning()) {
+ _process_update_pending();
+ call_deferred(SNAME("emit_signal"), "filesystem_changed"); //update later
+ }
}
}