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