45 lines
1.1 KiB
GDScript
45 lines
1.1 KiB
GDScript
@tool
|
|
class_name AdvancedRichText extends RichTextLabel
|
|
|
|
@export_multiline var advancedText:String = "":
|
|
get():
|
|
return advancedText
|
|
set(value):
|
|
advancedText = value
|
|
_parseAdvancedText()
|
|
|
|
@export var translate:bool = true:
|
|
set(value):
|
|
translate = value
|
|
_parseAdvancedText()
|
|
get():
|
|
return translate
|
|
|
|
func _init() -> void:
|
|
self._parseAdvancedText()
|
|
|
|
func _enter_tree() -> void:
|
|
self._parseAdvancedText()
|
|
|
|
func _parseAdvancedText() -> void:
|
|
if advancedText.is_empty():
|
|
self.text = ""
|
|
return
|
|
var key = advancedText
|
|
if self.translate:
|
|
key = tr(key)
|
|
self.text = processInputTags(key)
|
|
|
|
func processInputTags(_text:String) -> String:
|
|
var regex = RegEx.new()
|
|
regex.compile(r"\[input action=(.*?)\](.*?)\[/input\]")
|
|
var result = text
|
|
for match in regex.search_all(text):
|
|
var action = match.get_string(1).to_lower()
|
|
var height:int = 32
|
|
# var device = get_current_device_type()
|
|
# var icon_path = get_icon_for_action(action, device)
|
|
var img_tag = "[img height=%d valign=center,center]res://textures/input/%s.tres[/img]" % [ height, action ]
|
|
result = result.replace(match.get_string(0), img_tag)
|
|
return result
|