This repository was archived by the owner on Nov 23, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 55
/
Copy pathConnectionScreen.gd
125 lines (100 loc) · 3.79 KB
/
ConnectionScreen.gd
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
120
121
122
123
124
125
extends "res://main/Screen.gd"
onready var tab_container := $TabContainer
onready var login_email_field := $TabContainer/Login/GridContainer/Email
onready var login_password_field := $TabContainer/Login/GridContainer/Password
const CREDENTIALS_FILENAME = 'user://credentials.json'
var email: String = ''
var password: String = ''
var _reconnect: bool = false
var _next_screen
func _ready() -> void:
var file = File.new()
if file.file_exists(CREDENTIALS_FILENAME):
file.open(CREDENTIALS_FILENAME, File.READ)
var result := JSON.parse(file.get_as_text())
if result.result is Dictionary:
email = result.result['email']
password = result.result['password']
login_email_field.text = email
login_password_field.text = password
file.close()
func _save_credentials() -> void:
var file = File.new()
file.open(CREDENTIALS_FILENAME, File.WRITE)
var credentials = {
email = email,
password = password,
}
file.store_line(JSON.print(credentials))
file.close()
func _show_screen(info: Dictionary = {}) -> void:
_reconnect = info.get('reconnect', false)
_next_screen = info.get('next_screen', 'MatchScreen')
tab_container.current_tab = 0
# If we have a stored email and password, attempt to login straight away.
if email != '' and password != '':
do_login()
func do_login(save_credentials: bool = false) -> void:
visible = false
if _reconnect:
ui_layer.show_message("Session expired! Reconnecting...")
else:
ui_layer.show_message("Logging in...")
var nakama_session = yield(Online.nakama_client.authenticate_email_async(email, password, null, false), "completed")
if nakama_session.is_exception():
visible = true
ui_layer.show_message("Login failed!")
# Clear stored email and password, but leave the fields alone so the
# user can attempt to correct them.
email = ''
password = ''
# We always set Online.nakama_session in case something is yielding
# on the "session_changed" signal.
Online.nakama_session = null
else:
if save_credentials:
_save_credentials()
Online.nakama_session = nakama_session
ui_layer.hide_message()
if _next_screen:
ui_layer.show_screen(_next_screen)
func _on_LoginButton_pressed() -> void:
email = login_email_field.text.strip_edges()
password = login_password_field.text.strip_edges()
do_login($TabContainer/Login/GridContainer/SaveCheckBox.pressed)
func _on_CreateAccountButton_pressed() -> void:
email = $"TabContainer/Create Account/GridContainer/Email".text.strip_edges()
password = $"TabContainer/Create Account/GridContainer/Password".text.strip_edges()
var username = $"TabContainer/Create Account/GridContainer/Username".text.strip_edges()
var save_credentials = $"TabContainer/Create Account/GridContainer/SaveCheckBox".pressed
if email == '':
ui_layer.show_message("Must provide email")
return
if password == '':
ui_layer.show_message("Must provide password")
return
if username == '':
ui_layer.show_message("Must provide username")
return
visible = false
ui_layer.show_message("Creating account...")
var nakama_session = yield(Online.nakama_client.authenticate_email_async(email, password, username, true), "completed")
if nakama_session.is_exception():
visible = true
var msg = nakama_session.get_exception().message
# Nakama treats registration as logging in, so this is what we get if the
# the email is already is use but the password is wrong.
if msg == 'Invalid credentials.':
msg = 'E-mail already in use.'
elif msg == '':
msg = "Unable to create account"
ui_layer.show_message(msg)
# We always set Online.nakama_session in case something is yielding
# on the "session_changed" signal.
Online.nakama_session = null
else:
if save_credentials:
_save_credentials()
Online.nakama_session = nakama_session
ui_layer.hide_message()
ui_layer.show_screen("MatchScreen")