Merge pull request #1206 from ScyDev/feature/polygonpathfinder_demo
- how to use PolygonPathFinder from GD Script
This commit is contained in:
commit
8075512bc5
6 changed files with 90 additions and 0 deletions
4
demos/2d/polygon_path_finder_demo/.fscache
Normal file
4
demos/2d/polygon_path_finder_demo/.fscache
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
::res://::1421147952
|
||||||
|
icon.png::ImageTexture::1420046079::
|
||||||
|
new_scene_poly_with_holes.scn::PackedScene::1421147952::
|
||||||
|
polygonpathfinder.gd::GDScript::1421146502::
|
5
demos/2d/polygon_path_finder_demo/engine.cfg
Normal file
5
demos/2d/polygon_path_finder_demo/engine.cfg
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[application]
|
||||||
|
|
||||||
|
name="polygon_path_finder_demo"
|
||||||
|
main_scene="res://new_scene_poly_with_holes.scn"
|
||||||
|
icon="icon.png"
|
BIN
demos/2d/polygon_path_finder_demo/icon.png
Normal file
BIN
demos/2d/polygon_path_finder_demo/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
1
demos/2d/polygon_path_finder_demo/icon.png.flags
Normal file
1
demos/2d/polygon_path_finder_demo/icon.png.flags
Normal file
|
@ -0,0 +1 @@
|
||||||
|
gen_mipmaps=true
|
BIN
demos/2d/polygon_path_finder_demo/new_scene_poly_with_holes.scn
Normal file
BIN
demos/2d/polygon_path_finder_demo/new_scene_poly_with_holes.scn
Normal file
Binary file not shown.
80
demos/2d/polygon_path_finder_demo/polygonpathfinder.gd
Normal file
80
demos/2d/polygon_path_finder_demo/polygonpathfinder.gd
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
|
||||||
|
extends Spatial
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
var pf = PolygonPathFinder.new()
|
||||||
|
|
||||||
|
var points = Vector2Array()
|
||||||
|
var connections = IntArray()
|
||||||
|
|
||||||
|
# poly 1
|
||||||
|
points.push_back(Vector2(0, 0)) #0
|
||||||
|
points.push_back(Vector2(10, 0)) #1
|
||||||
|
points.push_back(Vector2(10, 10)) #2
|
||||||
|
points.push_back(Vector2(0, 10)) #3
|
||||||
|
|
||||||
|
connections.push_back(0) # connect vertex 0 ...
|
||||||
|
connections.push_back(1) # ... to 1
|
||||||
|
drawLine(points[0], points[1], get_node("/root/Spatial/Polys"))
|
||||||
|
connections.push_back(1) # connect vertex 1 ...
|
||||||
|
connections.push_back(2) # ... to 2
|
||||||
|
drawLine(points[1], points[2], get_node("/root/Spatial/Polys"))
|
||||||
|
connections.push_back(2) # etc.
|
||||||
|
connections.push_back(3)
|
||||||
|
drawLine(points[2], points[3], get_node("/root/Spatial/Polys"))
|
||||||
|
connections.push_back(3) # connect vertex 3 ...
|
||||||
|
connections.push_back(0) # back to vertex 0, to close the polygon
|
||||||
|
drawLine(points[3], points[0], get_node("/root/Spatial/Polys"))
|
||||||
|
|
||||||
|
# poly 2, as obstacle inside poly 1
|
||||||
|
points.push_back(Vector2(2, 0.5)) #4
|
||||||
|
points.push_back(Vector2(4, 0.5)) #5
|
||||||
|
points.push_back(Vector2(4, 9.5)) #6
|
||||||
|
points.push_back(Vector2(2, 9.5)) #7
|
||||||
|
|
||||||
|
connections.push_back(4)
|
||||||
|
connections.push_back(5)
|
||||||
|
drawLine(points[4], points[5], get_node("/root/Spatial/Polys"))
|
||||||
|
connections.push_back(5)
|
||||||
|
connections.push_back(6)
|
||||||
|
drawLine(points[5], points[6], get_node("/root/Spatial/Polys"))
|
||||||
|
connections.push_back(6)
|
||||||
|
connections.push_back(7)
|
||||||
|
drawLine(points[6], points[7], get_node("/root/Spatial/Polys"))
|
||||||
|
connections.push_back(7)
|
||||||
|
connections.push_back(4)
|
||||||
|
drawLine(points[7], points[4], get_node("/root/Spatial/Polys"))
|
||||||
|
|
||||||
|
|
||||||
|
print("points: ",points)
|
||||||
|
print("connections: ",connections)
|
||||||
|
|
||||||
|
pf.setup(points, connections)
|
||||||
|
|
||||||
|
var path = pf.find_path(Vector2(1, 5), Vector2(8, 5))
|
||||||
|
|
||||||
|
var lastStep = null
|
||||||
|
print("path: ",path)
|
||||||
|
for step in path:
|
||||||
|
print("step: ",step)
|
||||||
|
if (lastStep != null):
|
||||||
|
var currPathSegment = Vector2Array()
|
||||||
|
drawLine(lastStep, step, get_node("/root/Spatial/Path"))
|
||||||
|
lastStep = step
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func drawLine(pointA, pointB, immediateGeo):
|
||||||
|
var drawPosY = 0.1
|
||||||
|
var im = immediateGeo
|
||||||
|
|
||||||
|
im.begin(Mesh.PRIMITIVE_POINTS, null)
|
||||||
|
im.add_vertex(Vector3(pointA.x, drawPosY, pointA.y))
|
||||||
|
im.add_vertex(Vector3(pointB.x, drawPosY, pointB.y))
|
||||||
|
im.end()
|
||||||
|
im.begin(Mesh.PRIMITIVE_LINE_STRIP, null)
|
||||||
|
im.add_vertex(Vector3(pointA.x, drawPosY, pointA.y))
|
||||||
|
im.add_vertex(Vector3(pointB.x, drawPosY, pointB.y))
|
||||||
|
im.end()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue