open-fpsz/interfaces/menus/boot/multiplayer.tscn
2024-04-07 21:03:56 +00:00

258 lines
9.5 KiB
Plaintext

[gd_scene load_steps=3 format=3 uid="uid://1seg8cvss7a7"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_krqeq"]
bg_color = Color(0.5, 0.5, 0.5, 0.25)
[sub_resource type="GDScript" id="GDScript_tc1bm"]
script/source = "extends PanelContainer
const MAX_CLIENTS : int = 20
const DEFAULT_PORT : int = 9000
const DEFAULT_HOST : String = \"localhost\"
var _join_address = RegEx.new()
var _registered_ports = RegEx.new()
signal start_server(peer)
signal join_server(peer)
func _ready():
# see https://datatracker.ietf.org/doc/html/rfc1700
_registered_ports.compile(r'^(?:102[4-9]|10[3-9]\\d|1[1-9]\\d{2}|[2-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])$')
_join_address.compile(r'^(?<host>[a-zA-Z0-9.-]+)(:(?<port>:102[4-9]|10[3-9]\\d|1[1-9]\\d{2}|[2-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5]))?$')
hide() # start hidden
func _on_menu_pressed():
hide()
owner.get_node(\"Main\").show()
func _on_quit_pressed():
get_tree().quit()
func _on_join_pressed():
var addr = [DEFAULT_HOST, DEFAULT_PORT]
# validate join address input
var result = _join_address.search(%JoinAddress.text)
if result: # address is valid
addr[0] = result.get_string(\"host\")
var rport = result.get_string(\"port\")
if rport: addr[1] = int(rport)
# create client
var peer = ENetMultiplayerPeer.new()
peer.create_client(addr[0], addr[1])
join_server.emit(peer)
func _on_host_pressed():
var port = DEFAULT_PORT
# check for registered ports number matches
if %ServerPort.text:
var result = _registered_ports.search(%ServerPort.text)
if result: # port is valid
port = int(result.get_string())
else: # port is not valid
push_warning(\"A valid port number in the range 1024-65535 is required.\")
return
## create server
var peer = ENetMultiplayerPeer.new()
peer.create_server(port, MAX_CLIENTS)
start_server.emit(peer)
"
[node name="Multiplayer" type="PanelContainer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_krqeq")
script = SubResource("GDScript_tc1bm")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 20
[node name="TabContainer" type="TabContainer" parent="MarginContainer"]
layout_mode = 2
theme_override_constants/side_margin = 0
[node name="Profile" type="TabBar" parent="MarginContainer/TabContainer"]
layout_mode = 2
theme_override_constants/h_separation = 0
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/TabContainer/Profile"]
layout_mode = 0
offset_right = 1116.0
offset_bottom = 577.0
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 20
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/TabContainer/Profile/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="LeftBox" type="VBoxContainer" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 0.25
[node name="Create" type="Button" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
disabled = true
text = "Create"
[node name="Delete" type="Button" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
disabled = true
text = "Delete"
[node name="Spacer" type="MarginContainer" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
size_flags_vertical = 3
[node name="Menu" type="Button" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
text = "Menu
"
[node name="Quit" type="Button" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
text = "Quit"
[node name="RightBox" type="VBoxContainer" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="Label" type="Label" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/RightBox"]
layout_mode = 2
text = "Current Profile:"
[node name="ProfileName" type="LineEdit" parent="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/RightBox"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "Newblood"
[node name="Join" type="TabBar" parent="MarginContainer/TabContainer"]
visible = false
layout_mode = 2
select_with_rmb = true
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/TabContainer/Join"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 20
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/TabContainer/Join/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 10
[node name="LeftBox" type="VBoxContainer" parent="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 0.25
[node name="Join" type="Button" parent="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
text = "Join"
[node name="Spacer" type="MarginContainer" parent="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
size_flags_vertical = 3
[node name="Menu" type="Button" parent="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
text = "Menu
"
[node name="Quit" type="Button" parent="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
text = "Quit"
[node name="RightBox" type="VBoxContainer" parent="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="JoinAddress" type="LineEdit" parent="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer/RightBox"]
unique_name_in_owner = true
layout_mode = 2
placeholder_text = "localhost"
[node name="Host" type="TabBar" parent="MarginContainer/TabContainer"]
visible = false
layout_mode = 2
select_with_rmb = true
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/TabContainer/Host"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/margin_left = 20
theme_override_constants/margin_top = 20
theme_override_constants/margin_right = 20
theme_override_constants/margin_bottom = 20
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/TabContainer/Host/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 10
[node name="LeftBox" type="VBoxContainer" parent="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_stretch_ratio = 0.25
[node name="Host" type="Button" parent="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
text = "Host"
[node name="Spacer" type="MarginContainer" parent="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
size_flags_vertical = 3
[node name="Menu" type="Button" parent="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
text = "Menu
"
[node name="Quit" type="Button" parent="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/LeftBox"]
layout_mode = 2
text = "Quit"
[node name="RightBox" type="VBoxContainer" parent="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="ServerPort" type="LineEdit" parent="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/RightBox"]
unique_name_in_owner = true
layout_mode = 2
placeholder_text = "9000"
[connection signal="pressed" from="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/LeftBox/Menu" to="." method="_on_menu_pressed"]
[connection signal="pressed" from="MarginContainer/TabContainer/Profile/MarginContainer/HBoxContainer/LeftBox/Quit" to="." method="_on_quit_pressed"]
[connection signal="pressed" from="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer/LeftBox/Join" to="." method="_on_join_pressed"]
[connection signal="pressed" from="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer/LeftBox/Menu" to="." method="_on_menu_pressed"]
[connection signal="pressed" from="MarginContainer/TabContainer/Join/MarginContainer/HBoxContainer/LeftBox/Quit" to="." method="_on_quit_pressed"]
[connection signal="pressed" from="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/LeftBox/Host" to="." method="_on_host_pressed"]
[connection signal="pressed" from="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/LeftBox/Menu" to="." method="_on_menu_pressed"]
[connection signal="pressed" from="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/LeftBox/Quit" to="." method="_on_quit_pressed"]
[connection signal="text_changed" from="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/RightBox/ServerPort" to="MarginContainer/TabContainer/Host/MarginContainer/HBoxContainer/RightBox/ServerPort" method="_on_text_changed"]