blob: 73b294cbcb8fb32fd9452856a12e356225f9b087 (
plain)
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
extends Control
var account_information: LoginServerLoginSuccessPacket
var character_server_information: Array
var current_character_information: CharacterInformation
func _ready() -> void:
switch_screen(%Login)
#$BackgroundMusic.play()
%ChatWindow.visible = false
func switch_screen(screen: Node):
for node in get_children():
if node is CenterContainer:
node.visible = false
screen.visible = true
func _on_login_pressed() -> void:
$ButtonClickSound.play()
Network.login_server.login(%Username.text, %Password.text)
account_information = await Network.login_server.logged_in
character_server_information = account_information.character_server_information
Client.account.id = account_information.account_id
get_tree().root.add_child(Network.login_server.get_keep_alive_timer())
for node in %CharacterServerList.get_children():
node.queue_free()
for info: CharacterServerInformation in character_server_information:
var select_character_server = Button.new()
select_character_server.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
select_character_server.text = info.server_name
select_character_server.pressed.connect(_on_character_server_login_pressed.bind(info))
%CharacterServerList.add_child(select_character_server)
# TODO: if setting is true to skip character server selection when only one server is available
#if character_server_information.size() == 1:
#(%CharacterServerList.get_child(0) as Button).pressed.emit()
#else:
#switch_screen(%CharacterServer)
switch_screen(%CharacterServer)
func _on_character_server_login_pressed(character_server_info: CharacterServerInformation) -> void:
$ButtonClickSound.play()
Network.character_server = CharacterServer.new(
character_server_info.get_server_ip(),
character_server_info.server_port
)
Network.character_server.login(
account_information.account_id,
account_information.login_id1,
account_information.login_id2,
account_information.gender
)
var response = await Network.character_server.received_packet
if response is CharacterSelectionFailedPacket:
print("character server login failed")
%ChatWindow.add_message("character server login failed", ChatMessageFormat.new())
return
get_tree().root.add_child(Network.character_server.get_keep_alive_timer())
var character_list: CharacterServerLoginSuccessCharacterListPacket = await Network.character_server.logged_in_character_list
for node in %CharacterList.get_children():
node.queue_free()
for slot_idx in character_list.character_information.size():
var info: CharacterInformation = character_list.character_information[slot_idx]
var character = preload("res://ui/character_selection_item.tscn").instantiate()
character.initialize_with_info(info)
character.activated.connect(func():
$CharacterSelection/VBoxContainer/HBoxContainer/CharacterInfo/Label.text = info.name
$CharacterSelection/VBoxContainer/HBoxContainer/CharacterInfo/HBoxContainer/Label2.text = str(info.level)
$CharacterSelection/VBoxContainer/HBoxContainer/CharacterInfo/HBoxContainer2/Label2.text = str(info.job_level)
$CharacterSelection/VBoxContainer/HBoxContainer/CharacterInfo/HBoxContainer4/Label2.text = Constants.Job.find_key(info.job)
$CharacterSelection/VBoxContainer/HBoxContainer/CharacterInfo/HBoxContainer3/Label2.text = str(info.strength)
)
character.selected.connect(func():
current_character_information = info
_on_character_selected_pressed(slot_idx)
)
%CharacterList.add_child(character)
# pre-select first character
if slot_idx == 0:
character.activated.emit()
switch_screen(%CharacterSelection)
func _on_character_selected_pressed(slot_idx: int):
$ButtonClickSound.play()
Network.character_server.select_character(slot_idx)
var selected_character = await Network.character_server.selected_character
if selected_character is CharacterSelectionFailedPacket:
# TODO: show error
return
Client.character.name = current_character_information.name
Network.map_server = MapServer.new(
selected_character.get_map_server_ip(),
selected_character.map_server_port
)
Network.map_server.login(
account_information.account_id,
current_character_information.character_id,
account_information.login_id1,
account_information.gender
)
var _logged_in = await Network.map_server.logged_in
# TODO: switch to game :)
%ChatWindow.visible = true
%ChatWindow.initialize()
# TODO: load map
var map_loaded_packet := MapLoadedPacket.new()
Network.map_server.send(map_loaded_packet)
# TODO: check which map server packets to send next
func _on_character_server_back_button_pressed() -> void:
$ButtonClickSound.play()
switch_screen(%Login)
func _on_character_selection_back_button_pressed() -> void:
$ButtonClickSound.play()
switch_screen(%CharacterServer)
|