38 lines
984 B
GDScript
38 lines
984 B
GDScript
extends Object
|
|
|
|
class_name UTIL
|
|
|
|
# chunks array into 'chunk_size' pieces
|
|
static func chunk_array(arr: Array, chunk_size: int) -> Array:
|
|
var result_chunks = []
|
|
var i = 0
|
|
while i < arr.size():
|
|
var chunk = arr.slice(i, i + chunk_size)
|
|
result_chunks.append(chunk)
|
|
i += chunk_size
|
|
return result_chunks
|
|
|
|
static func vector2_to_vector3(v: Vector2) -> Vector3:
|
|
return Vector3(v.x, v.y, 0)
|
|
|
|
static func get_bounding_rect(vectors: PackedVector2Array) -> Rect2:
|
|
if vectors.is_empty():
|
|
return Rect2()
|
|
|
|
var rect := Rect2(vectors[0], Vector2.ZERO) # Initialize with the first point
|
|
for point in vectors:
|
|
rect = rect.expand(point)
|
|
|
|
# The 'position' of the Rect2 will be the minimum corner
|
|
return rect
|
|
|
|
static func get_polygon_area(vectors: PackedVector2Array) -> float:
|
|
var result := 0.0
|
|
var num_vertices := vectors.size()
|
|
|
|
for q in range(num_vertices):
|
|
var p = (q - 1 + num_vertices) % num_vertices
|
|
result += vectors[q].cross(vectors[p])
|
|
|
|
return abs(result * 0.5)
|