xiandie/ui/text_helper.gd

72 lines
1.7 KiB
GDScript3
Raw Normal View History

2025-07-04 13:02:27 +00:00
@tool
extends Node
@export var property_name := "text"
2025-07-28 14:15:57 +00:00
# 优先使用 inspect_title
@export var inspect_title := "":
set(val):
inspect_title = val
if is_node_ready():
refresh()
@export var translation_key := "":
set(val):
translation_key = val
if is_node_ready():
refresh()
@export var vertical := false
@export var prefix := ""
@export var suffix := ""
@warning_ignore("unused_private_class_variable")
@export_tool_button("刷新") var _refresh = refresh
2025-07-04 13:02:27 +00:00
func _ready() -> void:
refresh()
2025-07-04 13:02:27 +00:00
# res://asset/dialogue/item_description.zh_CN.translation
var items_translation = preload("uid://c1x5bqwulamey") as Translation
func refresh():
2025-07-28 14:15:57 +00:00
if property_name:
2025-07-30 14:57:38 +00:00
if not inspect_title.is_empty():
setup_property(_get_tr_content())
2025-07-28 14:15:57 +00:00
elif translation_key:
var msg = tr(translation_key)
if Engine.is_editor_hint():
msg = items_translation.get_message(translation_key)
msg = msg.replace("{br}", "\n")
if vertical:
var new_text = ""
for c in msg:
new_text += c + "\n"
msg = new_text
setup_property(msg)
2025-08-06 10:22:58 +00:00
# if Engine.is_editor_hint():
# print("lable updated: %s" % [get(property_name)])
func setup_property(msg: String) -> void:
set(property_name, prefix + msg + suffix)
func _get_tr_content():
if inspect_title == "":
return ""
var inspection_note = ""
# get note content
var line_id = GlobalConfig.DIALOG_INSPECT.titles.get(inspect_title)
while line_id and line_id != "end":
var line = GlobalConfig.DIALOG_INSPECT.lines[line_id]
if line.has("text"):
inspection_note += tr(line.get("translation_key")) + "\n"
line_id = line.get("next_id")
return inspection_note
2025-07-30 14:57:38 +00:00
func _notification(what: int) -> void:
if what == NOTIFICATION_TRANSLATION_CHANGED:
refresh()