From 412125f1910c78d0b6a969ac952cddbad6ca0df4 Mon Sep 17 00:00:00 2001 From: Tomasz Chabora Date: Wed, 28 Aug 2019 19:42:27 +0200 Subject: [PATCH] Detect external modification of scenes --- editor/editor_data.cpp | 20 +++++++++ editor/editor_data.h | 3 ++ editor/editor_node.cpp | 94 +++++++++++++++++++++++++++++++++++++++++- editor/editor_node.h | 8 +++- 4 files changed, 122 insertions(+), 3 deletions(-) diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index 1d3bd55ed3b..8a5de6ccac9 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -510,6 +510,7 @@ int EditorData::add_edited_scene(int p_at_pos) { EditedScene es; es.root = nullptr; es.path = String(); + es.file_modified_time = 0; es.history_current = -1; es.version = 0; es.live_edit_root = NodePath(String("/root")); @@ -666,6 +667,10 @@ void EditorData::set_edited_scene_root(Node *p_root) { p_root->set_filename(edited_scene[current_edited_scene].path); } } + + if (edited_scene[current_edited_scene].path != "") { + edited_scene.write[current_edited_scene].file_modified_time = FileAccess::get_modified_time(edited_scene[current_edited_scene].path); + } } int EditorData::get_edited_scene_count() const { @@ -697,6 +702,21 @@ uint64_t EditorData::get_scene_version(int p_idx) const { return edited_scene[p_idx].version; } +void EditorData::set_scene_modified_time(int p_idx, uint64_t p_time) { + if (p_idx == -1) { + p_idx = current_edited_scene; + } + + ERR_FAIL_INDEX(p_idx, edited_scene.size()); + + edited_scene.write[p_idx].file_modified_time = p_time; +} + +uint64_t EditorData::get_scene_modified_time(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), 0); + return edited_scene[p_idx].file_modified_time; +} + String EditorData::get_scene_type(int p_idx) const { ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), String()); if (!edited_scene[p_idx].root) { diff --git a/editor/editor_data.h b/editor/editor_data.h index d5c8c2a7136..2f1106e62a0 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -111,6 +111,7 @@ public: struct EditedScene { Node *root = nullptr; String path; + uint64_t file_modified_time; Dictionary editor_states; List selection; Vector history_stored; @@ -191,6 +192,8 @@ public: Ref