extends Node # provides all the utility functions for generating # a triangulized Polygon with holes class_name GeoPolyTriangulization # triangles are made by 3 vector const CHUNK_RESULT: int = 3 # the boundary polygon var _outer_polygon: Polygon2D # inner polygons (holes) var _inner_polygons: Array[Polygon2D] # all vector points defined by outer and inner polygons var vectors: PackedVector2Array = [] var _edge_safety: float = 0.0 func _init(outer_polygon: Polygon2D, inner_polygons: Array[Polygon2D], edge_safety: float): self._outer_polygon = outer_polygon self._inner_polygons = inner_polygons self._edge_safety = edge_safety # create a polygon that will be used to intesect the hole and control where they can destoy the wall var intersect_polygon = Polygon2D.new() # calulate the new smaller polygon intersect_polygon.polygon = Geometry2D.offset_polygon(outer_polygon.polygon, self._edge_safety)[0] print(intersect_polygon.polygon) for ip in inner_polygons: var new_hole = Geometry2D.intersect_polygons(intersect_polygon.polygon, ip.polygon)[0] ip.polygon = new_hole self.vectors.append_array(self._outer_polygon.polygon) for inner_polygon in self._inner_polygons: self.vectors.append_array(inner_polygon.polygon) # returns all triangles generated by ear clipping the outer and inner polygons func triangulate() -> PackedInt32Array: var triag = Triangulization.new() return triag.triangulate_with_holes(self._outer_polygon, self._inner_polygons)