MIF_E31230535/titikbom.gd

95 lines
3.3 KiB
GDScript

extends Area2D
# --- 🛠️ PRELOAD CETAKAN TUTORIAL UTAMA ---
const TUTORIAL_SCENE = preload("res://tutorial.tscn")
@export var waktu_kabur: float = 30.0 # Waktu bagi player untuk lari (30 detik)
@onready var sprite_bom: Sprite2D = $nobel808
var player_didalam_area: Node2D = null
var bom_sudah_dispang: bool = false # Mempertahankan penulisan variabel bawaanmu
var bom_sudah_dipasang: bool = false
var timer_aktif: bool = false
var sisa_waktu: float = 0.0
# 🛠️ BARU: Pengaman agar tutorial pasang bom hanya muncul sekali saja
var tutorial_bom_sudah_muncul: bool = false
func _ready() -> void:
# Memastikan bom tidak terlihat saat scene dimulai
if sprite_bom:
sprite_bom.visible = false
func _on_body_entered(body: Node2D) -> void:
if body.is_in_group("pemain") and not bom_sudah_dipasang:
player_didalam_area = body
print("💣 Titik pemasangan peledak ditemukan! Tekan interaksi untuk memasang Nobel's 808...")
# 🛠️ BARU: Picu tutorial pasang bom saat player mendeteksi titik ini pertama kali
if not tutorial_bom_sudah_muncul:
pemicu_tutorial_titik_bom()
func _on_body_exited(body: Node2D) -> void:
if body == player_didalam_area:
player_didalam_area = null
func _input(event: InputEvent) -> void:
if not event.is_action_pressed("interact"):
return
if player_didalam_area == null or bom_sudah_dipasang:
return
# Jalankan fungsi pasang bom
pasang_bom()
func pasang_bom() -> void:
bom_sudah_dipasang = true
bom_sudah_dispang = true # Sinkronisasi failsafe variabel bawaan
# 1. Munculkan sprite bom seolah-olah tertempel di mesin
if sprite_bom:
sprite_bom.visible = true
# 2. KUNCI UTAMA: Potong paksa timer global menjadi tinggal 15 detik!
Globaltimer.sisa_waktu = 15.0
Globaltimer.mulai_timer() # Memastikan timer global tetap berjalan
print("💥 Nobel's 808 terpasang! Detonator 'Time Pencil' diaktifkan!")
print("🚨 OVERRIDE: Waktu meledak dipercepat menjadi 15 DETIK! RUN, WAYAN, RUN!!")
# --- 🛠️ FUNGSI BARU: MEMUNCULKAN TUTORIAL DESAIN B0M ---
func pemicu_tutorial_titik_bom() -> void:
tutorial_bom_sudah_muncul = true # Kunci saklar agar tidak berulang
print("💡 Player menemukan posisi peledak, memunculkan instruksi Nobel's 808...")
var tutorial_instance = TUTORIAL_SCENE.instantiate()
# Sesuai pesanan teks darimu, Wayan!
tutorial_instance.teks_panduan = "Ini titik yang sempurna! Tekan tombol 'Interact' untuk memasang bom dan segeralah kabur!"
# Lempar ke scene root agar membekukan gameplay
get_tree().current_scene.add_child(tutorial_instance)
func _process(delta: float) -> void:
# Logika hitung mundur global setelah bom terpasang
if timer_aktif:
sisa_waktu -= delta
print("⏰ BOM AKAN MELEDAK DALAM: ", snp(sisa_waktu, 1), " DETIK!")
# Jika waktu habis dan player belum sampai pintu keluar... GAME OVER!
if sisa_waktu <= 0.0:
timer_aktif = false
eksekusi_ledakan_bunker()
func snp(nilai: float, tempat: int) -> float:
return round(nilai * pow(10, tempat)) / pow(10, tempat)
func eksekusi_ledakan_bunker() -> void:
print("💥💥💥 BOOM!!! Seluruh bunker meledak rata dengan tanah! 💥💥💥")
# Di sini kamu bisa panggil fungsi Player mati atau memicu layar Game Over (Kalah)
if player_didalam_area:
if player_didalam_area.has_method("terima_damage"):
player_didalam_area.terima_damage(999) # Instakill jika masih di dalam map