online multiplayer chess game (note server currently down)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
extends Control
class_name Chat

onready var list: MessageList = $v/MessageList

var regexes := [
	[Utils.compile("_([^_]+)_"), "[i]$1[/i]"],
	[Utils.compile("\\*\\*([^\\*\\*]+)\\*\\*"), "[b]$1[/b]"],
	[Utils.compile("\\*([^\\*]+)\\*"), "[i]$1[/i]"],
	[Utils.compile("```([^`]+)```"), "[code]$1[/code]"],
	[Utils.compile("`([^`]+)`"), "[code]$1[/code]"],
	[Utils.compile("~~([^~]+)~~"), "[s]$1[/s]"],
	[Utils.compile("#([^#]+)#"), "[rainbow freq=.3 sat=.7]$1[/rainbow]"],
	[Utils.compile("%([^%]+)%"), "[shake rate=20 level=25]$1[/shake]"],
	[Utils.compile("\\[([^\\]]+)\\]\\(([^\\)]+)\\)"), "[url=$2]$1[/url]"],  # [foo](bar)
]


# create smokey centered text
func server(txt: String) -> void:
	list.add_label("[center][i][b][color=#93a1a1]%s[/color][/b][/i][/center]" % md2bb(txt))


func _init():
	Globals.chat = self


func _exit_tree():
	Globals.chat = null


func _ready():
	PacketHandler.connect("chat", self, "add_label_with")
	server("Welcome!")  # say hello


func add_label_with(data: Dictionary) -> void:
	# b c /c c /c /b c
	var string := "[b][color=#eee8d5]{who}[/color][color=#b58900]:[/color][/b][color=#eee8d5] {text}".format(data)
	list.add_label(string)


func send(t: String) -> void:
	t = md2bb(t)
	if PacketHandler.is_open_connection():
		var name = Creds.get("name") if Creds.get("name") else "Anonymous"
		name += "(%s)" % ("Spectator" if Globals.spectating else Globals.grid.team)
		PacketHandler.relay_signal({"text": t, "who": name}, PacketHandler.RELAYHEADERS.chat)
	else:
		add_label_with({text = t, who = Creds.get("name")})  # for testing


# markdown to bbcode
func md2bb(input: String) -> String:
	for replacement in regexes:
		var result = replacement[0].search(input)
		if result:
			var index = input.find(result.strings[0]) - 1
			var char_before = input[index]
			if not char_before in "\\":  # taboo characters go here
				input = replacement[0].sub(input, replacement[1], true)
	input = input.replace("\\", "")  # remove escapers
	return input