extends Area2D # Atur jumlah damage langsung dari Inspector jika suatu saat ingin kamu ubah @export var damage_ranjau: int = 35 var sudah_meledak: bool = false # Ambil referensi AnimationPlayer di dalam scene ranjau @onready var anim_player = $AnimationPlayer # 🔌 AMBIL REFERENSI SPRITE LEDAKAN @onready var sprite_ledakan = $ledakan # 🔌 AMBIL REFERENSI SEMUA VISUAL FISIK RANJAU KAMU @onready var sprite_awal = $Sprite2D # Sprite2D pertama @onready var sprite_2d2 = $Sprite2D2 # Sprite2D2 (yang di dalamnya ada 2d3) # 🎵 BARU: REFERENSI NODE AUDIO UNTUK SUARA LEDAKAN @onready var audio_ledakan = $AudioStreamPlayer func _ready() -> void: # Hubungkan sinyal ketika ada objek yang masuk ke area ranjau body_entered.connect(_on_body_entered) # Pastikan sprite ledakan mati saat game pertama kali dimulai if sprite_ledakan: sprite_ledakan.visible = false # Pastikan semua bodi fisik ranjau menyala di awal game if sprite_awal: sprite_awal.visible = true if sprite_2d2: sprite_2d2.visible = true # Memulai animasi berkedip sejak awal game if anim_player and anim_player.has_animation("kedip"): anim_player.play("kedip") print("🚨 Ranjau aktif dan lampu indikator mulai berkedip.") func _on_body_entered(body: Node2D) -> void: # Pastikan yang menginjak adalah Player dan ranjau belum meledak if (body.name == "Player" or body.is_in_group("pemain")) and not sudah_meledak: sudah_meledak = true print("💥 Ranjau Terinjak! Memulai sekuens ledakan...") # Jalankan sekuens ledakan eksekusi_ledakan(body) func eksekusi_ledakan(player_node: Node2D) -> void: # 🩸 1. INSTAN: KURANGI NYAWA PLAYER SEKETIKA if player_node.has_method("terima_damage"): player_node.terima_damage(damage_ranjau) print("💥 INSTAN: Ranjau memicu fungsi terima_damage sebesar ", damage_ranjau) elif "health" in player_node: player_node.health -= damage_ranjau # 🎵 BARU: PICU AUDIO LEDAKAN SEBELUM FISIK DIHILANGKAN if audio_ledakan: audio_ledakan.play() print("🔊 SFX: Menggelegar! Suara ledakan ranjau diputar.") # 💥 2. HAPUS SEMUA FISIK BOM SEKALIGUS (Sprite2D, Sprite2D2, dan Sprite2D3 otomatis lenyap) if sprite_awal: sprite_awal.visible = false if sprite_2d2: sprite_2d2.visible = false print("🚫 SEMUA fisik bom (Sprite2D, 2d2, dan 2d3) resmi dihilangkan!") # 🎬 3. HIDUPKAN SPRITE LEDAKAN & MAINKAN ANIMASINYA if sprite_ledakan: sprite_ledakan.visible = true if anim_player and anim_player.has_animation("ledakan"): anim_player.play("ledakan") print("🎆 Memutar animasi ledakan ranjau...") # Menunggu efek visual ledakan selesai terputar sebelum menghapus scene await anim_player.animation_finished else: await get_tree().create_timer(0.4).timeout # 🗑️ 4. HAPUS TOTAL SCENE RANJAU DARI MAP queue_free()