feat(multiplayer): ENet networking + player/world sync + lobby menu + chat
Add dedicated server / host / client modes via NetworkManager autoload, PlayerSyncComponent (20 Hz unreliable RPC), WorldSyncComponent (authoritative block break/place), ChatManager (F2), LobbyMenu scene, updated MainMenu with Solo/Heberger/Rejoindre/Quitter buttons. Port changed to 7777 (9999 occupied by sntlkeyssrvr on this machine). Mobs disabled in multi (spawn solo only). Solo mode untouched. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
44
scripts/net/LobbyMenu.gd
Normal file
44
scripts/net/LobbyMenu.gd
Normal file
@@ -0,0 +1,44 @@
|
||||
extends Control
|
||||
|
||||
@onready var _ip_input: LineEdit = $Panel/VBox/IPInput
|
||||
@onready var _port_input: LineEdit = $Panel/VBox/PortInput
|
||||
@onready var _status_label: Label = $Panel/VBox/StatusLabel
|
||||
@onready var _connect_btn: Button = $Panel/VBox/ConnectBtn
|
||||
@onready var _back_btn: Button = $Panel/VBox/BackBtn
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_ip_input.text = "127.0.0.1"
|
||||
_port_input.text = str(NetworkManager.DEFAULT_PORT)
|
||||
_status_label.text = ""
|
||||
|
||||
NetworkManager.connection_succeeded.connect(_on_connected)
|
||||
NetworkManager.connection_failed.connect(_on_failed)
|
||||
|
||||
_connect_btn.pressed.connect(_on_connect_pressed)
|
||||
_back_btn.pressed.connect(_on_back_pressed)
|
||||
|
||||
|
||||
func _on_connect_pressed() -> void:
|
||||
var address: String = _ip_input.text.strip_edges()
|
||||
var port: int = int(_port_input.text.strip_edges())
|
||||
if address.length() == 0:
|
||||
_status_label.text = "Adresse invalide"
|
||||
return
|
||||
_status_label.text = "Connexion en cours..."
|
||||
_connect_btn.disabled = true
|
||||
NetworkManager.join_server(address, port)
|
||||
|
||||
|
||||
func _on_connected() -> void:
|
||||
_status_label.text = "Connecte!"
|
||||
get_tree().change_scene_to_file("res://scenes/Main.tscn")
|
||||
|
||||
|
||||
func _on_failed() -> void:
|
||||
_status_label.text = "Connexion echouee"
|
||||
_connect_btn.disabled = false
|
||||
|
||||
|
||||
func _on_back_pressed() -> void:
|
||||
get_tree().change_scene_to_file("res://scenes/MainMenu.tscn")
|
||||
Reference in New Issue
Block a user