diff options
Diffstat (limited to 'demos/3d')
-rw-r--r-- | demos/3d/polygon_path_finder/engine.cfg | 5 | ||||
-rw-r--r-- | demos/3d/polygon_path_finder/icon.png | bin | 0 -> 712 bytes | |||
-rw-r--r-- | demos/3d/polygon_path_finder/poly_with_holes.scn | bin | 0 -> 2974 bytes | |||
-rw-r--r-- | demos/3d/polygon_path_finder/polygonpathfinder.gd | 77 |
4 files changed, 82 insertions, 0 deletions
diff --git a/demos/3d/polygon_path_finder/engine.cfg b/demos/3d/polygon_path_finder/engine.cfg new file mode 100644 index 0000000000..47450408af --- /dev/null +++ b/demos/3d/polygon_path_finder/engine.cfg @@ -0,0 +1,5 @@ +[application] + +name="Polygon Pathfinder" +main_scene="res://poly_with_holes.scn" +icon="res://icon.png" diff --git a/demos/3d/polygon_path_finder/icon.png b/demos/3d/polygon_path_finder/icon.png Binary files differnew file mode 100644 index 0000000000..643f5595ee --- /dev/null +++ b/demos/3d/polygon_path_finder/icon.png diff --git a/demos/3d/polygon_path_finder/poly_with_holes.scn b/demos/3d/polygon_path_finder/poly_with_holes.scn Binary files differnew file mode 100644 index 0000000000..6b340377b7 --- /dev/null +++ b/demos/3d/polygon_path_finder/poly_with_holes.scn diff --git a/demos/3d/polygon_path_finder/polygonpathfinder.gd b/demos/3d/polygon_path_finder/polygonpathfinder.gd new file mode 100644 index 0000000000..1e843043da --- /dev/null +++ b/demos/3d/polygon_path_finder/polygonpathfinder.gd @@ -0,0 +1,77 @@ + +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() |