extends Area2D # --- đŸ› ī¸ PRELOAD CETAKAN TUTORIAL UTAMA --- const TUTORIAL_SCENE = preload("res://tutorial.tscn") @export var waktu_peretasan: float = 3.0 # Durasi interaksi (3 detik) var player_didalam_area: Node2D = null var sedang_meretas: bool = false var timer_peretasan: float = 0.0 var sistem_sudah_mati: bool = false # 📊 AMBIL REFERENSI NODE PROGRESS BAR KAMU @onready var progress_bar = $ProgressBar # đŸ› ī¸ BARU: Pengaman agar tutorial petunjuk sabotase hanya muncul sekali saja var tutorial_sudah_muncul: bool = false func _ready() -> void: # Pengingat: Hubungkan sinyal body_entered dan body_exited di tab Node (Editor) ya! # 📊 Sembunyikan dan atur nilai awal Progress Bar saat game dimulai if progress_bar: progress_bar.visible = false progress_bar.max_value = waktu_peretasan progress_bar.value = 0.0 else: print("âš ī¸ Peringatan: Node 'ProgressBar' tidak ditemukan di bawah Area2D!") func _on_body_entered(body: Node2D) -> void: # Jika player masuk dan sistem keamanan belum dimatikan if body.is_in_group("pemain") and not sistem_sudah_mati: player_didalam_area = body print("đŸŽ›ī¸ Panel Kontrol ditemukan! Tekan interaksi untuk mematikan pertahanan radar & laut Jerman...") # đŸ› ī¸ BARU: Picu tutorial sabotase saat player mendekati area panel pertama kali if not tutorial_sudah_muncul: pemicu_tutorial_sabotase() func _on_body_exited(body: Node2D) -> void: if body == player_didalam_area: player_didalam_area = null # Antispasi jika player membatalkan proses di tengah jalan dengan keluar area if sedang_meretas: sedang_meretas = false timer_peretasan = 0.0 # 📊 Sembunyikan dan reset progress bar saat keluar area if progress_bar: progress_bar.visible = false progress_bar.value = 0.0 print("❌ Proses dihentikan! Aliran data radar gagal diputus karena Player menjauh.") func _input(event: InputEvent) -> void: if not event.is_action_pressed("interact"): return # Jika player tidak ada di area ATAU sistem sudah sukses dimatikan, abaikan semua tombol if player_didalam_area == null or sistem_sudah_mati: return # Logika start / cancel interaksi if not sedang_meretas: sedang_meretas = true timer_peretasan = 0.0 # 📊 Mulai hitung dari 0 detik maju ke depan # 📊 Tampilkan progress bar saat mulai meretas if progress_bar: progress_bar.value = 0.0 progress_bar.visible = true print("📡 Memulai peretasan sistem radar... Mohon tunggu.") else: sedang_meretas = false timer_peretasan = 0.0 # 📊 Sembunyikan kembali jika dibatalkan manual if progress_bar: progress_bar.visible = false progress_bar.value = 0.0 print("âšī¸ Peretasan dibatalkan manual oleh Player.") # --- đŸ› ī¸ FUNGSI BARU: INSTANSIASI INDIKATOR PANDUAN SABOTASE --- func pemicu_tutorial_sabotase() -> void: tutorial_sudah_muncul = true # Kunci saklar agar tidak terulang print("💡 Player menemukan panel, memunculkan informasi taktis pangkalan militer...") var tutorial_instance = TUTORIAL_SCENE.instantiate() # Sesuai pesanan teks instruksi darimu, Wayan! tutorial_instance.teks_panduan = "Panel kontrol persenjataan pangkalan militer ditemukan. Sabotase panel ini dengan menekan tombol 'Interact' guna memudahkan pasukan sekutu mendekati pesisir Normandia!" # Masukkan ke root scene aktif agar membekukan jalannya gameplay utama get_tree().current_scene.add_child(tutorial_instance) func _process(delta: float) -> void: # Jalankan hitung maju hanya jika player sedang menekan interaksi if sedang_meretas and not sistem_sudah_mati: timer_peretasan += delta # 📊 Akumulasi waktu berjalan maju # 📊 Perbarui isi bar secara real-time if progress_bar: progress_bar.value = timer_peretasan print("âŗ Mengunduh enkripsi & mematikan radar... Sisa waktu: ", snp(waktu_peretasan - timer_peretasan, 1), " detik.") # Sukses setelah mencapai batas waktu_peretasan (3 detik) if timer_peretasan >= waktu_peretasan: sedang_meretas = false sistem_sudah_mati = true # 📊 Sembunyikan setelah sukses terisi penuh if progress_bar: progress_bar.visible = false eksekusi_sistem_padam() # Fungsi pembantu untuk membulatkan angka desimal di output func snp(nilai: float, tempat: int) -> float: return round(nilai * pow(10, tempat)) / pow(10, tempat) func eksekusi_sistem_padam() -> void: print("đŸŸĸ [SUKSES] Sistem Pertahanan Udara (Flak) dan Radar Pantai Jerman di Normandia telah NONAKTIF!") print("đŸ“ĸ OUTPUT: Kapal dan pesawat Sekutu sekarang bisa mendekat tanpa terdeteksi oleh bunker ini!") # Mengunci Area2D agar tidak bisa memicu sinyal atau mendeteksi player lagi monitoring = false monitorable = false