Updated the networking to make it an autoload and the main menu to call into this autoload

This commit is contained in:
pbentes 2024-02-08 13:41:11 +00:00
parent b3b18c8124
commit 87abb58059
5 changed files with 116 additions and 90 deletions

View File

@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://c0algfvajobwu"]
[ext_resource type="Script" path="res://autoload/network/scripts/network.gd" id="1_6a6ho"]
[node name="Network" type="Node"]
script = ExtResource("1_6a6ho")

View File

@ -0,0 +1,100 @@
extends Node
#region Signals
signal upnp_completed(error)
signal player_connected(peer_id, player_info)
signal player_disconnected(peer_id)
signal server_disconnected
#endregion
const PORT: int = 7000
const DEFAULT_SERVER_IP: String = "127.0.0.1"
const MAX_CONNECTIONS: int = 20
var players = {}
var player_info = {"name": "Name"}
var players_loaded: int = 0
var game_scene: String
var thread = null
func _ready():
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)
func host_game():
var peer = ENetMultiplayerPeer.new()
var error = peer.create_server(PORT, MAX_CONNECTIONS)
if error:
return error
multiplayer.multiplayer_peer = peer
players[1] = player_info
player_connected.emit(1, player_info)
load_game.rpc_id(1, game_scene)
func join_game(address: String):
address = DEFAULT_SERVER_IP if address.is_empty() else address
var peer = ENetMultiplayerPeer.new()
var error = peer.create_client(address, PORT)
if error:
return error
multiplayer.multiplayer_peer = peer
func remove_multiplayer_peer():
multiplayer.multiplayer_peer = null
#region Events
@rpc("call_local", "reliable")
func load_game(game_scene_path):
get_tree().change_scene_to_file(game_scene_path)
@rpc("any_peer", "call_local", "reliable")
func player_loaded():
if multiplayer.is_server():
players_loaded += 1
if players_loaded == players.size():
players_loaded = 0
@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)
#region Multiplayer Signal Handlers
func _on_player_connected(id):
_register_player.rpc_id(id, player_info)
func _on_player_disconnected(id):
players.erase(id)
player_disconnected.emit(id)
func _on_connected_ok():
var peer_id = multiplayer.get_unique_id()
players[peer_id] = player_info
print("Connected: ", peer_id, " ", players[peer_id])
player_connected.emit(peer_id, player_info)
load_game.rpc_id(peer_id, game_scene)
func _on_connected_fail():
multiplayer.multiplayer_peer = null
func _on_server_disconnected():
multiplayer.multiplayer_peer = null
players.clear()
server_disconnected.emit()
#endregion
#endregion

View File

@ -20,6 +20,10 @@ config/icon="res://icon.svg"
buses/default_bus_layout="res://voip_setup.tres"
driver/enable_input=true
[autoload]
Network="*res://autoload/network/network.tscn"
[dotnet]
project/assembly_name="VoIP"

View File

@ -1,98 +1,13 @@
extends Control
#region Signals
signal player_connected(peer_id, player_info)
signal player_disconnected(peer_id)
signal server_disconnected
#endregion
@onready var networking = get_node("/root/Network")
@onready var host_ip: LineEdit = $MarginContainer/VBoxContainer/HostIP
const PORT: int = 7000
const DEFAULT_SERVER_IP: String = "127.0.0.1"
const MAX_CONNECTIONS: int = 20
var players = {}
var player_info = {"name": "Name"}
var players_loaded: int = 0
func _ready():
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)
networking.game_scene = "res://ui/main_scene/main_scene.tscn"
func _on_host_game_pressed():
var peer = ENetMultiplayerPeer.new()
var error = peer.create_server(PORT, MAX_CONNECTIONS)
if error:
return error
multiplayer.multiplayer_peer = peer
players[1] = player_info
player_connected.emit(1, player_info)
load_game.rpc_id(1, "res://ui/main_scene/main_scene.tscn")
networking.host_game()
func _on_join_game_pressed():
var address: String = host_ip.text
if address.is_empty():
address = DEFAULT_SERVER_IP
var peer = ENetMultiplayerPeer.new()
var error = peer.create_client(address, PORT)
if error:
return error
multiplayer.multiplayer_peer = peer
func remove_multiplayer_peer():
multiplayer.multiplayer_peer = null
#region Events
@rpc("call_local", "reliable")
func load_game(game_scene_path):
get_tree().change_scene_to_file(game_scene_path)
@rpc("any_peer", "call_local", "reliable")
func player_loaded():
if multiplayer.is_server():
players_loaded += 1
if players_loaded == players.size():
players_loaded = 0
@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)
#region Multiplayer Signal Handlers
func _on_player_connected(id):
_register_player.rpc_id(id, player_info)
func _on_player_disconnected(id):
players.erase(id)
player_disconnected.emit(id)
func _on_connected_ok():
var peer_id = multiplayer.get_unique_id()
players[peer_id] = player_info
print("Connected: ", peer_id, " ", players[peer_id])
player_connected.emit(peer_id, player_info)
load_game.rpc_id(peer_id, "res://ui/main_scene/main_scene.tscn")
func _on_connected_fail():
multiplayer.multiplayer_peer = null
func _on_server_disconnected():
multiplayer.multiplayer_peer = null
players.clear()
server_disconnected.emit()
#endregion
#endregion
networking.join_game(host_ip.text)

View File

@ -1,6 +1,7 @@
[gd_scene load_steps=7 format=3 uid="uid://dvy8ub5r3mnjc"]
[ext_resource type="Script" path="res://ui/main_scene/scripts/Microphone.gd" id="2_h65el"]
[ext_resource type="Script" path="res://ui/main_scene/scripts/microphone.gd" id="2_h65el"]
[sub_resource type="SystemFont" id="SystemFont_dukv4"]
font_names = PackedStringArray("JetBrains Mono NL")