WIP: Trying to add multiplayer

This commit is contained in:
Nikolai Rodionov 2025-01-22 09:09:11 +01:00
parent fe08da9d4c
commit 37e4e42d51
Signed by: allanger
GPG Key ID: 09F8B434D0FDD99B
5 changed files with 53 additions and 16 deletions

12
ServerManager.gd Normal file
View File

@ -0,0 +1,12 @@
extends Node
@export var Players = {}
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass

View File

@ -15,6 +15,10 @@ run/main_scene="res://scenes/utils/Menu.tscn"
config/features=PackedStringArray("4.3", "Forward Plus")
config/icon="res://icon.svg"
[autoload]
ServerManager="*res://ServerManager.gd"
[display]
window/size/viewport_width=1920

View File

@ -1,7 +1,7 @@
extends Node3D
var player_side: String
@export var player : PackedScene
@onready var intro_camera = $Intro/CameraMount/IntroCamera
@onready var intro_view_port = $Intro/CameraMount/IntroCamera/SubViewportContainer/SubViewport
@onready var spawns = $Spawns
@ -11,10 +11,16 @@ func _ready() -> void:
var char : Node3D = null
var red_spawn: Node3D = $Spawns/Blue/SpawnArea
var position := red_spawn.global_position
char = ResourceLoader.load("res://scenes/utils/character.tscn").instantiate()
char.global_position = position
root.add_child(char)
pass
for i in ServerManager.Players:
print("spawning player")
char = ResourceLoader.load("res://scenes/utils/character.tscn").instantiate()
var my_random_number = RandomNumberGenerator.new().randf_range(-10.0, 10.0)
char.name = str(my_random_number)
char.global_position = position
char.global_position.x += my_random_number
root.add_child(char)
for nodes in get_children():
print(nodes)
# Called every frame. 'delta' is the elapsed time since the previous frame.

View File

@ -28,7 +28,7 @@ const MAX_CONNECTIONS = 20
var players_loaded = 0
var player_info = {"name": "Name"}
var players = {}
#var players = {}
func _on_host_pressed() -> void:
var peer = ENetMultiplayerPeer.new()
@ -36,8 +36,8 @@ func _on_host_pressed() -> void:
if error:
print(error)
multiplayer.multiplayer_peer = peer
players[1] = player_info
send_player_information.rpc("host", multiplayer.get_unique_id())
ServerManager.Players[1] = player_info
player_connected.emit(1, player_info)
@ -55,7 +55,7 @@ func load_game(game_scene_path):
func player_loaded():
if multiplayer.is_server():
players_loaded += 1
if players_loaded == players.size():
if players_loaded == ServerManager.players.size():
players_loaded = 0
@ -71,23 +71,25 @@ func _on_join_pressed() -> void:
func _on_player_connected(id: Variant, player_info: Variant) -> void:
print(player_info)
send_player_information.rpc_id(1, "test", multiplayer.get_unique_id())
_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)
pass
#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)
ServerManager.Players.erase(id)
player_disconnected.emit(id)
func _on_connected_ok():
var peer_id = multiplayer.get_unique_id()
players[peer_id] = player_info
#ServerManager.players[peer_id] = player_info
player_connected.emit(peer_id, player_info)
@ -96,10 +98,20 @@ func _on_connected_fail():
func _on_server_disconnected() -> void:
multiplayer.multiplayer_peer = null
players.clear()
ServerManager.Players.clear()
server_disconnected.emit()
@rpc("call_local", "any_peer")
func send_player_information(name, id):
if !ServerManager.Players.has(id):
ServerManager.Players[id] = {
"name": name,
"id": id,
"score": 0
}
if multiplayer.is_server():
for i in ServerManager.Players:
send_player_information.rpc(ServerManager.Players[i], name, i)
@rpc("call_local", "reliable", "any_peer")
func start_game():

View File

@ -31,6 +31,9 @@ var is_crouch: bool = false
@onready var camera: Node3D = $UpperTorso
@onready var character: Node3D = $"."
func get_current_camera() -> Camera3D:
return $UpperTorso/ViewModelCamera
func _ready() -> void:
capture_mouse()
func _unhandled_input(event: InputEvent) -> void: