MIF_E31230535/npc.gd

41 lines
1.5 KiB
GDScript

extends Node2D # Boleh juga pakai CharacterBody2D karena tidak pakai collision
@onready var animasi: AnimationPlayer = $animasi
func _ready() -> void:
# Saat pertama kali muncul, pastikan animasi berhenti atau diam
if animasi:
animasi.stop()
# 🏃‍♂️ FUNGSI UTAMA: Dipanggil dari skrip Stage untuk menyuruh NPC bergerak
func gerak_ke_posisi(posisi_tujuan: Vector2, durasi: float) -> void:
if not animasi:
print("⚠️ Peringatan: AnimationPlayer bernama 'animasi' tidak ditemukan!")
return
print("🚶‍♂️ NPC diperintah bergerak ke: ", posisi_tujuan, " selama ", durasi, " detik.")
# 1. Mainkan animasi jalanmu (yang bernama "idle")
if animasi.has_animation("idle"):
animasi.play("idle")
# 2. Atur arah hadap (flip visual) berdasarkan posisi tujuan
# Jika visual NPC kamu dibungkus dalam node bernama 'Visual' atau 'Sprite2D',
# sesuaikan bagian scale.x ini dengan struktur nodemu ya.
if posisi_tujuan.x > global_position.x:
scale.x = abs(scale.x) # Hadap kanan
else:
scale.x = -abs(scale.x) # Hadap kiri
# 3. Gerakkan NPC menggunakan Tween agar mulus dan tembus objek
var tween = create_tween()
tween.tween_property(self, "global_position", posisi_tujuan, durasi).set_trans(Tween.TRANS_LINEAR)
# 4. Begitu sampai di tujuan, hentikan animasi jalan
tween.finished.connect(_on_gerak_selesai)
func _on_gerak_selesai() -> void:
print("🛑 NPC sudah sampai di tujuan.")
if animasi:
animasi.stop() # Hentikan animasi karena sudah sampai