35 lines
1.3 KiB
GDScript
35 lines
1.3 KiB
GDScript
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))
|