Browse Source

Respect visibility change by Scene dock when using Sync Scene Changes

volzhs 7 years ago
parent
commit
4833cfd549
2 changed files with 16 additions and 30 deletions
  1. 16 29
      editor/scene_tree_editor.cpp
  2. 0 1
      editor/scene_tree_editor.h

+ 16 - 29
editor/scene_tree_editor.cpp

@@ -198,8 +198,18 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i
 
 
 	} else if (p_id == BUTTON_VISIBILITY) {
 	} else if (p_id == BUTTON_VISIBILITY) {
 		undo_redo->create_action(TTR("Toggle Visible"));
 		undo_redo->create_action(TTR("Toggle Visible"));
-		undo_redo->add_do_method(this, "toggle_visible", n);
-		undo_redo->add_undo_method(this, "toggle_visible", n);
+		_toggle_visible(n);
+		List<Node *> selection = editor_selection->get_selected_node_list();
+		if (selection.size() > 1) {
+			for (List<Node *>::Element *E = selection.front(); E; E = E->next()) {
+				Node *nv = E->get();
+				ERR_FAIL_COND(!nv);
+				if (nv == n) {
+					continue;
+				}
+				_toggle_visible(nv);
+			}
+		}
 		undo_redo->commit_action();
 		undo_redo->commit_action();
 	} else if (p_id == BUTTON_LOCK) {
 	} else if (p_id == BUTTON_LOCK) {
 
 
@@ -247,31 +257,10 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i
 }
 }
 
 
 void SceneTreeEditor::_toggle_visible(Node *p_node) {
 void SceneTreeEditor::_toggle_visible(Node *p_node) {
-	if (p_node->is_type("Spatial")) {
-		bool v = !bool(p_node->call("is_hidden"));
-		p_node->call("_set_visible_", !v);
-	} else if (p_node->is_type("CanvasItem")) {
-		bool v = bool(p_node->call("is_visible"));
-		if (v) {
-			p_node->call("hide");
-		} else {
-			p_node->call("show");
-		}
-	}
-}
-
-void SceneTreeEditor::toggle_visible(Node *p_node) {
-	_toggle_visible(p_node);
-	List<Node *> selection = editor_selection->get_selected_node_list();
-	if (selection.size() > 1) {
-		for (List<Node *>::Element *E = selection.front(); E; E = E->next()) {
-			Node *nv = E->get();
-			ERR_FAIL_COND(!nv);
-			if (nv == p_node) {
-				continue;
-			}
-			_toggle_visible(nv);
-		}
+	if (p_node->has_method("is_hidden") && p_node->has_method("set_hidden")) {
+		bool v = bool(p_node->call("is_hidden"));
+		undo_redo->add_do_method(p_node, "set_hidden", !v);
+		undo_redo->add_undo_method(p_node, "set_hidden", v);
 	}
 	}
 }
 }
 
 
@@ -1078,8 +1067,6 @@ void SceneTreeEditor::_bind_methods() {
 	ObjectTypeDB::bind_method("_subscene_option", &SceneTreeEditor::_subscene_option);
 	ObjectTypeDB::bind_method("_subscene_option", &SceneTreeEditor::_subscene_option);
 	ObjectTypeDB::bind_method("_rmb_select", &SceneTreeEditor::_rmb_select);
 	ObjectTypeDB::bind_method("_rmb_select", &SceneTreeEditor::_rmb_select);
 	ObjectTypeDB::bind_method("_warning_changed", &SceneTreeEditor::_warning_changed);
 	ObjectTypeDB::bind_method("_warning_changed", &SceneTreeEditor::_warning_changed);
-	ObjectTypeDB::bind_method("_toggle_visible", &SceneTreeEditor::_toggle_visible);
-	ObjectTypeDB::bind_method("toggle_visible", &SceneTreeEditor::toggle_visible);
 
 
 	ObjectTypeDB::bind_method("_node_script_changed", &SceneTreeEditor::_node_script_changed);
 	ObjectTypeDB::bind_method("_node_script_changed", &SceneTreeEditor::_node_script_changed);
 	ObjectTypeDB::bind_method("_node_visibility_changed", &SceneTreeEditor::_node_visibility_changed);
 	ObjectTypeDB::bind_method("_node_visibility_changed", &SceneTreeEditor::_node_visibility_changed);

+ 0 - 1
editor/scene_tree_editor.h

@@ -81,7 +81,6 @@ class SceneTreeEditor : public Control {
 	int blocked;
 	int blocked;
 
 
 	void _compute_hash(Node *p_node, uint64_t &hash);
 	void _compute_hash(Node *p_node, uint64_t &hash);
-	void toggle_visible(Node *p_node);
 
 
 	bool _add_nodes(Node *p_node, TreeItem *p_parent);
 	bool _add_nodes(Node *p_node, TreeItem *p_parent);
 	void _test_update_tree();
 	void _test_update_tree();