71 lines
2.7 KiB
GDScript
71 lines
2.7 KiB
GDScript
extends Area2D
|
|
|
|
# Tarik file scene (.tscn) tujuan kamu ke slot ini lewat Inspector
|
|
@export_file("*.tscn") var scene_tujuan: String = "res://ruanganjaga.tscn"
|
|
|
|
var player_didalam_area: Node2D = null
|
|
|
|
func _ready() -> void:
|
|
# Hubungkan sinyal body_entered dan body_exited di tab Node (Editor) seperti biasa ya
|
|
pass
|
|
|
|
func _on_body_entered(body: Node2D) -> void:
|
|
if body.is_in_group("pemain"):
|
|
player_didalam_area = body
|
|
print("🚪 Pintu ruangan ditemukan! Tekan interaksi untuk masuk...")
|
|
|
|
func _on_body_exited(body: Node2D) -> void:
|
|
if body == player_didalam_area:
|
|
player_didalam_area = null
|
|
print("Player menjauh dari pintu.")
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
# Jika tombol yang ditekan bukan tombol interaksi, abaikan
|
|
if not event.is_action_pressed("interact"):
|
|
return
|
|
|
|
# Keamanan: Jika player tidak berada di depan pintu ini, jangan proses kodenya
|
|
if player_didalam_area == null:
|
|
return
|
|
|
|
# --- PROSES TRANSISI PINTU DIMULAI ---
|
|
print("🚪 Player berinteraksi dengan pintu!")
|
|
|
|
# 🎵 BARU: CARI DAN FADE OUT AUDIO PANGGUNG UTAMA LEWAT JALUR MUTLAK
|
|
var stage_node = get_node_or_null("/root/Node2D")
|
|
if stage_node:
|
|
var audio1 = stage_node.get_node_or_null("AudioStreamPlayer")
|
|
var audio2 = stage_node.get_node_or_null("AudioStreamPlayer2")
|
|
|
|
# Ambil durasi durasi fade out dari variabel di stage (atau set manual 1.5 detik)
|
|
var durasi_fade = stage_node.get("DURASI_FADE_OUT") if stage_node.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 Pintu: Perintah Fade-Out dikirim ke kedua Audio panggung...")
|
|
|
|
# SOLUSI SAKTI VISUAL: Panggil transisi layar hitam
|
|
if get_node_or_null("/root/Node2D/TransitionLayer/fade_to_black"):
|
|
var anim_player = get_node("/root/Node2D/TransitionLayer/fade_to_black")
|
|
|
|
anim_player.play("fadeout")
|
|
print("🎬 Memutar animasi fadeout...")
|
|
|
|
# Tunggu sampai animasinya selesai berjalan
|
|
await anim_player.animation_finished
|
|
else:
|
|
print("⚠️ Peringatan: Jalur /root/Node2D/TransitionLayer/fade_to_black tidak ditemukan!")
|
|
|
|
# Setelah layar gelap dan audio senyap murni karena fadeout, baru pindah scene!
|
|
print("🚪 Membuka pintu, memuat scene baru...")
|
|
var error_code = get_tree().change_scene_to_file(scene_tujuan)
|
|
|
|
if error_code != OK:
|
|
print("❌ Gagal pindah scene! Periksa apakah path file sudah benar: ", scene_tujuan)
|