extends Area2D var player_didalam_area = null func _on_body_entered(body): print("Sesuatu masuk area: ", body.name) if body.is_in_group("pemain"): player_didalam_area = body print("PLAYER TERDETEKSI! Tekan interaksi untuk sembunyi...") func _on_body_exited(body): # --- PERBAIKAN DI SINI --- # Jika yang keluar adalah player, tapi dia keluar karena sedang SEMBUNYI (collision mati), # JANGAN hapus referensinya agar kita tetap bisa memproses tombol keluar (F). if body == player_didalam_area: if player_didalam_area.is_hiding: print("Sinyal: Collision Player dinonaktifkan, mempertahankan referensi untuk keluar.") return # Lewati pembersihan null print("Player keluar area secara normal.") player_didalam_area = null func _input(event): if not event.is_action_pressed("interact"): return if player_didalam_area == null: return print("Tombol interact ditekan!") toggle_hiding() func toggle_hiding(): if not player_didalam_area.is_hiding: # --- 1. MASUK SEMBUNYI --- player_didalam_area.is_hiding = true if has_node("CenterPos"): player_didalam_area.global_position = $CenterPos.global_position player_didalam_area.visible = false if player_didalam_area.has_node("CollisionShape2D"): player_didalam_area.get_node("CollisionShape2D").set_deferred("disabled", true) print("OUTPUT: Bersembunyi dan Collision dinonaktifkan...") else: # --- 2. KELUAR SEMBUNYI --- # Simpan referensi sementara sebelum variabel dibersihkan var p_node = player_didalam_area p_node.is_hiding = false p_node.visible = true if p_node.has_node("CollisionShape2D"): p_node.get_node("CollisionShape2D").set_deferred("disabled", false) # Karena sekarang dia sudah keluar, kita bersihkan referensinya secara manual player_didalam_area = null print("OUTPUT: Keluar dari persembunyian dan Collision aktif kembali!")