diff options
Diffstat (limited to 'demos/2d/navpoly/navigation.gd')
-rw-r--r-- | demos/2d/navpoly/navigation.gd | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/demos/2d/navpoly/navigation.gd b/demos/2d/navpoly/navigation.gd new file mode 100644 index 0000000000..9c3dc2921d --- /dev/null +++ b/demos/2d/navpoly/navigation.gd @@ -0,0 +1,63 @@ + +extends Navigation2D + +# member variables here, example: +# var a=2 +# var b="textvar" +var begin=Vector2() +var end=Vector2() +var path=[] + +const SPEED=200.0 + +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] + get_node("agent").set_pos(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) # Vector2array to complex to use, convert to regular array + path.invert() + + set_process(true) + + +func _input(ev): + if (ev.type==InputEvent.MOUSE_BUTTON and ev.pressed and ev.button_index==1): + begin=get_node("agent").get_pos() + #mouse to local navigatio cooards + end=ev.pos - get_pos() + _update_path() + +func _ready(): + # Initialization here + set_process_input(true) + pass + + |