extends Area2D # πŸ—ΊοΈ Tentukan scene tujuan berikutnya langsung dari Inspector Area2D ini @export_file("*.tscn") var next_stage_path: String # 🎬 Ambil referensi ke AnimationPlayer transisi yang ada di Stage @onready var anim_player = $"../TransitionLayer/fade_to_black" # Variabel pengaman agar fungsi perpindahan tidak terpicu dua kali saat transisi berjalan var is_transitioning = false func _ready(): # Hubungkan sinyal internal Area2D secara otomatis body_entered.connect(_on_body_entered) func _on_body_entered(body): # Jika yang masuk adalah Player dan game sedang tidak dalam proses transisi if body.name == "Player" and not is_transitioning: if next_stage_path != "": eksekusi_fadeout_dan_pindah() else: # ⚠️ Pesan peringatan jika kamu lupa mengisi scene tujuan di Inspector print("❌ ERROR: Player sudah masuk area, tetapi 'next_stage_path' masih KOSONG di Inspector!") print("πŸ‘‰ Solusi: Klik node Area2D ini di Godot, lalu isi file scene tujuan di panel sebelah kanan.") func eksekusi_fadeout_dan_pindah(): is_transitioning = true # Kunci agar sensor tidak mendeteksi berulang kali print("BERHASIL: Player menyentuh area transisi otomatis. Menutup layar...") # 🎡 BARU: CARI DAN FADE OUT KEDUA AUDIO DI STAGE UTAMA (INDOK NODE) var stage_utama = $".." # Naik satu tingkat ke node root Stage 1_2 if stage_utama: var audio1 = stage_utama.get_node_or_null("AudioStreamPlayer") var audio2 = stage_utama.get_node_or_null("AudioStreamPlayer2") # Mengambil durasi fade out dari skrip Stage 1_2 (jika kosong, default 1.5 detik) var durasi_fade = stage_utama.get("DURASI_FADE_OUT") if stage_utama.get("DURASI_FADE_OUT") != null else 1.5 if audio1 and audio1.is_playing(): var tween1 = create_tween() tween1.tween_property(audio1, "volume_db", -80.0, durasi_fade).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN) if audio2 and audio2.is_playing(): var tween2 = create_tween() tween2.tween_property(audio2, "volume_db", -80.0, durasi_fade).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN) print("🎡 Sinyal Sensor: Musik latar Stage 1_2 mulai diredupkan (Fade-Out)...") # 🎬 Jalankan Fade Out Visual if anim_player and anim_player.has_animation("fadeout"): anim_player.play("fadeout") print("🎬 Memutar animasi fadeout... Menunggu layar hitam pekat.") await anim_player.animation_finished else: print("⚠️ Peringatan: Animasi 'fadeout' tidak ditemukan, langsung berganti scene!") # 🎡 Matikan audio sepenuhnya demi efisiensi memori setelah layar gelap gulita if stage_utama: var audio1 = stage_utama.get_node_or_null("AudioStreamPlayer") var audio2 = stage_utama.get_node_or_null("AudioStreamPlayer2") if audio1: audio1.stop() if audio2: audio2.stop() # πŸš€ Pindah Scene print("πŸš€ Berpindah ke scene berikutnya: ", next_stage_path) get_tree().change_scene_to_file(next_stage_path)