浏览代码

Merge pull request #20977 from malbach/Particles3D_AABB

Particles3D: set emitting if not set before generating AABB
Rémi Verschelde 7 年之前
父节点
当前提交
78a6cd9e09
共有 1 个文件被更改,包括 18 次插入0 次删除
  1. 18 0
      editor/plugins/particles_editor_plugin.cpp

+ 18 - 0
editor/plugins/particles_editor_plugin.cpp

@@ -270,6 +270,12 @@ void ParticlesEditor::_menu_option(int p_option) {
 	switch (p_option) {
 	switch (p_option) {
 
 
 		case MENU_OPTION_GENERATE_AABB: {
 		case MENU_OPTION_GENERATE_AABB: {
+			float gen_time = node->get_lifetime();
+
+			if (gen_time < 1.0)
+				generate_seconds->set_value(1.0);
+			else
+				generate_seconds->set_value(trunc(gen_time) + 1.0);
 			generate_aabb->popup_centered_minsize();
 			generate_aabb->popup_centered_minsize();
 		} break;
 		} break;
 		case MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_MESH: {
 		case MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_MESH: {
@@ -323,7 +329,15 @@ void ParticlesEditor::_generate_aabb() {
 
 
 	EditorProgress ep("gen_aabb", TTR("Generating AABB"), int(time));
 	EditorProgress ep("gen_aabb", TTR("Generating AABB"), int(time));
 
 
+	bool was_emitting = node->is_emitting();
+	if (!was_emitting) {
+		node->set_emitting(true);
+		OS::get_singleton()->delay_usec(1000);
+	}
+
+	running = 0.0;
 	AABB rect;
 	AABB rect;
+
 	while (running < time) {
 	while (running < time) {
 
 
 		uint64_t ticks = OS::get_singleton()->get_ticks_usec();
 		uint64_t ticks = OS::get_singleton()->get_ticks_usec();
@@ -339,6 +353,10 @@ void ParticlesEditor::_generate_aabb() {
 		running += (OS::get_singleton()->get_ticks_usec() - ticks) / 1000000.0;
 		running += (OS::get_singleton()->get_ticks_usec() - ticks) / 1000000.0;
 	}
 	}
 
 
+	if (!was_emitting) {
+		node->set_emitting(false);
+	}
+
 	node->set_visibility_aabb(rect);
 	node->set_visibility_aabb(rect);
 }
 }