extends Node # --- VARIABEL GLOBAL --- var scene_terakhir_player: String = "" # Waktu total Stage 2 (5 menit = 300 detik) var sisa_waktu: float = 300.0 var timer_berjalan: bool = false func _process(delta: float) -> void: if timer_berjalan: sisa_waktu -= delta if sisa_waktu <= 0.0: sisa_waktu = 0.0 timer_berjalan = false eksekusi_game_over() func mulai_timer() -> void: timer_berjalan = true func hentikan_timer() -> void: timer_berjalan = false # --- FUNGSI EKSEKUSI KEMATIAN KARENA WAKTU HABIS (DIPERBAIKI) --- func eksekusi_game_over() -> void: print("💥 WAKTU HABIS! Operasi Sabotase Gagal Total! 💥") # 1. Cari node Player di scene yang sedang aktif saat ini var scene_aktif = get_tree().current_scene var player_node = null if is_instance_valid(scene_aktif): # Cari berdasarkan nama node "Player" di seluruh hierarki level player_node = scene_aktif.find_child("Player", true, false) # Failsafe: Jika tidak ketemu lewat nama, cari berdasarkan grup "pemain" if player_node == null: var daftar_pemain = get_tree().get_nodes_in_group("pemain") if daftar_pemain.size() > 0: player_node = daftar_pemain[0] # 2. Kurangi nyawa player sampai habis (100 Damage) if is_instance_valid(player_node): if player_node.has_method("terima_damage"): print("💀 Menguras HP Player secara instant akibat kehabisan waktu...") player_node.terima_damage(100) else: # Failsafe jika fungsi terima_damage bermasalah, paksa langsung ganti scene print("⚠️ Peringatan: Player ditemukan tapi tidak punya fungsi 'terima_damage'. Memaksa pindah scene...") get_tree().change_scene_to_file("res://gameover.tscn") else: # Jika Player memang tidak ada di scene (misal di Main Menu), langsung pindah scene saja print("⚠️ Peringatan: Node Player tidak ditemukan di scene aktif saat waktu habis.") get_tree().change_scene_to_file("res://gameover.tscn")