Explorar el Código

Ensure process notification is received only if really enabled, fixes #7894

Juan Linietsky hace 7 años
padre
commit
15db793ef2
Se han modificado 3 ficheros con 15 adiciones y 1 borrados
  1. 12 1
      scene/main/node.cpp
  2. 1 0
      scene/main/node.h
  3. 2 0
      scene/main/scene_tree.cpp

+ 12 - 1
scene/main/node.cpp

@@ -240,7 +240,7 @@ void Node::_propagate_enter_tree() {
 
 void Node::_propagate_exit_tree() {
 
-	//block while removing children
+//block while removing children
 
 #ifdef DEBUG_ENABLED
 
@@ -725,6 +725,17 @@ const Map<StringName, MultiplayerAPI::RPCMode>::Element *Node::get_node_rset_mod
 	return data.rpc_properties.find(p_property);
 }
 
+bool Node::can_process_notification(int p_what) const {
+	switch (p_what) {
+		case NOTIFICATION_PHYSICS_PROCESS: return data.physics_process;
+		case NOTIFICATION_PROCESS: return data.idle_process;
+		case NOTIFICATION_INTERNAL_PROCESS: return data.idle_process_internal;
+		case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: return data.physics_process_internal;
+	}
+
+	return true;
+}
+
 bool Node::can_process() const {
 
 	ERR_FAIL_COND_V(!is_inside_tree(), false);

+ 1 - 0
scene/main/node.h

@@ -364,6 +364,7 @@ public:
 	void set_pause_mode(PauseMode p_mode);
 	PauseMode get_pause_mode() const;
 	bool can_process() const;
+	bool can_process_notification(int p_what) const;
 
 	void request_ready();
 

+ 2 - 0
scene/main/scene_tree.cpp

@@ -951,6 +951,8 @@ void SceneTree::_notify_group_pause(const StringName &p_group, int p_notificatio
 
 		if (!n->can_process())
 			continue;
+		if (!n->can_process_notification(p_notification))
+			continue;
 
 		n->notification(p_notification);
 		//ERR_FAIL_COND(node_count != g.nodes.size());