瀏覽代碼

Merge pull request #54115 from Rubonnek/fix-40310

[3.x] Do not fire VisibilityNotifier `screen_entered` and `screen_exited` signals in the Editor
Rémi Verschelde 2 年之前
父節點
當前提交
bd7141db3f
共有 1 個文件被更改,包括 22 次插入0 次删除
  1. 22 0
      scene/3d/visibility_notifier.cpp

+ 22 - 0
scene/3d/visibility_notifier.cpp

@@ -147,13 +147,25 @@ void VisibilityNotifier::_notification(int p_what) {
 			ERR_FAIL_COND(!world.is_valid());
 
 			AABB world_aabb = get_global_transform().xform(aabb);
+#ifdef TOOLS_ENABLED
+			if (!Engine::get_singleton()->is_editor_hint()) {
+				world->_register_notifier(this, world_aabb);
+			}
+#else
 			world->_register_notifier(this, world_aabb);
+#endif
 			_world_aabb_center = world_aabb.get_center();
 			_refresh_portal_mode();
 		} break;
 		case NOTIFICATION_TRANSFORM_CHANGED: {
 			AABB world_aabb = get_global_transform().xform(aabb);
+#ifdef TOOLS_ENABLED
+			if (!Engine::get_singleton()->is_editor_hint()) {
+				world->_update_notifier(this, world_aabb);
+			}
+#else
 			world->_update_notifier(this, world_aabb);
+#endif
 			if (_max_distance_active) {
 				_world_aabb_center = world_aabb.get_center();
 			}
@@ -164,7 +176,13 @@ void VisibilityNotifier::_notification(int p_what) {
 		} break;
 		case NOTIFICATION_EXIT_WORLD: {
 			ERR_FAIL_COND(!world.is_valid());
+#ifdef TOOLS_ENABLED
+			if (!Engine::get_singleton()->is_editor_hint()) {
+				world->_remove_notifier(this);
+			}
+#else
 			world->_remove_notifier(this);
+#endif
 
 			if (_cull_instance_rid != RID()) {
 				VisualServer::get_singleton()->ghost_set_scenario(_cull_instance_rid, RID(), get_instance_id(), AABB());
@@ -294,9 +312,11 @@ void VisibilityEnabler::_find_nodes(Node *p_node) {
 
 void VisibilityEnabler::_notification(int p_what) {
 	if (p_what == NOTIFICATION_ENTER_TREE) {
+#ifdef TOOLS_ENABLED
 		if (Engine::get_singleton()->is_editor_hint()) {
 			return;
 		}
+#endif
 
 		Node *from = this;
 		//find where current scene starts
@@ -308,9 +328,11 @@ void VisibilityEnabler::_notification(int p_what) {
 	}
 
 	if (p_what == NOTIFICATION_EXIT_TREE) {
+#ifdef TOOLS_ENABLED
 		if (Engine::get_singleton()->is_editor_hint()) {
 			return;
 		}
+#endif
 
 		for (Map<Node *, Variant>::Element *E = nodes.front(); E; E = E->next()) {
 			if (!visible) {