67 lines
2.8 KiB
GDScript
67 lines
2.8 KiB
GDScript
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)
|