From 2577c032fd0904ee142c4f8296505a0006033205 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Thu, 23 Jan 2025 20:24:42 +0100 Subject: [PATCH] WIP: Try another implementation --- game_server_manager.gd | 16 ++++++++++++++++ scenes/maps/el_test.gd | 2 ++ scenes/maps/el_test.tscn | 4 ++++ scenes/utils/character.tscn | 10 +++++++++- scenes/utils/menu.gd | 4 ++-- 5 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 game_server_manager.gd diff --git a/game_server_manager.gd b/game_server_manager.gd new file mode 100644 index 0000000..140490c --- /dev/null +++ b/game_server_manager.gd @@ -0,0 +1,16 @@ +extends Node + +var players := {} + +func add_player(id: int, name: String): + if ! players.has(id): + players[id] = {"name": name} + +# 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 diff --git a/scenes/maps/el_test.gd b/scenes/maps/el_test.gd index 33746a8..6e1b27f 100644 --- a/scenes/maps/el_test.gd +++ b/scenes/maps/el_test.gd @@ -6,12 +6,14 @@ var player_side: String @onready var intro_view_port = $Intro/CameraMount/IntroCamera/SubViewportContainer/SubViewport @onready var spawns = $Spawns @onready var root = $'.' + # 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) pass diff --git a/scenes/maps/el_test.tscn b/scenes/maps/el_test.tscn index 68c113d..eecca50 100644 --- a/scenes/maps/el_test.tscn +++ b/scenes/maps/el_test.tscn @@ -24,3 +24,7 @@ size = Vector3(0.100647, 1, 6.02112) [node name="SpawnArea" type="CSGBox3D" parent="Spawns/Blue"] transform = Transform3D(5.70162, 0, 0, 0, 1, 0, 0, 0, 7.97817, 21.2099, 1.78438, 1.23551) 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") diff --git a/scenes/utils/character.tscn b/scenes/utils/character.tscn index 140a6b1..3f057a4 100644 --- a/scenes/utils/character.tscn +++ b/scenes/utils/character.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=6 format=3 uid="uid://ccm77j5rkh21w"] +[gd_scene load_steps=7 format=3 uid="uid://ccm77j5rkh21w"] [ext_resource type="Script" path="res://scripts/character_controller.gd" id="1_sue4n"] [ext_resource type="PackedScene" uid="uid://bmqutwuj28san" path="res://scenes/utils/view_model_camera.tscn" id="4_al83x"] @@ -9,6 +9,11 @@ radius = 0.368364 height = 1.8 +[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_csl3n"] +properties/0/path = NodePath(".:position") +properties/0/spawn = true +properties/0/replication_mode = 1 + [node name="Character" type="Node3D"] [node name="CharacterBody3D" type="CharacterBody3D" parent="."] @@ -30,3 +35,6 @@ script = ExtResource("4_uwcjh") transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.0287516, -0.136104, -0.276055) visible = false script = null + +[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] +replication_config = SubResource("SceneReplicationConfig_csl3n") diff --git a/scenes/utils/menu.gd b/scenes/utils/menu.gd index 21260a0..8098d54 100644 --- a/scenes/utils/menu.gd +++ b/scenes/utils/menu.gd @@ -39,8 +39,8 @@ func _on_host_pressed() -> void: players[1] = player_info player_connected.emit(1, player_info) - - + game_server_manager.add_player(1, "host") + func remove_multiplayer_peer(): multiplayer.multiplayer_peer = null