extends Control onready var labels = find_node("labels") onready var whoami = find_node("whoami") onready var text = find_node("text") onready var scroller = find_node("scroller") onready var tween = find_node("Tween") onready var scrollbar = scroller.get_v_scrollbar() const server_says = "[b]server[color=#f0e67e]:[/color][/b] " var regexes: Array = [] func _connected(): add_label( ( "%s[b][matrix]w[/matrix]elcome to [rainbow freq=.3 sat=.7][shake rate=20 level=25]room 2!" % server_says ), "server" ) yield(get_tree().create_timer(.4), "timeout") add_label( "%s[b]you can use a custom flavor of [wave amp=20 freq=20]markdown!" % server_says, "howto", Vector2(1000, 80) ) func _ready(): regexes.append([reg("_([^_]+)_"), "[i]$1[/i]"]) regexes.append([reg("\\*\\*([^\\*\\*]+)\\*\\*"), "[b]$1[/b]"]) regexes.append([reg("\\*([^\\*]+)\\*"), "[i]$1[/i]"]) regexes.append([reg("```([^`]+)```"), "[code]$1[/code]"]) regexes.append([reg("`([^`]+)`"), "[code]$1[/code]"]) regexes.append([reg("~~([^~]+)~~"), "[s]$1[/s]"]) regexes.append([reg("#([^#]+)#"), "[rainbow freq=.3 sat=.7]$1[/rainbow]"]) regexes.append([reg("@([^@]+)@"), "[wave amp=20 freq=20]$1[/wave]"]) regexes.append([reg("%([^%]+)%"), "[shake rate=20 level=25]$1[/shake]"]) regexes.append([reg("\\$([^\\$]+)\\$"), "[matrix]$1[/matrix]"]) func reg(src: String) -> RegEx: var regex := RegEx.new() regex.compile(src) return regex func _on_Main_recieved(data): var string = "[b]%s[color=#f0e67e]:[/color][/b] %s" % [data.who, data.text] if !OS.is_window_focused(): OS.request_attention() add_label(string) func add_label(bbcode: String, name = "richtextlabel", size = Vector2(1000, 40)) -> RichTextLabel: var l = RichTextLabel.new() l.name = name l.rect_min_size = size l.install_effect(RichTextMatrix.new()) l.bbcode_enabled = true l.scroll_active = false labels.add_child(l) l.connect("meta_clicked", self, "open_url") l.bbcode_text = bbcode l.fit_content_height = true tween.interpolate_property( scrollbar, "value", scrollbar.value, scrollbar.max_value, .5, Tween.TRANS_BOUNCE ) tween.start() return l func open_url(meta): var err = OS.shell_open(meta) if err == OK: print("Opened link '%s' successfully!" % meta) else: printerr("Failed opening the link '%s'!" % meta) func _on_text_entered(t): if !t: return t = translate_md(t.strip_edges()) text.text = "" get_parent().send_packet({"who": whoami.text, "text": t, "header": "C"}) func translate_md(input: String) -> String: for replacement in regexes: input = replacement[0].sub(input, replacement[1]) return input func _on_send_pressed(): _on_text_entered(text.text) func _on_whoami_text_entered(t): if !t: whoami.text = "Anonymous" t = t.strip_edges() whoami.text = t func _on_Main_err(err: String): add_label("[b][color=#ff6347]error:[i] %s" % err) text.editable = false