Prechádzať zdrojové kódy

:beetle: Fix crash destroyed before particles completed

DricomDragon 1 rok pred
rodič
commit
47b2900946

+ 17 - 2
godot/effect/crash/crash.gd

@@ -2,5 +2,20 @@ class_name CrashEffect
 extends Node3D
 
 
-func _on_noise_finished():
-	queue_free()
+var _noise_finished: bool = false
+var _splash_finished: bool = false
+
+
+func _on_noise_finished() -> void:
+	_noise_finished = true
+	_die_if_completed()
+
+
+func _on_splash_finished() -> void:
+	_splash_finished = true
+	_die_if_completed()
+
+
+func _die_if_completed() -> void:
+	if _noise_finished and _splash_finished:
+		queue_free()

+ 2 - 1
godot/effect/crash/crash.tscn

@@ -28,7 +28,7 @@ script = ExtResource("1_8bcl0")
 [node name="Noise" type="AudioStreamPlayer3D" parent="."]
 script = ExtResource("1_xh8ax")
 
-[node name="GPUParticles3D" type="GPUParticles3D" parent="."]
+[node name="Splash" type="GPUParticles3D" parent="."]
 emitting = false
 one_shot = true
 explosiveness = 1.0
@@ -37,3 +37,4 @@ draw_pass_1 = SubResource("SphereMesh_f2rrx")
 script = ExtResource("3_mi21g")
 
 [connection signal="finished" from="Noise" to="." method="_on_noise_finished"]
+[connection signal="finished" from="Splash" to="." method="_on_splash_finished"]

+ 9 - 0
godot/effect/crash/splash_gfx.gd

@@ -1,5 +1,14 @@
 extends GPUParticles3D
 
 
+signal finished
+
+
 func _ready() -> void:
 	set_emitting(true)
+	var emission_timer: SceneTreeTimer = get_tree().create_timer(get_lifetime(), false, true)
+	emission_timer.timeout.connect(_on_emission_ended)
+
+
+func _on_emission_ended() -> void:
+	finished.emit()