浏览代码

Merge pull request #49819 from nekomatata/fix-process-mode-inherit

Rémi Verschelde 4 年之前
父节点
当前提交
583eaa9869
共有 2 个文件被更改,包括 12 次插入6 次删除
  1. 11 6
      scene/main/node.cpp
  2. 1 0
      scene/main/scene_tree.cpp

+ 11 - 6
scene/main/node.cpp

@@ -70,7 +70,9 @@ void Node::_notification(int p_notification) {
 				if (data.parent) {
 				if (data.parent) {
 					data.process_owner = data.parent->data.process_owner;
 					data.process_owner = data.parent->data.process_owner;
 				} else {
 				} else {
-					data.process_owner = nullptr;
+					ERR_PRINT("The root node can't be set to Inherit process mode, reverting to Pausable instead.");
+					data.process_mode = PROCESS_MODE_PAUSABLE;
+					data.process_owner = this;
 				}
 				}
 			} else {
 			} else {
 				data.process_owner = this;
 				data.process_owner = this;
@@ -436,18 +438,18 @@ void Node::set_process_mode(ProcessMode p_mode) {
 	bool prev_can_process = can_process();
 	bool prev_can_process = can_process();
 	bool prev_enabled = _is_enabled();
 	bool prev_enabled = _is_enabled();
 
 
-	data.process_mode = p_mode;
-
-	if (data.process_mode == PROCESS_MODE_INHERIT) {
+	if (p_mode == PROCESS_MODE_INHERIT) {
 		if (data.parent) {
 		if (data.parent) {
-			data.process_owner = data.parent->data.owner;
+			data.process_owner = data.parent->data.process_owner;
 		} else {
 		} else {
-			data.process_owner = nullptr;
+			ERR_FAIL_MSG("The root node can't be set to Inherit process mode.");
 		}
 		}
 	} else {
 	} else {
 		data.process_owner = this;
 		data.process_owner = this;
 	}
 	}
 
 
+	data.process_mode = p_mode;
+
 	bool next_can_process = can_process();
 	bool next_can_process = can_process();
 	bool next_enabled = _is_enabled();
 	bool next_enabled = _is_enabled();
 
 
@@ -702,6 +704,9 @@ bool Node::_can_process(bool p_paused) const {
 		process_mode = data.process_mode;
 		process_mode = data.process_mode;
 	}
 	}
 
 
+	// The owner can't be set to inherit, must be a bug.
+	ERR_FAIL_COND_V(process_mode == PROCESS_MODE_INHERIT, false);
+
 	if (process_mode == PROCESS_MODE_DISABLED) {
 	if (process_mode == PROCESS_MODE_DISABLED) {
 		return false;
 		return false;
 	} else if (process_mode == PROCESS_MODE_ALWAYS) {
 	} else if (process_mode == PROCESS_MODE_ALWAYS) {

+ 1 - 0
scene/main/scene_tree.cpp

@@ -1322,6 +1322,7 @@ SceneTree::SceneTree() {
 	// Create with mainloop.
 	// Create with mainloop.
 
 
 	root = memnew(Window);
 	root = memnew(Window);
+	root->set_process_mode(Node::PROCESS_MODE_PAUSABLE);
 	root->set_name("root");
 	root->set_name("root");
 #ifndef _3D_DISABLED
 #ifndef _3D_DISABLED
 	if (!root->get_world_3d().is_valid()) {
 	if (!root->get_world_3d().is_valid()) {