MIF_E31230535/hidingspot.gd

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!")