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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
extends Control

onready var flags: PoolStringArray = ["rainbow"]
onready var flagchoice: GridMenuButton = $choose/signup/flag
onready var data: Dictionary = SaveLoad.get_data("id")
onready var status: Label = $H/InfoLabel  # not a StatusLabel
onready var loading = $LoadingAnimation

onready var tabs := {
	"signup": $choose/signup/usernamepass,
	"signin": $choose/signin/usernamepass,
}

var signed_in = false setget set_signed_in
var autologin = true

onready var tabcontainer = $choose


func set_signed_in(new):
	signed_in = new
	Events.emit_signal("set_signed_in", new)


func _ready():
	loading.show()
	tabcontainer.hide()
	if Globals.network:
		Globals.network.connect("signinresult", self, "_on_signin_result")
		Globals.network.connect("signupresult", self, "_on_signup_result")
		Globals.network.connect("connection_established", self, "attempt_autologin")
	flags.append_array(Utils.walk_dir("res://assets/flags", false, ["rainbow"]))
	for i in flags:  # add the items
		flagchoice.add_item(load("res://assets/flags/%s.png" % i), i.replace("_", " "))
	flagchoice.selected = 0


func attempt_autologin():
	if data.name and data.password:
		Globals.network.signin(data)
	else:
		reset("", false)


func _on_signin_pressed():
	$choose/signin/signinbutton.disabled = true
	update_data(tabs.signin.username, tabs.signin.pw)
	Globals.network.signin(data)


func _on_signin_result(result):
	var status_set = !autologin
	if autologin:
		autologin = false
		yield(get_tree().create_timer(.5), "timeout")
	$choose/signin/signinbutton.disabled = false
	if typeof(result) == TYPE_STRING:  # ew, error, get it away from me
		return reset(result, status_set)
	data.id = result.id
	data.country = result.country
	_after_result()


func _on_signup_pressed():
	$choose/signup/signupbutton.disabled = true
	data.country = flags[flagchoice.selected]
	update_data(tabs.signup.username, tabs.signup.pw)
	Globals.network.signup(data)


func _on_signup_result(result: String):
	$choose/signup/signupbutton.disabled = false
	if "err:" in result:  # ew error go awway
		return reset(result)
	data.id = result
	_after_result()


func reset(reason: String, set_status := true):
	if set_status:
		status.set_text(reason)
	data = SaveLoad.default_id_data
	tabcontainer.show()
	loading.hide()
	set_signed_in(false)
	save_data()
	tabcontainer.show()


func _after_result():
	save_data()
	loading.hide()
	status.set_text("Signed in to " + SaveLoad.get_data("id").name)
	set_signed_in(true)  # yay
	$H/LogOut.show()
	tabcontainer.hide()


func update_data(username, pw):
	username.text = username.get_text().strip_edges().strip_escapes()
	data.name = username.get_text()
	data.password = pw.get_text()
	save_data()


func save_data():
	SaveLoad.files.id.data = data
	SaveLoad.save("id")


func _on_choose_tab_changed(tab: int):
	var new: VBoxContainer = $choose.get_children()[tab].get_node("usernamepass")
	var old = $choose.get_children()[1 if tab == 0 else 0].get_node("usernamepass")
	new.update_data(old.export_data())


func log_out():
	$H/LogOut.hide()
	reset("You are now logged out!")