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
|
extends Control
onready var flags: PoolStringArray = ["rainbow"]
onready var flagchoice: GridMenuButton = $choose/signup/flag
onready var status: StatusLabel = $H/InfoLabel
onready var loading = $LoadingAnimation
onready var tabs := {
"signup": $choose/signup/usernamepass,
"signin": $choose/signin/usernamepass,
}
var signed_in = false
var autologin = true
onready var tabcontainer = $choose
func _ready():
loading.show()
tabcontainer.hide()
PacketHandler.connect("signinresult", self, "_on_signin_result")
PacketHandler.connect("signupresult", self, "_on_signup_result")
PacketHandler.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_icon_item(load("res://assets/flags/%s.png" % i), i.replace("_", " "))
flagchoice.selected = 0
func attempt_autologin():
if Creds.data.name and Creds.data.password:
PacketHandler.signin(Creds.data)
else:
reset("", false)
func signin():
$choose/signin/signinbutton.disabled = true
update_data(tabs.signin.username, tabs.signin.pw)
PacketHandler.signin(Creds.data)
func _on_signin_result(result: Dictionary) -> void:
var status_set = not autologin # not a autologin
if autologin:
autologin = false
yield(get_tree().create_timer(.25), "timeout")
$choose/signin/signinbutton.disabled = false
var err = result.get("err", false)
if err:
var err_table := {"INVALID_DATA": "Username/password incorrect."}
return reset(PacketHandler.construct_errstr(result, err_table) if status_set else "", status_set)
Creds.data.uuid = result.id # server uses `id` instead of `uuid`...
Creds.data.country = result.country
on_successful()
func signup():
$choose/signup/signupbutton.disabled = true
Creds.data.country = flags[flagchoice.selected]
update_data(tabs.signup.username, tabs.signup.pw)
PacketHandler.signup(Creds.data)
func _on_signup_result(result: Dictionary):
$choose/signup/signupbutton.disabled = false
var err = result.get("err", false)
if err:
var err_table = {"ALREADY_EXISTS": "That user already exists. Pick a different username."}
return reset(PacketHandler.construct_errstr(result, err_table))
Creds.data.uuid = result.id
on_successful()
func reset(reason: String, reset_creds := true) -> void:
if reason:
status.set_text(reason, 5)
if reset_creds:
Creds.reset()
tabcontainer.show()
loading.hide()
signed_in = false
func on_successful():
Creds.save()
loading.hide()
Log.info("Signed in as %s" % Creds.get("name"))
status.set_text("Signed in as " + Creds.get("name"), 0)
signed_in = true # yay
$H/LogOut.show()
tabcontainer.hide()
func update_data(username, pw):
Creds.data.name = username.get_text()
Creds.data.password = pw.get_text()
Creds.save()
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!")
|