54 lines
1.9 KiB
GDScript
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")
|