MIF_E31230535/globaltimer.gd

54 lines
1.9 KiB
GDScript

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")