34 lines
812 B
GDScript

extends KinematicBody
export(NodePath) var player_path
export(float) var speed
var _current_nav_path: PoolVector3Array
var _player
onready var _navigation = get_parent()
func _ready():
_player = get_node(player_path)
func _process(delta):
var to = _navigation.get_closest_point(_player.transform.origin)
_current_nav_path = _navigation.get_simple_path(transform.origin, to)
var dir: Vector3
if _current_nav_path.size() > 0:
var index = 0
if (_current_nav_path[0] - transform.origin).length() < 0.1: index = 1
dir = (_current_nav_path[index] - transform.origin).normalized()
else:
dir = (_player.transform.origin - transform.origin).normalized()
if (dir.x != 0.0 and dir.z != 0.0):
look_at(transform.origin + Vector3(dir.x, 0.0, dir.z), Vector3.UP)
move_and_slide(dir * speed)