extends Node2D # --- 🛠️ PRELOAD CETAKAN TUTORIAL UTAMA --- const TUTORIAL_SCENE = preload("res://tutorial.tscn") @onready var player = $Player @onready var anim_player = $TransitionLayer/fade_to_black # ============================================================================== # 🎛️ SETELAN AUDIO MANUAL STAGE 1 (UBAH DI SINI) # ============================================================================== var VOLUME_AUDIO_1: float = -5.0 var VOLUME_AUDIO_2: float = -0.0 var DURASI_FADE_IN_1: float = 3.0 var DURASI_FADE_IN_2: float = 2.0 var DURASI_FADE_OUT: float = 1.5 # ============================================================================== @onready var audio_player_1 = $AudioStreamPlayer @onready var audio_player_2 = $AudioStreamPlayer2 # 🛠️ BARU: Variabel pengaman agar area tutorial stealth hanya aktif sekali saja var stealth_tutorial_sudah_dipicu: bool = false func _ready(): player.SPEED = 500 # 🎬 MEMULAI ANIMASI FADE IN SAAT STAGE 1 PERTAMA KALI DIMUAT if anim_player and anim_player.has_animation("fadein"): anim_player.play("fadein") print("🎬 Stage 1 Dimulai: Memutar animasi fadein...") else: print("⚠️ Peringatan: AnimationPlayer atau animasi 'fadein' tidak ditemukan di Stage 1!") # 🎵 SISTEM FADE IN OTOMATIS AUDIO 1 if audio_player_1: if audio_player_1.stream and audio_player_1.stream is AudioStreamOggVorbis: audio_player_1.stream.loop = true audio_player_1.volume_db = -80.0 audio_player_1.play() var tween1 = create_tween() tween1.tween_property(audio_player_1, "volume_db", VOLUME_AUDIO_1, DURASI_FADE_IN_1)\ .set_trans(Tween.TRANS_QUAD)\ .set_ease(Tween.EASE_OUT) # 🎵 SISTEM FADE IN OTOMATIS AUDIO 2 if audio_player_2: if audio_player_2.stream and audio_player_2.stream is AudioStreamOggVorbis: audio_player_2.stream.loop = true audio_player_2.volume_db = -80.0 audio_player_2.play() var tween2 = create_tween() tween2.tween_property(audio_player_2, "volume_db", VOLUME_AUDIO_2, DURASI_FADE_IN_2)\ .set_trans(Tween.TRANS_QUAD)\ .set_ease(Tween.EASE_OUT) print("🎵 Kedua Audio di Stage 1 berhasil diputar dengan efek Fade-In terpisah!") # 🛠️ BARU: FUNGSI TRIGGER SAAT PLAYER MASUK KE AREA2D TUTORIAL STEALTH func _on_tutorial_area_body_entered(body: Node2D) -> void: # Memastikan yang masuk grup pemain, belum pernah aktif, dan game sedang jalan if body.is_in_group("pemain") and not stealth_tutorial_sudah_dipicu: stealth_tutorial_sudah_dipicu = true # Kunci area agar tidak bisa meledak lagi print("💡 Player mendekati musuh pertama. Memunculkan tutorial stealth takedown...") var tutorial_instance = TUTORIAL_SCENE.instantiate() # Masukkan teks narasi dan panduan tombol mekanik sergap belakang tutorial_instance.teks_panduan = "Ada prajurit musuh didepanmu! Jalanmu kini terhalang.\n\nTutorial:\nDekati musuh dari belakang, kemudian klik tombol 'Interact' untuk menghabisi diam-diam!" # Munculkan ke rumpun adegan aktif (Otomatis mem-pause game via Engine.time_scale di dalam tutorial.gd) get_tree().current_scene.add_child(tutorial_instance)