feat: adding basic multiplayer

This commit is contained in:
DottsGit
2026-06-06 13:28:43 -04:00
parent 59096d322a
commit aefed46daf
6 changed files with 312 additions and 12 deletions
+69
View File
@@ -0,0 +1,69 @@
extends Node
signal player_connected(id: int)
signal player_disconnected(id: int)
signal connection_failed
signal connection_succeeded
const DEFAULT_PORT = 31415
var connected_players: Array[int] = []
func _ready() -> void:
multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
multiplayer.connected_to_server.connect(_on_connected_to_server)
multiplayer.connection_failed.connect(_on_connection_failed)
multiplayer.server_disconnected.connect(_on_server_disconnected)
func host_game(port: int = DEFAULT_PORT) -> Error:
var peer = ENetMultiplayerPeer.new()
var err = peer.create_server(port)
if err == OK:
multiplayer.multiplayer_peer = peer
connected_players.clear()
connected_players.append(1) # Host is 1
print("Hosting on port %s" % port)
return err
func join_game(ip: String, port: int = DEFAULT_PORT) -> Error:
var peer = ENetMultiplayerPeer.new()
var err = peer.create_client(ip, port)
if err == OK:
multiplayer.multiplayer_peer = peer
print("Connecting to %s:%s" % [ip, port])
return err
func disconnect_game() -> void:
multiplayer.multiplayer_peer = null
connected_players.clear()
func _on_peer_connected(id: int) -> void:
print("Player connected: ", id)
if not connected_players.has(id):
connected_players.append(id)
player_connected.emit(id)
func _on_peer_disconnected(id: int) -> void:
print("Player disconnected: ", id)
connected_players.erase(id)
player_disconnected.emit(id)
func _on_connected_to_server() -> void:
print("Successfully connected to server")
connection_succeeded.emit()
func _on_connection_failed() -> void:
print("Failed to connect to server")
multiplayer.multiplayer_peer = null
connection_failed.emit()
func _on_server_disconnected() -> void:
print("Server disconnected")
multiplayer.multiplayer_peer = null
connected_players.clear()
@rpc("authority", "call_local", "reliable")
func rpc_load_level(scene_path: String) -> void:
print("Loading level: ", scene_path)
get_tree().change_scene_to_file(scene_path)