extends Control # Called when the node enters the scene tree for the first time. func _ready() -> void: multiplayer.peer_connected.connect(_on_player_connected) multiplayer.peer_disconnected.connect(_on_player_disconnected) multiplayer.connected_to_server.connect(_on_connected_ok) multiplayer.connection_failed.connect(_on_connected_fail) multiplayer.server_disconnected.connect(_on_server_disconnected) pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass var peer = ENetMultiplayerPeer.new() signal player_connected(peer_id, player_info) signal player_disconnected(peer_id) signal server_disconnected const PORT = 7000 const DEFAULT_SERVER_IP = "127.0.0.1" # IPv4 localhost const MAX_CONNECTIONS = 20 var players_loaded = 0 var player_info = {"name": "Name"} var players = {} func _on_host_pressed() -> void: var peer = ENetMultiplayerPeer.new() var error = peer.create_server(PORT, MAX_CONNECTIONS) if error: print(error) multiplayer.multiplayer_peer = peer players[1] = player_info player_connected.emit(1, player_info) func remove_multiplayer_peer(): multiplayer.multiplayer_peer = null # When the server decides to start the game from a UI scene, # do Lobby.load_game.rpc(filepath) @rpc("call_local", "reliable") func load_game(game_scene_path): get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn") # Every peer will call this when they have loaded the game scene. @rpc("any_peer", "call_local", "reliable") func player_loaded(): if multiplayer.is_server(): players_loaded += 1 if players_loaded == players.size(): players_loaded = 0 func _on_join_pressed() -> void: var address = '127.0.0.1' var peer = ENetMultiplayerPeer.new() var error = peer.create_client(address, PORT) if error: print(error) multiplayer.multiplayer_peer = peer func _on_player_connected(id: Variant, player_info: Variant) -> void: print(player_info) _register_player.rpc_id(id, player_info) @rpc("any_peer", "reliable") func _register_player(new_player_info): var new_player_id = multiplayer.get_remote_sender_id() players[new_player_id] = new_player_info player_connected.emit(new_player_id, new_player_info) func _on_player_disconnected(id: Variant) -> void: pass players.erase(id) player_disconnected.emit(id) func _on_connected_ok(): var peer_id = multiplayer.get_unique_id() players[peer_id] = player_info player_connected.emit(peer_id, player_info) func _on_connected_fail(): multiplayer.multiplayer_peer = null func _on_server_disconnected() -> void: multiplayer.multiplayer_peer = null players.clear() server_disconnected.emit() @rpc("call_local", "reliable", "any_peer") func start_game(): get_tree().change_scene_to_file("res://scenes/maps/el_test.tscn") func _on_start_pressed() -> void: start_game.rpc()