| 645 | } |
| 646 | |
| 647 | void EditorData::remove_scene(int p_idx) { |
| 648 | ERR_FAIL_INDEX(p_idx, edited_scene.size()); |
| 649 | if (edited_scene[p_idx].root) { |
| 650 | for (int i = 0; i < editor_plugins.size(); i++) { |
| 651 | editor_plugins[i]->notify_scene_closed(edited_scene[p_idx].root->get_scene_file_path()); |
| 652 | } |
| 653 | |
| 654 | memdelete(edited_scene[p_idx].root); |
| 655 | edited_scene.write[p_idx].root = nullptr; |
| 656 | } |
| 657 | |
| 658 | if (current_edited_scene > p_idx) { |
| 659 | current_edited_scene--; |
| 660 | } else if (current_edited_scene == p_idx && current_edited_scene > 0) { |
| 661 | current_edited_scene--; |
| 662 | } |
| 663 | |
| 664 | if (!edited_scene[p_idx].path.is_empty()) { |
| 665 | EditorNode::get_singleton()->emit_signal("scene_closed", edited_scene[p_idx].path); |
| 666 | } |
| 667 | |
| 668 | if (undo_redo_manager->has_history(edited_scene[p_idx].history_id)) { // Might not exist if scene failed to load. |
| 669 | undo_redo_manager->discard_history(edited_scene[p_idx].history_id); |
| 670 | } |
| 671 | edited_scene.remove_at(p_idx); |
| 672 | } |
| 673 | |
| 674 | bool EditorData::_find_updated_instances(Node *p_root, Node *p_node, HashSet<String> &checked_paths) { |
| 675 | Ref<SceneState> ss; |
no test coverage detected