Add master server dialog
This commit is contained in:
parent
9e6763d2bb
commit
40705ac661
4 changed files with 175 additions and 31 deletions
|
@ -31,7 +31,6 @@ master func send_map() -> void:
|
|||
})
|
||||
|
||||
puppet func receive_data(data: Dictionary) -> void:
|
||||
print(data.systems)
|
||||
world.map.deserialize(data["map"])
|
||||
systems.deserialize(data["systems"])
|
||||
print("Received map data from master")
|
||||
|
|
|
@ -171,6 +171,17 @@ func _ms_request(endpoint: String, data):
|
|||
if error != OK:
|
||||
push_error("An error occurred in the HTTP request.")
|
||||
|
||||
func ms_get_entries():
|
||||
var http_request = HTTPRequest.new()
|
||||
add_child(http_request)
|
||||
http_request.connect("request_completed", self, "_ms_response", ["list_games"])
|
||||
var error = http_request.request(
|
||||
"https://" + MASTER_SERVER_ADDR + "/" + MS_GAME_CODE,
|
||||
["Content-Type: application/json"],
|
||||
true, HTTPClient.METHOD_GET)
|
||||
if error != OK:
|
||||
push_error("An error occurred in the HTTP request.")
|
||||
|
||||
func get_game_data():
|
||||
return {
|
||||
"name": server_name,
|
||||
|
@ -192,7 +203,15 @@ func update_ms_entry():
|
|||
"key": ms_key,
|
||||
"data": get_game_data()
|
||||
})
|
||||
yield(get_tree().create_timer(20), "timeout")
|
||||
|
||||
var time_left = 30
|
||||
func _process(delta):
|
||||
if not ms_active:
|
||||
return
|
||||
time_left -= delta
|
||||
if time_left < 0:
|
||||
update_ms_entry()
|
||||
time_left = 30
|
||||
|
||||
func _ms_response(_result: int, response_code: int, _headers: PoolStringArray, body: PoolByteArray, action: String):
|
||||
print_debug("MS said " + str(response_code))
|
||||
|
|
|
@ -8,12 +8,18 @@ export var delay = 1.0
|
|||
|
||||
onready var viewport = $Viewport
|
||||
onready var background = $Background
|
||||
onready var netgame = $"/root/Multiplayer"
|
||||
onready var server_list = $Popup/MarginContainer/VBoxContainer/ItemList
|
||||
|
||||
func _ready():
|
||||
var servers = []
|
||||
|
||||
func _ready() -> void:
|
||||
set_scale(scale)
|
||||
$"/root/Music/BGM".play()
|
||||
netgame.connect("ms_updated", self, "_ms_update")
|
||||
request_servers()
|
||||
|
||||
func _process(delta):
|
||||
func _process(delta: float) -> void:
|
||||
# Give the system time to adjust
|
||||
if delay > 0:
|
||||
delay -= delta
|
||||
|
@ -25,25 +31,44 @@ func _process(delta):
|
|||
print("GPU is taking it easy (", delta, "s < ", upThreshold, "s), adjusting shader scale")
|
||||
set_scale(scale-1)
|
||||
|
||||
func set_scale(val):
|
||||
func request_servers():
|
||||
netgame.ms_get_entries()
|
||||
|
||||
func _ms_update(action, result):
|
||||
if action == "list_games":
|
||||
# Reset server list
|
||||
server_list.clear()
|
||||
servers = result
|
||||
for server in servers:
|
||||
server_list.add_item(server.data.name + " (" + server.address + ") - " + str(server.data.players) + "/" + str(server.data.max_players) + " players")
|
||||
|
||||
func set_scale(val) -> void:
|
||||
scale = val
|
||||
if viewport:
|
||||
viewport.size = rect_size / scale
|
||||
background.update()
|
||||
|
||||
func _on_resized():
|
||||
func _on_resized() -> void:
|
||||
if viewport:
|
||||
viewport.size = rect_size / scale
|
||||
background.update()
|
||||
|
||||
func _host_pressed():
|
||||
func _host_pressed() -> void:
|
||||
$"/root/Music/BGM".stop()
|
||||
$"/root/Multiplayer".host()
|
||||
|
||||
func _join_pressed():
|
||||
$"/root/Music/BGM".stop()
|
||||
var addr = $CenterContainer/PanelContainer/HBoxContainer/ServerAddr
|
||||
$"/root/Multiplayer".join(addr.text)
|
||||
func _join_pressed() -> void:
|
||||
$Popup.popup_centered_ratio()
|
||||
|
||||
func _server_addr_changed(new_text: String):
|
||||
$CenterContainer/PanelContainer/HBoxContainer/JoinButton.disabled = new_text.length() < 1
|
||||
func join_server(addr: String) -> void:
|
||||
$"/root/Music/BGM".stop()
|
||||
$"/root/Multiplayer".join(addr)
|
||||
|
||||
func _server_addr_changed(new_text: String) -> void:
|
||||
$Popup/MarginContainer/VBoxContainer/HBoxContainer/Button.disabled = new_text.length() < 1
|
||||
|
||||
func _manual_join_pressed():
|
||||
join_server($Popup/MarginContainer/VBoxContainer/HBoxContainer/LineEdit.text)
|
||||
|
||||
func _server_item_clicked(index):
|
||||
join_server(servers[index].address)
|
||||
|
|
137
Scenes/Menu.tscn
137
Scenes/Menu.tscn
|
@ -1,9 +1,10 @@
|
|||
[gd_scene load_steps=10 format=2]
|
||||
[gd_scene load_steps=13 format=2]
|
||||
|
||||
[ext_resource path="res://Scenes/Menu.gd" type="Script" id=1]
|
||||
[ext_resource path="res://Graphics/UI/Background.shader" type="Shader" id=2]
|
||||
[ext_resource path="res://Graphics/UI/logo-temp-pixel.png" type="Texture" id=3]
|
||||
[ext_resource path="res://Graphics/UI/ui_theme.tres" type="Theme" id=4]
|
||||
[ext_resource path="res://Graphics/UI/iosevka-aile-regular.ttf" type="DynamicFontData" id=5]
|
||||
|
||||
[sub_resource type="ViewportTexture" id=1]
|
||||
viewport_path = NodePath("Viewport")
|
||||
|
@ -51,6 +52,18 @@ corner_radius_top_right = 4
|
|||
corner_radius_bottom_right = 4
|
||||
corner_radius_bottom_left = 4
|
||||
|
||||
[sub_resource type="DynamicFont" id=6]
|
||||
size = 20
|
||||
extra_spacing_top = 5
|
||||
extra_spacing_bottom = 5
|
||||
font_data = ExtResource( 5 )
|
||||
|
||||
[sub_resource type="DynamicFont" id=7]
|
||||
size = 20
|
||||
extra_spacing_top = 10
|
||||
extra_spacing_bottom = 10
|
||||
font_data = ExtResource( 5 )
|
||||
|
||||
[node name="Control" type="Control"]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
|
@ -125,9 +138,9 @@ __meta__ = {
|
|||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"]
|
||||
margin_left = 390.0
|
||||
margin_top = 43.0
|
||||
margin_top = 35.0
|
||||
margin_right = 690.0
|
||||
margin_bottom = 207.0
|
||||
margin_bottom = 215.0
|
||||
rect_min_size = Vector2( 300, 0 )
|
||||
custom_styles/panel = SubResource( 5 )
|
||||
|
||||
|
@ -135,41 +148,129 @@ custom_styles/panel = SubResource( 5 )
|
|||
margin_left = 16.0
|
||||
margin_top = 20.0
|
||||
margin_right = 284.0
|
||||
margin_bottom = 144.0
|
||||
margin_bottom = 160.0
|
||||
custom_constants/separation = 10
|
||||
|
||||
[node name="HostButton" type="Button" parent="CenterContainer/PanelContainer/HBoxContainer"]
|
||||
margin_right = 268.0
|
||||
margin_bottom = 24.0
|
||||
margin_bottom = 42.0
|
||||
theme = ExtResource( 4 )
|
||||
custom_fonts/font = SubResource( 6 )
|
||||
text = "Start a new game"
|
||||
|
||||
[node name="Label" type="Label" parent="CenterContainer/PanelContainer/HBoxContainer"]
|
||||
margin_top = 34.0
|
||||
margin_top = 52.0
|
||||
margin_right = 268.0
|
||||
margin_bottom = 52.0
|
||||
margin_bottom = 88.0
|
||||
theme = ExtResource( 4 )
|
||||
custom_fonts/font = SubResource( 6 )
|
||||
text = "or"
|
||||
align = 1
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="ServerAddr" type="LineEdit" parent="CenterContainer/PanelContainer/HBoxContainer"]
|
||||
margin_top = 62.0
|
||||
margin_right = 268.0
|
||||
margin_bottom = 90.0
|
||||
theme = ExtResource( 4 )
|
||||
placeholder_text = "Server address or URL"
|
||||
|
||||
[node name="JoinButton" type="Button" parent="CenterContainer/PanelContainer/HBoxContainer"]
|
||||
margin_top = 100.0
|
||||
margin_top = 98.0
|
||||
margin_right = 268.0
|
||||
margin_bottom = 124.0
|
||||
margin_bottom = 140.0
|
||||
theme = ExtResource( 4 )
|
||||
disabled = true
|
||||
custom_fonts/font = SubResource( 6 )
|
||||
text = "Join an existing game"
|
||||
|
||||
[node name="Popup" type="PopupDialog" parent="."]
|
||||
visible = true
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_left = 100.0
|
||||
margin_top = 100.0
|
||||
margin_right = -100.0
|
||||
margin_bottom = -100.0
|
||||
custom_styles/panel = SubResource( 5 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="Popup"]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_left = 20.0
|
||||
margin_top = 20.0
|
||||
margin_right = -20.0
|
||||
margin_bottom = -20.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="Popup/MarginContainer"]
|
||||
margin_right = 1040.0
|
||||
margin_bottom = 560.0
|
||||
custom_constants/separation = 5
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Label" type="Label" parent="Popup/MarginContainer/VBoxContainer"]
|
||||
margin_right = 1040.0
|
||||
margin_bottom = 36.0
|
||||
custom_fonts/font = SubResource( 6 )
|
||||
text = "Server Browser"
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="ItemList" type="ItemList" parent="Popup/MarginContainer/VBoxContainer"]
|
||||
margin_top = 41.0
|
||||
margin_right = 1040.0
|
||||
margin_bottom = 468.0
|
||||
size_flags_vertical = 3
|
||||
custom_fonts/font = SubResource( 7 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Label2" type="Label" parent="Popup/MarginContainer/VBoxContainer"]
|
||||
margin_top = 473.0
|
||||
margin_right = 1040.0
|
||||
margin_bottom = 509.0
|
||||
custom_fonts/font = SubResource( 6 )
|
||||
text = "Join by IP/address"
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="Popup/MarginContainer/VBoxContainer"]
|
||||
margin_top = 514.0
|
||||
margin_right = 1040.0
|
||||
margin_bottom = 560.0
|
||||
size_flags_horizontal = 3
|
||||
custom_constants/separation = 10
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="Popup/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||
margin_right = 300.0
|
||||
margin_bottom = 46.0
|
||||
rect_min_size = Vector2( 300, 0 )
|
||||
custom_fonts/font = SubResource( 6 )
|
||||
placeholder_text = "server.address"
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Button" type="Button" parent="Popup/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||
margin_left = 310.0
|
||||
margin_right = 410.0
|
||||
margin_bottom = 46.0
|
||||
rect_min_size = Vector2( 100, 0 )
|
||||
theme = ExtResource( 4 )
|
||||
custom_fonts/font = SubResource( 6 )
|
||||
disabled = true
|
||||
text = "Join"
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
[connection signal="resized" from="." to="." method="_on_resized"]
|
||||
[connection signal="pressed" from="CenterContainer/PanelContainer/HBoxContainer/HostButton" to="." method="_host_pressed"]
|
||||
[connection signal="text_changed" from="CenterContainer/PanelContainer/HBoxContainer/ServerAddr" to="." method="_server_addr_changed"]
|
||||
[connection signal="pressed" from="CenterContainer/PanelContainer/HBoxContainer/JoinButton" to="." method="_join_pressed"]
|
||||
[connection signal="item_activated" from="Popup/MarginContainer/VBoxContainer/ItemList" to="." method="_server_item_clicked"]
|
||||
[connection signal="text_changed" from="Popup/MarginContainer/VBoxContainer/HBoxContainer/LineEdit" to="." method="_server_addr_changed"]
|
||||
[connection signal="pressed" from="Popup/MarginContainer/VBoxContainer/HBoxContainer/Button" to="." method="_manual_join_pressed"]
|
||||
|
|
Reference in a new issue