Bladeren bron

Avoid error spam when (un)pausing GPUParticles out of tree

Yuri Sizov 2 jaren geleden
bovenliggende
commit
991f4d5183
2 gewijzigde bestanden met toevoegingen van 17 en 13 verwijderingen
  1. 6 4
      scene/2d/gpu_particles_2d.cpp
  2. 11 9
      scene/3d/gpu_particles_3d.cpp

+ 6 - 4
scene/2d/gpu_particles_2d.cpp

@@ -551,10 +551,12 @@ void GPUParticles2D::_notification(int p_what) {
 
 		case NOTIFICATION_PAUSED:
 		case NOTIFICATION_UNPAUSED: {
-			if (can_process()) {
-				RS::get_singleton()->particles_set_speed_scale(particles, speed_scale);
-			} else {
-				RS::get_singleton()->particles_set_speed_scale(particles, 0);
+			if (is_inside_tree()) {
+				if (can_process()) {
+					RS::get_singleton()->particles_set_speed_scale(particles, speed_scale);
+				} else {
+					RS::get_singleton()->particles_set_speed_scale(particles, 0);
+				}
 			}
 		} break;
 

+ 11 - 9
scene/3d/gpu_particles_3d.cpp

@@ -417,15 +417,6 @@ NodePath GPUParticles3D::get_sub_emitter() const {
 
 void GPUParticles3D::_notification(int p_what) {
 	switch (p_what) {
-		case NOTIFICATION_PAUSED:
-		case NOTIFICATION_UNPAUSED: {
-			if (can_process()) {
-				RS::get_singleton()->particles_set_speed_scale(particles, speed_scale);
-			} else {
-				RS::get_singleton()->particles_set_speed_scale(particles, 0);
-			}
-		} break;
-
 		// Use internal process when emitting and one_shot is on so that when
 		// the shot ends the editor can properly update.
 		case NOTIFICATION_INTERNAL_PROCESS: {
@@ -450,6 +441,17 @@ void GPUParticles3D::_notification(int p_what) {
 			RS::get_singleton()->particles_set_subemitter(particles, RID());
 		} break;
 
+		case NOTIFICATION_PAUSED:
+		case NOTIFICATION_UNPAUSED: {
+			if (is_inside_tree()) {
+				if (can_process()) {
+					RS::get_singleton()->particles_set_speed_scale(particles, speed_scale);
+				} else {
+					RS::get_singleton()->particles_set_speed_scale(particles, 0);
+				}
+			}
+		} break;
+
 		case NOTIFICATION_VISIBILITY_CHANGED: {
 			// Make sure particles are updated before rendering occurs if they were active before.
 			if (is_visible_in_tree() && !RS::get_singleton()->particles_is_inactive(particles)) {