Forráskód Böngészése

Add a warning for when the scene root node is transformed

Aaron Franke 2 éve
szülő
commit
e1429cd7d3
2 módosított fájl, 24 hozzáadás és 3 törlés
  1. 23 3
      editor/gui/scene_tree_editor.cpp
  2. 1 0
      editor/gui/scene_tree_editor.h

+ 23 - 3
editor/gui/scene_tree_editor.cpp

@@ -55,6 +55,27 @@ Node *SceneTreeEditor::get_scene_node() const {
 	return get_tree()->get_edited_scene_root();
 }
 
+PackedStringArray SceneTreeEditor::_get_node_configuration_warnings(Node *p_node) {
+	PackedStringArray warnings = p_node->get_configuration_warnings();
+	if (p_node == get_scene_node()) {
+		Node2D *node_2d = Object::cast_to<Node2D>(p_node);
+		if (node_2d) {
+			// Note: Warn for Node2D but not all CanvasItems, don't warn for Control nodes.
+			// Control nodes may have reasons to use a transformed root node like anchors.
+			if (!node_2d->get_transform().is_equal_approx(Transform2D())) {
+				warnings.append(TTR("The root node of a scene is recommended to not be transformed, since instances of the scene will usually override this. Reset the transform and reload the scene to remove this warning."));
+			}
+		}
+		Node3D *node_3d = Object::cast_to<Node3D>(p_node);
+		if (node_3d) {
+			if (!node_3d->get_transform().is_equal_approx(Transform3D())) {
+				warnings.append(TTR("The root node of a scene is recommended to not be transformed, since instances of the scene will usually override this. Reset the transform and reload the scene to remove this warning."));
+			}
+		}
+	}
+	return warnings;
+}
+
 void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_id, MouseButton p_button) {
 	if (p_button != MouseButton::LEFT) {
 		return;
@@ -129,7 +150,7 @@ void SceneTreeEditor::_cell_button_pressed(Object *p_item, int p_column, int p_i
 		}
 		undo_redo->commit_action();
 	} else if (p_id == BUTTON_WARNING) {
-		const PackedStringArray warnings = n->get_configuration_warnings();
+		const PackedStringArray warnings = _get_node_configuration_warnings(n);
 
 		if (warnings.is_empty()) {
 			return;
@@ -451,8 +472,7 @@ void SceneTreeEditor::_update_node(Node *p_node, TreeItem *p_item, bool p_part_o
 	}
 
 	if (can_rename) { // TODO Should be can edit..
-
-		const PackedStringArray warnings = p_node->get_configuration_warnings();
+		const PackedStringArray warnings = _get_node_configuration_warnings(p_node);
 		const int num_warnings = warnings.size();
 		if (num_warnings > 0) {
 			StringName warning_icon;

+ 1 - 0
editor/gui/scene_tree_editor.h

@@ -134,6 +134,7 @@ class SceneTreeEditor : public Control {
 
 	void _compute_hash(Node *p_node, uint64_t &hash);
 	void _reset();
+	PackedStringArray _get_node_configuration_warnings(Node *p_node);
 
 	void _update_node_path(Node *p_node, bool p_recursive = true);
 	void _update_node_subtree(Node *p_node, TreeItem *p_parent, bool p_force = false);