extends Area2D # Pastikan kamu sudah mengisi ini di Inspector dengan menarik file scene sniper-mu! @export_file("*.tscn") var sniper_scene_path: String var anim_player: AnimationPlayer = null var player_is_near = false func _ready(): # 🔍 CARA AMAN: Cari AnimationPlayer milik Stage Utama dari level atas # Kita cari node bernama "TransitionLayer/fade_to_black" di root scene yang sedang aktif var stage_utama = get_tree().current_scene if stage_utama: anim_player = stage_utama.get_node_or_null("TransitionLayer/fade_to_black") if anim_player: print("DIAGNOSTIK: Berhasil terhubung ke AnimationPlayer Transisi!") else: print("⚠️ DIAGNOSTIK: fade_to_black belum ditemukan. Pastikan namanya pas di root scene!") # Menghubungkan signal internal Area2D secara otomatis body_entered.connect(_on_body_entered) body_exited.connect(_on_body_exited) func _on_body_entered(body): if body.name == "Player": player_is_near = true print("DIAGNOSTIK: Di area sniping. Tekan F untuk masuk.") func _on_body_exited(body): if body.name == "Player": player_is_near = false print("DIAGNOSTIK: Keluar dari area sniping.") func _process(_delta): # Kita cek input di dalam _process agar lebih responsif if player_is_near and Input.is_action_just_pressed("interact"): if sniper_scene_path != "": print("BERHASIL: Interaksi terdeteksi. Memulai transisi...") # 🎵 BARU: CARI DAN FADE OUT KEDUA AUDIO MILIK STAGE UTAMA SECARA OTOMATIS var stage_utama = get_tree().current_scene if stage_utama: var audio1 = stage_utama.get_node_or_null("AudioStreamPlayer") var audio2 = stage_utama.get_node_or_null("AudioStreamPlayer2") # Ambil durasi fadeout dari variabel di skrip stage (jika tidak ada, 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 Sniping: Perintah Fade-Out dikirim ke kedua Audio Stage 1...") # 🎬 JALANKAN ANIMASI FADE OUT SEBELUM PINDAH SCENE if anim_player and anim_player.has_animation("fadeout"): anim_player.play("fadeout") print("🎬 Memutar animasi fadeout... Menunggu layar hitam pekat.") # Tunggu sampai animasi fadeout selesai bergulir await anim_player.animation_finished else: print("⚠️ Peringatan: Jalur salah atau animasi 'fadeout' tidak ditemukan, langsung pindah scene.") # 🚀 PINDAH KE SCENE SNIPER print("BERHASIL: Berpindah ke scene: ", sniper_scene_path) get_tree().change_scene_to_file(sniper_scene_path) else: print("ERROR: Sniper Scene Path masih kosong di Inspector!")