86 lines
1.9 KiB
GDScript3
86 lines
1.9 KiB
GDScript3
|
extends Node2D
|
||
|
class_name AweTextNode, "res://addons/awesome_splash/assets/icon/text_node_icon.png"
|
||
|
|
||
|
export var anchor: Vector2
|
||
|
export var font: DynamicFont setget _set_font
|
||
|
export var text: String setget _set_text, _get_text
|
||
|
|
||
|
var label: Label
|
||
|
|
||
|
func _init(anchor: Vector2 = Vector2.ZERO, dynamic_font: DynamicFont = null):
|
||
|
label = Label.new()
|
||
|
label.align = 1 # Center
|
||
|
label.valign = 1 # Center
|
||
|
label.set("custom_fonts/font", dynamic_font)
|
||
|
add_child(label)
|
||
|
self.anchor = anchor
|
||
|
self.font = dynamic_font
|
||
|
|
||
|
|
||
|
func _ready():
|
||
|
if font != null:
|
||
|
label.set("custom_fonts/font", font)
|
||
|
_update_layout()
|
||
|
|
||
|
|
||
|
func _set_font(value):
|
||
|
font = value
|
||
|
label.set("custom_fonts/font", value)
|
||
|
_update_layout()
|
||
|
|
||
|
|
||
|
func _set_text(value: String):
|
||
|
text = value
|
||
|
label.text = value
|
||
|
_update_layout()
|
||
|
# update()
|
||
|
|
||
|
|
||
|
func _get_text() -> String:
|
||
|
return text
|
||
|
|
||
|
|
||
|
#func _draw():
|
||
|
# draw_rect(Rect2(-5, -5, 10, 10), Color.blue)
|
||
|
|
||
|
|
||
|
func get_true_size() -> Vector2:
|
||
|
return Vector2(label.rect_size.x, label.rect_size.y * 0.64)
|
||
|
|
||
|
|
||
|
func get_coordinates_top_left_char() -> Vector2:
|
||
|
var true_size = get_true_size()
|
||
|
return Vector2(-true_size.x * anchor.x, -true_size.y * anchor.y)
|
||
|
|
||
|
|
||
|
func _update_layout():
|
||
|
# I don't know why label.rect_size.x alway == 0.0 after set text.
|
||
|
# I remove and add again to get correct rect_size.x :((
|
||
|
remove_child(label)
|
||
|
add_child(label)
|
||
|
|
||
|
var label_rect = label.rect_size
|
||
|
var true_size = get_true_size()
|
||
|
|
||
|
var x = -(label_rect.x - true_size.x) / 2.0 - true_size.x * anchor.x
|
||
|
var y = -(label_rect.y - true_size.y) / 2.0 - true_size.y * anchor.y
|
||
|
label.rect_position = Vector2(x, y)
|
||
|
|
||
|
|
||
|
# CHUA TEST LAI
|
||
|
func update_anchor(new_anchor: Vector2):
|
||
|
if new_anchor == anchor:
|
||
|
return
|
||
|
|
||
|
var true_size = get_true_size()
|
||
|
|
||
|
var diff_anchor = new_anchor - anchor
|
||
|
var shift_x = true_size.x * diff_anchor.x
|
||
|
var shift_y = true_size.y * diff_anchor.y
|
||
|
|
||
|
label.rect_position.x -= shift_x
|
||
|
label.rect_position.y -= shift_y
|
||
|
|
||
|
position.x += shift_x
|
||
|
position.y += shift_y
|