extends Sprite var speed : = 400.0 var path : = PoolVector2Array() setget set_path func _ready() -> void: set_process(false) func _process(delta: float) -> void: var move_distance : = speed * delta move_along_path(move_distance) func move_along_path(distance : float) -> void: var last_point : = position for index in range(path.size()): var distance_to_next = last_point.distance_to(path[0]) if distance <= distance_to_next: position = last_point.linear_interpolate(path[0], distance / distance_to_next) break if path.size() == 1: position = path[0] set_process(false) break distance -= distance_to_next last_point = path[0] path.remove(0) pass func set_path(value : PoolVector2Array) -> void: if value.size() == 0: return path = value path.remove(0) set_process(true)