75 lines
3.0 KiB
GDScript
75 lines
3.0 KiB
GDScript
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!")
|