extends Node2D ## Draw only the eight border patches, preserving transparency and corner proportions. const TEXTURE_PATH := "res://assets/ui/frames/ship_ornament.png" var corner_size := 16.0 var opacity := 0.9 var _texture: Texture2D var _region: Rect2 func _ready() -> void: name = "OrnamentalFrame" z_index = 1 _texture = load(TEXTURE_PATH) var source := _texture.get_image() if source.is_compressed(): source.decompress() _region = Rect2(source.get_used_rect()) (get_parent() as Control).resized.connect(queue_redraw) queue_redraw() func _draw() -> void: if _texture == null: return var extent: Vector2 = (get_parent() as Control).size var edge := minf(corner_size, minf(extent.x, extent.y) * 0.25) var source_x := _region.size.x * 0.1 var source_y := _region.size.y * 0.18 var sx := [0.0, source_x, _region.size.x - source_x, _region.size.x] var sy := [0.0, source_y, _region.size.y - source_y, _region.size.y] var dx := [0.0, edge, extent.x - edge, extent.x] var dy := [0.0, edge, extent.y - edge, extent.y] for y in range(3): for x in range(3): if x == 1 and y == 1: continue var destination := Rect2(Vector2(dx[x],dy[y]),Vector2(dx[x+1]-dx[x],dy[y+1]-dy[y])) var source := Rect2(_region.position + Vector2(sx[x],sy[y]),Vector2(sx[x+1]-sx[x],sy[y+1]-sy[y])) draw_texture_rect_region(_texture,destination,source,Color(1,1,1,opacity))