extends Navigation2D # Member variables const SPEED = 200.0 var begin = Vector2() var end = Vector2() var path = [] func _process(delta): if path.size() > 1: var to_walk = delta * SPEED while to_walk > 0 and path.size() >= 2: var pfrom = path[path.size() - 1] var pto = path[path.size() - 2] var d = pfrom.distance_to(pto) if d <= to_walk: path.remove(path.size() - 1) to_walk -= d else: path[path.size() - 1] = pfrom.linear_interpolate(pto, to_walk/d) to_walk = 0 var atpos = path[path.size() - 1] $agent.position = atpos if path.size() < 2: path = [] set_process(false) else: set_process(false) func _update_path(): var p = get_simple_path(begin, end, true) path = Array(p) # PoolVector2Array too complex to use, convert to regular array path.invert() set_process(true) func _input(event): if event is InputEventMouseButton and event.pressed and event.button_index == 1: begin = $agent.position # Mouse to local navigation coordinates end = event.position - position _update_path()