diff options
author | Juan Linietsky <reduzio@gmail.com> | 2015-02-14 12:09:52 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2015-02-14 12:10:15 -0300 |
commit | c5f509f238576dba39ffcce74ab2066f24e67b58 (patch) | |
tree | 888a1bc97d9fdf303a663e626599f74fb268dbff /demos | |
parent | d0ea4754057663d2caefbabe32421fd597a8a15d (diff) |
New Navigation & Pathfinding support for 2D
-Added Navigation & NavigationPolygon nodes
-Added corresponding visual editor
-New pathfinding algorithm is modern and fast!
-Similar API to 3D Pathfinding (more coherent)
Diffstat (limited to 'demos')
-rw-r--r-- | demos/2d/navpoly/agent.png | bin | 0 -> 2508 bytes | |||
-rw-r--r-- | demos/2d/navpoly/engine.cfg | 4 | ||||
-rw-r--r-- | demos/2d/navpoly/navigation.gd | 63 | ||||
-rw-r--r-- | demos/2d/navpoly/navigation.scn | bin | 0 -> 3471 bytes | |||
-rw-r--r-- | demos/2d/navpoly/path.png | bin | 0 -> 309506 bytes |
5 files changed, 67 insertions, 0 deletions
diff --git a/demos/2d/navpoly/agent.png b/demos/2d/navpoly/agent.png Binary files differnew file mode 100644 index 0000000000..23e396c478 --- /dev/null +++ b/demos/2d/navpoly/agent.png diff --git a/demos/2d/navpoly/engine.cfg b/demos/2d/navpoly/engine.cfg new file mode 100644 index 0000000000..51eefd7b77 --- /dev/null +++ b/demos/2d/navpoly/engine.cfg @@ -0,0 +1,4 @@ +[application] + +name="Navigation Polygon (2D)" +main_scene="res://navigation.scn" 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 + + diff --git a/demos/2d/navpoly/navigation.scn b/demos/2d/navpoly/navigation.scn Binary files differnew file mode 100644 index 0000000000..c116d10ae2 --- /dev/null +++ b/demos/2d/navpoly/navigation.scn diff --git a/demos/2d/navpoly/path.png b/demos/2d/navpoly/path.png Binary files differnew file mode 100644 index 0000000000..52a6d507c3 --- /dev/null +++ b/demos/2d/navpoly/path.png |