mirror of
https://gitlab.com/open-fpsz/open-fpsz.git
synced 2026-04-29 08:15:35 +00:00
Add multiplayer game mode over the network
This commit is contained in:
parent
ecc195e38e
commit
35af9ecc2d
13 changed files with 278 additions and 81 deletions
|
|
@ -1,8 +1,31 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://bjctlqvs33nqy"]
|
||||
[gd_scene load_steps=6 format=3 uid="uid://bjctlqvs33nqy"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://c1tjamjm8qjog" path="res://interfaces/menus/boot/background.webp" id="1_ph586"]
|
||||
[ext_resource type="PackedScene" uid="uid://1seg8cvss7a7" path="res://interfaces/menus/boot/multiplayer.tscn" id="2_lcb0h"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_jd8xf"]
|
||||
resource_name = "MainMenu"
|
||||
script/source = "extends CanvasLayer
|
||||
class_name MainMenu
|
||||
|
||||
signal start_demo
|
||||
signal start_server(peer)
|
||||
signal join_server(peer)
|
||||
|
||||
func _ready():
|
||||
$Multiplayer.start_server.connect(_on_start_server)
|
||||
$Multiplayer.join_server.connect(_on_join_server)
|
||||
|
||||
func _on_demo_pressed():
|
||||
start_demo.emit()
|
||||
|
||||
func _on_start_server(peer):
|
||||
start_server.emit(peer)
|
||||
|
||||
func _on_join_server(peer):
|
||||
join_server.emit(peer)
|
||||
"
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_snh7i"]
|
||||
bg_color = Color(0, 0.5, 0.5, 0.25)
|
||||
|
||||
|
|
@ -11,18 +34,6 @@ script/source = "extends PanelContainer
|
|||
|
||||
const PLAYER = preload(\"res://characters/player/player.tscn\")
|
||||
const MAP = preload(\"res://maps/genesis/genesis.tscn\")
|
||||
|
||||
func _on_demo_pressed():
|
||||
# instantiate scenes
|
||||
var player = PLAYER.instantiate()
|
||||
var map = MAP.instantiate()
|
||||
# set player initial position
|
||||
player.position = Vector3(0,150,0)
|
||||
# add as siblings in tree
|
||||
for o in [map, player]:
|
||||
owner.add_sibling(o)
|
||||
# queue main_menu node for deletion
|
||||
owner.queue_free()
|
||||
|
||||
func _on_multiplayer_pressed():
|
||||
hide()
|
||||
|
|
@ -33,6 +44,7 @@ func _on_quit_pressed():
|
|||
"
|
||||
|
||||
[node name="MainMenu" type="CanvasLayer"]
|
||||
script = SubResource("GDScript_jd8xf")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="."]
|
||||
anchors_preset = 15
|
||||
|
|
@ -81,6 +93,6 @@ layout_mode = 2
|
|||
theme_override_font_sizes/font_size = 32
|
||||
text = "Quit"
|
||||
|
||||
[connection signal="pressed" from="Main/MarginContainer/VBoxContainer/Demo" to="Main" method="_on_demo_pressed"]
|
||||
[connection signal="pressed" from="Main/MarginContainer/VBoxContainer/Demo" to="." method="_on_demo_pressed"]
|
||||
[connection signal="pressed" from="Main/MarginContainer/VBoxContainer/Multiplayer" to="Main" method="_on_multiplayer_pressed"]
|
||||
[connection signal="pressed" from="Main/MarginContainer/VBoxContainer/Quit" to="Main" method="_on_quit_pressed"]
|
||||
|
|
|
|||
|
|
@ -13,6 +13,9 @@ 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])$')
|
||||
|
|
@ -38,7 +41,8 @@ func _on_join_pressed():
|
|||
# create client
|
||||
var peer = ENetMultiplayerPeer.new()
|
||||
peer.create_client(addr[0], addr[1])
|
||||
multiplayer.multiplayer_peer = peer
|
||||
|
||||
join_server.emit(peer)
|
||||
|
||||
func _on_host_pressed():
|
||||
var port = DEFAULT_PORT
|
||||
|
|
@ -52,16 +56,11 @@ func _on_host_pressed():
|
|||
push_warning(\"A valid port number in the range 1024-65535 is required.\")
|
||||
return
|
||||
|
||||
# create server
|
||||
## create server
|
||||
var peer = ENetMultiplayerPeer.new()
|
||||
peer.create_server(port, MAX_CLIENTS)
|
||||
multiplayer.multiplayer_peer = peer
|
||||
|
||||
multiplayer.peer_connected.connect(_on_peer_connected)
|
||||
|
||||
func _on_peer_connected(peer_id):
|
||||
print(\"Peer `%s` connected\" % peer_id)
|
||||
|
||||
start_server.emit(peer)
|
||||
"
|
||||
|
||||
[node name="Multiplayer" type="PanelContainer"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue