61 lines
1.8 KiB
GDScript
61 lines
1.8 KiB
GDScript
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!")
|