Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/classes/EditorInterface.xml
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@
<return type="void" />
<param index="0" name="scene_filepath" type="String" />
<description>
Reloads the scene at the given path.
Reloads the scene at the given path. Fails if the scene is not open.
</description>
</method>
<method name="restart_editor">
Expand Down
2 changes: 1 addition & 1 deletion editor/debugger/editor_debugger_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ void EditorDebuggerNode::_stack_frame_selected(int p_debugger) {
void EditorDebuggerNode::_error_selected(const String &p_file, int p_line, int p_debugger) {
if (!p_file.is_resource_file() && !ResourceCache::has(p_file)) {
// If it's a built-in script, make sure the scene is opened first.
EditorNode::get_singleton()->load_scene(p_file.get_slice("::", 0));
EditorNode::get_singleton()->open_scene(p_file.get_slice("::", 0));
}
Ref<Script> s = ResourceLoader::load(p_file);
emit_signal(SNAME("goto_script_line"), s, p_line - 1);
Expand Down
2 changes: 1 addition & 1 deletion editor/docks/filesystem_dock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1676,7 +1676,7 @@ void FileSystemDock::_update_dependencies_after_move(const HashMap<String, Strin
print_verbose("Remapping dependencies for: " + file);
const Error err = ResourceLoader::rename_dependencies(file, p_renames);
if (err == OK) {
if (ResourceLoader::get_resource_type(file) == "PackedScene") {
if (ResourceLoader::get_resource_type(file) == "PackedScene" && EditorNode::get_editor_data().get_edited_scene_from_path(file) != -1) {
if (file == edited_scene_path) {
scenes_to_reload.push_front(file);
} else {
Expand Down
2 changes: 1 addition & 1 deletion editor/docks/scene_tree_dock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1903,7 +1903,7 @@ void SceneTreeDock::_node_strip_signal_inheritance(Node *p_node) {
}

void SceneTreeDock::_load_request(const String &p_path) {
EditorNode::get_singleton()->load_scene(p_path);
EditorNode::get_singleton()->open_scene(p_path);
_local_tree_selected();
}

Expand Down
100 changes: 76 additions & 24 deletions editor/editor_data.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -328,8 +328,23 @@ Dictionary EditorData::get_editor_plugin_states() const {

Dictionary EditorData::get_scene_editor_states(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), Dictionary());
EditedScene es = edited_scene[p_idx];
return es.editor_states;
return edited_scene[p_idx].editor_states;
}

Dictionary EditorData::get_scene_editor_states_with_selection(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx, edited_scene.size(), Dictionary());
const EditedScene &es = edited_scene[p_idx];
Dictionary states = es.editor_states;

TypedArray<NodePath> selected_paths;
Node *root = es.root;
if (root) {
for (Node *node : es.selection) {
selected_paths.push_back(root->get_path_to(node));
}
states["selected_nodes"] = selected_paths;
}
return states;
}

void EditorData::set_editor_plugin_states(const Dictionary &p_states) {
Expand Down Expand Up @@ -376,6 +391,36 @@ void EditorData::notify_scene_saved(const String &p_path) {
}
}

void EditorData::load_editor_plugin_states_from_config(const Ref<ConfigFile> &p_config_file, int p_idx) {
ERR_FAIL_INDEX(p_idx, edited_scene.size());
EditedScene &es = edited_scene.write[p_idx];

const Vector<String> esl = p_config_file->get_section_keys("editor_states");

Dictionary states;
for (const String &E : esl) {
const Variant state = p_config_file->get_value("editor_states", E);
if (state.get_type() != Variant::NIL) {
states[E] = state;
}
}
es.editor_states = states;

const Node *root = es.root;
if (root && p_config_file->has_section_key("editor_states", "selected_nodes")) {
TypedArray<NodePath> node_paths = p_config_file->get_value("editor_states", "selected_nodes");
List<Node *> nodes;

for (const Variant &np : node_paths) {
Node *node = root->get_node_or_null(np);
if (node) {
nodes.push_back(node);
}
}
es.selection = nodes;
}
}

void EditorData::clear_editor_states() {
for (int i = 0; i < editor_plugins.size(); i++) {
editor_plugins[i]->clear();
Expand Down Expand Up @@ -635,12 +680,6 @@ int EditorData::add_edited_scene(int p_at_pos) {
return p_at_pos;
}

void EditorData::move_edited_scene_index(int p_idx, int p_to_idx) {
ERR_FAIL_INDEX(p_idx, edited_scene.size());
ERR_FAIL_INDEX(p_to_idx, edited_scene.size());
SWAP(edited_scene.write[p_idx], edited_scene.write[p_to_idx]);
}

void EditorData::remove_scene(int p_idx) {
ERR_FAIL_INDEX(p_idx, edited_scene.size());
if (edited_scene[p_idx].root) {
Expand Down Expand Up @@ -671,6 +710,24 @@ void EditorData::remove_scene(int p_idx) {
edited_scene.remove_at(p_idx);
}

void EditorData::set_scene_root(int p_idx, Node *p_root) {
ERR_FAIL_INDEX(p_idx, edited_scene.size());
EditedScene &scene_info = edited_scene.write[p_idx];

scene_info.root = p_root;
if (p_root) {
if (p_root->is_instance()) {
scene_info.path = p_root->get_scene_file_path();
} else {
p_root->set_scene_file_path(scene_info.path);
}
}

if (!scene_info.path.is_empty()) {
scene_info.file_modified_time = FileAccess::get_modified_time(scene_info.path);
}
}

bool EditorData::_find_updated_instances(Node *p_root, Node *p_node, HashSet<String> &checked_paths) {
Ref<SceneState> ss;

Expand Down Expand Up @@ -762,6 +819,15 @@ bool EditorData::reload_scene_from_memory(int p_idx, bool p_mark_unsaved) {
return true;
}

void EditorData::move_scene_to_index(int p_idx, int p_to_idx) {
ERR_FAIL_INDEX(p_idx, edited_scene.size());
ERR_FAIL_INDEX(p_to_idx, edited_scene.size());

EditedScene es = edited_scene[p_idx];
edited_scene.remove_at(p_idx);
edited_scene.insert(p_to_idx, es);
}

int EditorData::get_edited_scene() const {
return current_edited_scene;
}
Expand Down Expand Up @@ -792,19 +858,7 @@ Node *EditorData::get_edited_scene_root(int p_idx) {
}

void EditorData::set_edited_scene_root(Node *p_root) {
ERR_FAIL_INDEX(current_edited_scene, edited_scene.size());
edited_scene.write[current_edited_scene].root = p_root;
if (p_root) {
if (p_root->is_instance()) {
edited_scene.write[current_edited_scene].path = p_root->get_scene_file_path();
} else {
p_root->set_scene_file_path(edited_scene[current_edited_scene].path);
}
}

if (!edited_scene[current_edited_scene].path.is_empty()) {
edited_scene.write[current_edited_scene].file_modified_time = FileAccess::get_modified_time(edited_scene[current_edited_scene].path);
}
set_scene_root(current_edited_scene, p_root);
}

int EditorData::get_edited_scene_count() const {
Expand Down Expand Up @@ -852,9 +906,7 @@ void EditorData::move_edited_scene_to_index(int p_idx) {
ERR_FAIL_INDEX(current_edited_scene, edited_scene.size());
ERR_FAIL_INDEX(p_idx, edited_scene.size());

EditedScene es = edited_scene[current_edited_scene];
edited_scene.remove_at(current_edited_scene);
edited_scene.insert(p_idx, es);
move_scene_to_index(current_edited_scene, p_idx);
current_edited_scene = p_idx;
}

Expand Down
7 changes: 4 additions & 3 deletions editor/editor_data.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ class EditorData {

Dictionary get_editor_plugin_states() const;
Dictionary get_scene_editor_states(int p_idx) const;
Dictionary get_scene_editor_states_with_selection(int p_idx) const;
void set_editor_plugin_states(const Dictionary &p_states);
void get_editor_breakpoints(List<String> *p_breakpoints);
void clear_editor_states();
Expand All @@ -187,8 +188,6 @@ class EditorData {
void remove_move_array_element_function(const StringName &p_class);
Callable get_move_array_element_function(const StringName &p_class) const;

void save_editor_global_states();

void add_custom_type(const String &p_type, const String &p_inherits, const Ref<Script> &p_script, const Ref<Texture2D> &p_icon);
Variant instantiate_custom_type(const String &p_type, const String &p_inherits);
void remove_custom_type(const String &p_type);
Expand All @@ -200,8 +199,8 @@ class EditorData {
void instantiate_object_properties(Object *p_object);

int add_edited_scene(int p_at_pos);
void move_edited_scene_index(int p_idx, int p_to_idx);
void remove_scene(int p_idx);
void set_scene_root(int p_idx, Node *p_root);
void set_edited_scene(int p_idx);
void set_edited_scene_root(Node *p_root);
int get_edited_scene() const;
Expand All @@ -223,6 +222,7 @@ class EditorData {
NodePath get_edited_scene_live_edit_root();
bool check_and_update_scene(int p_idx);
bool reload_scene_from_memory(int p_idx, bool p_mark_unsaved);
void move_scene_to_index(int p_idx, int p_to_idx);
void move_edited_scene_to_index(int p_idx);

bool call_build();
Expand All @@ -242,6 +242,7 @@ class EditorData {
void notify_edited_scene_changed();
void notify_resource_saved(const Ref<Resource> &p_resource);
void notify_scene_saved(const String &p_path);
void load_editor_plugin_states_from_config(const Ref<ConfigFile> &p_config_file, int p_idx);

bool script_class_is_parent(const String &p_class, const String &p_inherits);
Variant script_class_instance(const String &p_class);
Expand Down
2 changes: 1 addition & 1 deletion editor/editor_interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ void EditorInterface::open_scene_from_path(const String &scene_path, bool p_set_
if (EditorNode::get_singleton()->is_changing_scene()) {
return;
}
EditorNode::get_singleton()->load_scene(scene_path, false, p_set_inherited);
EditorNode::get_singleton()->open_scene(scene_path, false, p_set_inherited);
}

void EditorInterface::reload_scene_from_path(const String &scene_path) {
Expand Down
Loading