diff --git a/game_server_manager.gd b/game_server_manager.gd index 140490c..68556e2 100644 --- a/game_server_manager.gd +++ b/game_server_manager.gd @@ -1,10 +1,6 @@ extends Node -var players := {} - -func add_player(id: int, name: String): - if ! players.has(id): - players[id] = {"name": name} +var test = 1 # Called when the node enters the scene tree for the first time. func _ready() -> void: diff --git a/project.godot b/project.godot index 423b03f..286dca5 100644 --- a/project.godot +++ b/project.godot @@ -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] + +GameServerManager="*res://scripts/game_server_manager.gd" + [display] window/size/viewport_width=1920 diff --git a/scenes/maps/el_test.gd b/scenes/maps/el_test.gd index 6e1b27f..3662561 100644 --- a/scenes/maps/el_test.gd +++ b/scenes/maps/el_test.gd @@ -6,16 +6,21 @@ var player_side: String @onready var intro_view_port = $Intro/CameraMount/IntroCamera/SubViewportContainer/SubViewport @onready var spawns = $Spawns @onready var root = $'.' - +@onready var players = $Players # Called when the node enters the scene tree for the first time. 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.name = str(multiplayer.get_unique_id()) - char.global_position = position - root.add_child(char) + if multiplayer.is_server(): + for i in GameServerManager.players: + char = ResourceLoader.load("res://scenes/utils/character.tscn").instantiate() + char.name = str(GameServerManager.players[i].name) + char.global_position = position + var my_random_number = RandomNumberGenerator.new().randf_range(-2.0, 2.0) + char.global_position = position + char.global_position.x += my_random_number + players.add_child(char) pass diff --git a/scenes/maps/el_test.tscn b/scenes/maps/el_test.tscn index eecca50..bf1d80f 100644 --- a/scenes/maps/el_test.tscn +++ b/scenes/maps/el_test.tscn @@ -27,4 +27,7 @@ size = Vector3(0.484497, 1, 5.99213) [node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."] _spawnable_scenes = PackedStringArray("res://scenes/utils/character.tscn") -spawn_path = NodePath("../Spawns/Red/SpawnArea") +spawn_path = NodePath("../Players") +spawn_limit = 4 + +[node name="Players" type="Node3D" parent="."] diff --git a/scenes/utils/menu.gd b/scenes/utils/menu.gd index 8098d54..bff08d1 100644 --- a/scenes/utils/menu.gd +++ b/scenes/utils/menu.gd @@ -39,8 +39,7 @@ func _on_host_pressed() -> void: players[1] = player_info player_connected.emit(1, player_info) - game_server_manager.add_player(1, "host") - + GameServerManager.players[1] = {"id": "1", "name": "host"} func remove_multiplayer_peer(): multiplayer.multiplayer_peer = null @@ -66,8 +65,12 @@ func _on_join_pressed() -> void: if error: print(error) multiplayer.multiplayer_peer = peer - + add_player.rpc_id(1, multiplayer.get_unique_id(), "guest") +@rpc("call_remote") +func add_player(id: int, name: String): + if not GameServerManager.players.has(id): + GameServerManager.players[1] = {"id": str(id), "name": name} func _on_player_connected(id: Variant, player_info: Variant) -> void: print(player_info) diff --git a/scripts/game_server_manager.gd b/scripts/game_server_manager.gd new file mode 100644 index 0000000..16f1dcb --- /dev/null +++ b/scripts/game_server_manager.gd @@ -0,0 +1,11 @@ +extends Node + +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