diff --git a/nodes/wall_renderer.gd b/nodes/wall_renderer.gd index e9ed6bc..6fdb6e3 100644 --- a/nodes/wall_renderer.gd +++ b/nodes/wall_renderer.gd @@ -25,8 +25,16 @@ const TOP_RIGHT_RECT := Rect2(53, 0, 50, 20) const BOTTOM_LEFT_RECT := Rect2(103, 186, 50, 20) const BOTTOM_RIGHT_RECT := Rect2(53, 186, 50, 20) +# -- Inner corners (drawn where two perpendicular wall edges meet) -- +const INNER_CORNER_UPPER_LEFT_RECT := Rect2(0, 0, 50, 50) +const INNER_CORNER_UPPER_RIGHT_RECT := Rect2(156, 0, 50, 50) +const INNER_CORNER_LOWER_LEFT_RECT := Rect2(0, 156, 50, 50) +const INNER_CORNER_LOWER_RIGHT_RECT := Rect2(156, 156, 50, 50) + ## Wall thickness in game pixels (how far the border extends into the tile) const WALL_THICKNESS := 20.0 +## Inner corner piece size in game pixels (quarter of a tile) +const CORNER_SIZE := 50.0 ## Half the tile edge length const HALF_EDGE := TILE_SIZE / 2.0 @@ -175,8 +183,36 @@ func _draw_outer_corners(_tile: Vector2i, _tile_origin: Vector2, _edges: Array) pass -func _draw_inner_corners(_tile: Vector2i, _tile_origin: Vector2, _edges: Array) -> void: - # TODO: Implement inner corner segments for non-rectangular rooms - # Check diagonal neighbors where both adjacent cardinal neighbors are floor - # but the diagonal is a wall/void. - pass +func _draw_inner_corners(_tile: Vector2i, tile_origin: Vector2, edges: Array) -> void: + ## Draws decorative corner pieces wherever two perpendicular wall edges meet + ## on the same tile (e.g., a top wall + left wall produces an upper-left corner). + var has_top := edges.has(&"top") + var has_bottom := edges.has(&"bottom") + var has_left := edges.has(&"left") + var has_right := edges.has(&"right") + var corner_size := Vector2(CORNER_SIZE, CORNER_SIZE) + + if has_top and has_left: + _create_segment_sprite( + tile_origin + Vector2(0, 0), + corner_size, + INNER_CORNER_UPPER_LEFT_RECT + ) + if has_top and has_right: + _create_segment_sprite( + tile_origin + Vector2(TILE_SIZE - CORNER_SIZE, 0), + corner_size, + INNER_CORNER_UPPER_RIGHT_RECT + ) + if has_bottom and has_left: + _create_segment_sprite( + tile_origin + Vector2(0, TILE_SIZE - CORNER_SIZE), + corner_size, + INNER_CORNER_LOWER_LEFT_RECT + ) + if has_bottom and has_right: + _create_segment_sprite( + tile_origin + Vector2(TILE_SIZE - CORNER_SIZE, TILE_SIZE - CORNER_SIZE), + corner_size, + INNER_CORNER_LOWER_RIGHT_RECT + )