Table of Contents

Class GBGeometryMath

Namespace
GridPlacement.GDScript
Assembly
MoonBark.GridPlacement.GDScript.dll

Geometry & collision math utilities for the grid building addon.\n\nProvides compact, well-documented helper functions used across the addon for tile/polygon overlap and collision tasks. Main responsibilities include: - Computing polygon vs polygon intersection areas (uses Godot Geometry2D). - Producing tile polygons for square and isometric tiles and testing polygon overlaps against tiles (area-based and optimized native collision checks). - Converting various Shape2D types to polygon approximations for geometry processing (Rectangle, Circle, Capsule, ConvexPolygon, fallback to rect). - Utility helpers: axis-aligned rectangle detection and polygon bounding rect.\n\nNote: TILE SHAPE ENFORCEMENT: All functions use TileSet.TileShape enum values.[br] Use: TileSet.TILE_SHAPE_SQUARE, TileSet.TILE_SHAPE_ISOMETRIC, TileSet.TILE_SHAPE_HALF_OFFSET_SQUARE [br] Do NOT use: integers (0, 1, 2) or strings ("square", "isometric", etc.)

class GBGeometryMath
GBGeometryMath

Properties

intersection

var intersection = Geometry2D.intersect_polygons(poly_a, poly_b)

area

var area: float = 0.0

poly_area

var poly_area: float = 0.0

j

var j = (i + 1) % n

half_w

var half_w = tile_size.x / 2.0

half_h

var half_h = tile_size.y / 2.0

tile_poly

var tile_poly = get_tile_polygon(tile_top_left_pos, tile_size, tile_shape)

area

var area: float = 0.0

area

var area: float = 0.0

tile_rect_shape

var tile_rect_shape: RectangleShape2D = RectangleShape2D.new()

tile_transform

var tile_transform = Transform2D(0, tile_top_left_pos + tile_size * 0.5)

native_result

var native_result: bool = shape.collide(shape_transform, tile_rect_shape, tile_transform)

shape_polygon

var shape_polygon = convert_shape_to_polygon(shape, shape_transform)

shape_polygon

var shape_polygon = convert_shape_to_polygon(shape, shape_transform)

bounds

var bounds = get_polygon_bounds(polygon)

rect_shape

var rect_shape = shape as RectangleShape2D

rect_transform

var rect_transform = Transform2D(0, bounds.position + bounds.size * 0.5)

p1

var p1 = polygon[i]

p2

var p2 = polygon[(i + 1) % 4]

diff

var diff = p2 - p1

min_pos

var min_pos = polygon[0]

max_pos

var max_pos = polygon[0]

polygon

var polygon: PackedVector2Array = PackedVector2Array()

rect_shape

var rect_shape = shape as RectangleShape2D

size

var size = rect_shape.size

circle_shape

var circle_shape = shape as CircleShape2D

radius

var radius = capsule_shape.radius

segments

var segments = 24

angle

var angle = (i * PI / (segments/2))

point

var point = Vector2(cos(angle) * radius, sin(angle) * radius + bottom_center_y)

capsule_shape

var capsule_shape = shape as CapsuleShape2D

radius

var radius = capsule_shape.radius

height

var height = capsule_shape.height

segments

var segments = 24

half_height

var half_height = height / 2.0

top_center_y

var top_center_y = -(half_height - radius)

bottom_center_y

var bottom_center_y = half_height - radius

angle

var angle = (i * PI / (segments/2))

point

var point = Vector2(cos(angle) * radius, sin(angle) * radius + bottom_center_y)

angle

var angle = (i * PI / (segments/2))

point

var point = Vector2(cos(angle) * radius, sin(angle) * radius + bottom_center_y)

convex_shape

var convex_shape = shape as ConvexPolygonShape2D

rect

var rect = shape.get_rect()

area

var area: float = 0.0

n

var n = points.size()

j

var j = (i + 1) % n

close

var close = true

min_tile

var min_tile = tile_poly[0]

max_tile

var max_tile = tile_poly[0]

tile_rect

var tile_rect = Rect2(min_tile, max_tile - min_tile)

min_poly

var min_poly = polygon[0]

max_poly

var max_poly = polygon[0]

poly_rect

var poly_rect = Rect2(min_poly, max_poly - min_poly)

intersection_rect

var intersection_rect = tile_rect.intersection(poly_rect)

intersection_area

var intersection_area = intersection_rect.size.x * intersection_rect.size.y

overlap_x

var overlap_x = (

overlap_y

var overlap_y = (

Methods

polygon_intersection_area

static func polygon_intersection_area(poly_a: PackedVector2Array, poly_b: PackedVector2Array) -> float:

Parameters

poly_a
poly_b

Returns

get_tile_polygon

static func get_tile_polygon(tile_top_left_pos: Vector2, tile_size: Vector2, tile_shape: TileSet.TileShape) -> PackedVector2Array:

Parameters

tile_top_left_pos
tile_size
tile_shape

Returns

intersection_area_with_tile

static func intersection_area_with_tile(polygon: PackedVector2Array, tile_top_left_pos: Vector2, tile_size: Vector2, tile_shape: TileSet.TileShape) -> float:

Parameters

polygon
tile_top_left_pos
tile_size
tile_shape

Returns

does_polygon_overlap_tile

static func does_polygon_overlap_tile(polygon: PackedVector2Array, tile_top_left_pos: Vector2, tile_size: Vector2, tile_shape: TileSet.TileShape, epsilon: float) -> bool:

Parameters

polygon
tile_top_left_pos
tile_size
tile_shape
epsilon

Returns

does_shape_overlap_tile_optimized

static func does_shape_overlap_tile_optimized(shape: Shape2D, shape_transform: Transform2D, tile_top_left_pos: Vector2, tile_size: Vector2, tile_shape: TileSet.TileShape, epsilon: float = 0.01) -> bool:

Parameters

shape
shape_transform
tile_top_left_pos
tile_size
tile_shape
epsilon

Returns

does_polygon_overlap_tile_optimized

static func does_polygon_overlap_tile_optimized(polygon: PackedVector2Array, tile_top_left_pos: Vector2, tile_size: Vector2, tile_shape: TileSet.TileShape, epsilon: float = 0.01) -> bool:

Parameters

polygon
tile_top_left_pos
tile_size
tile_shape
epsilon

Returns

get_polygon_bounds

static func get_polygon_bounds(polygon: PackedVector2Array) -> Rect2:

Parameters

polygon

Returns

convert_shape_to_polygon

static func convert_shape_to_polygon(shape: Shape2D, transform: Transform2D) -> PackedVector2Array:

Parameters

shape
transform

Returns

intersection_polygon_area

static func intersection_polygon_area(points: PackedVector2Array) -> float:

Parameters

points

Returns

is_exact_polygon_match

static func is_exact_polygon_match(poly_a: PackedVector2Array, poly_b: PackedVector2Array) -> bool:

Parameters

poly_a
poly_b

Returns

exact_polygon_area

static func exact_polygon_area(poly: PackedVector2Array) -> float:

Parameters

poly

Returns

isometric_floating_point_fallback

static func isometric_floating_point_fallback( tile_poly: PackedVector2Array, polygon: PackedVector2Array

square_bounding_box_fallback

static func square_bounding_box_fallback( tile_poly: PackedVector2Array, polygon: PackedVector2Array