Thanks for the suggestions!
The TileMap solved half of my problems. With grid on board I was able to smooth the moving.
You and the commenter suggested using line/pathfinding algorithms and that's the thing I want to avoid.
What I came with is:
var targetpos = Vector2()
var unitpos = Vector2()
var speed = 100
func _input(event):
if event.is_action_released("rmb"):
target_pos = get_global_mouse_pos().snapped(Vector2(64,64))
func _process(delta):
if target_pos.x-unit_pos.x < 0:
set_pos(get_pos()+Vector2(-1,0)*speed*delta)
if target_pos.x-unit_pos.x > -1:
set_pos(get_global_pos().snapped(Vector2(64,0)))
if target_pos.x-unit_pos.x > 0:
set_pos(get_pos()+Vector2(1,0)*speed*delta)
if target_pos.x-unit_pos.x < 1:
set_pos(get_global_pos().snapped(Vector2(64,0)))
if target_pos.y-unit_pos.y < 0:
set_pos(get_pos()+Vector2(0,-1)*speed*delta)
if target_pos.y-unit_pos.y > -1:
set_pos(get_global_pos().snapped(Vector2(0,64)))
if target_pos.y-unit_pos.y > 0:
set_pos(get_pos()+Vector2(0,1)*speed*delta)
if target_pos.y-unit_pos.y < 1:
set_pos(get_global_pos().snapped(Vector2(0,64)))
if abs(target_pos.x-unit_pos.x) < 1 and abs(target_pos.y-unit_pos.y) < 1:
set_pos(target_pos)
unit_pos = get_global_pos()
Now, if someone could tell if it's Godot-proper?