Move the real player authority to server
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

- Add rust bindings for the server player controller
- Implement reconciliation loop for checking the player state
- Place spawners on the test map
- Add Containerfile and helm chart
This commit is contained in:
2025-01-29 12:25:26 +01:00
parent 3e6eab08fd
commit d958a5b275
94 changed files with 3002 additions and 144 deletions

View File

@ -20,30 +20,34 @@ func _ready() -> void:
err = _add_player_spawner()
if err != OK:
print("Couldn't load player spawner")
push_error("Couldn't load player spawner")
err = _add_object_spawner()
if err != OK:
print("Couldn't load object spawner")
push_error("Couldn't load object spawner")
# add objects spawner
if multiplayer.is_server():
_spawn_player(1)
else:
if not OS.has_feature("dedicated_server"):
_request_spawn.rpc_id(1, multiplayer.get_unique_id())
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
if multiplayer.is_server():
var active_players = player_spawner._get_root().get_children()
for n in active_players:
if not GameServerManager.players.has(n.owner_id):
_remove_player(n.owner_id)
@rpc("call_local", "reliable", "any_peer")
func _request_spawn(id: int):
_spawn_player(id)
func _spawn_player(id: int):
var char : Node3D = null
player_spawner.spawn_players(spawn_locations, id)
func _remove_player(id: int):
player_spawner.remove_player(id)
func _add_player_spawner() -> Error :
if not ResourceLoader.exists(PLAYER_SPAWNER):
return ERR_DOES_NOT_EXIST

View File

@ -21,13 +21,21 @@ func spawn_players(spawn_location: SpawnController, id: int) -> Error:
if multiplayer.is_server():
var char : Node3D = null
var player_data: PlayerState = GameServerManager.players[id]
char = ResourceLoader.load("res://scenes/characters/placeholder.tscn").instantiate()
char = ResourceLoader.load("res://scenes/player/placeholder.tscn").instantiate()
char.name = "PlayerPlaceholder_" + str(player_data.id)
print(player_data)
var position = spawn_location.get_spawner(SpawnController.Sides.BLUE)
char.global_position = position
char.global_position = position
#_get_spawner().spawn(char)
char.owner_id = id
var position: Vector3 = spawn_location.get_spawner(SpawnController.Sides.BLUE)
char.set_server_position(position)
_get_root().add_child(char)
return OK
return ERR_UNAUTHORIZED
func remove_player(id: int) -> Error:
if multiplayer.is_server():
var found_childen: Array[Node] =_get_root().get_children()
for found_child in found_childen:
if found_child.owner_id:
if found_child.owner_id == id:
found_child.queue_free()
return OK
return ERR_UNAUTHORIZED

View File

@ -6,7 +6,7 @@
script = ExtResource("1_2hsyd")
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."]
_spawnable_scenes = PackedStringArray("res://scenes/characters/placeholder.tscn")
_spawnable_scenes = PackedStringArray("res://scenes/characters/placeholder.tscn", "res://scenes/player/placeholder.tscn")
spawn_path = NodePath("../Players")
spawn_limit = 10

View File

@ -31,9 +31,7 @@ func _get_available_spawn(spawn_set: Node3D) -> Node3D:
for spawn: Node3D in spawn_set.get_children():
if not spawn.busy:
spawns.push_back(spawn)
print(spawns.size())
var random_index: int = randi_range(0, spawns.size() - 1)
print(random_index)
return spawns[random_index]
return null
@ -47,6 +45,5 @@ func get_spawner(team: Sides) -> Vector3:
print("red")
return Vector3(0,0,0)
_:
print("хз")
return Vector3(0,0,0)
# Get all spawners for each team

View File

@ -961,13 +961,37 @@ script = ExtResource("2_1ss1b")
[node name="Blue" type="Node3D" parent="SpawnLocations"]
[node name="Spawn4" type="Node3D" parent="SpawnLocations/Blue"]
transform = Transform3D(-0.332276, 0, 0.943182, 0, 1, 0, -0.943182, 0, -0.332276, 53.1487, -0.0093751, -8.68195)
[node name="Spawn1" type="Node3D" parent="SpawnLocations/Blue"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.234959, 25.2818, 2.12756)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 52.9098, -0.00937462, 10.3532)
[node name="Spawn2" type="Node3D" parent="SpawnLocations/Blue"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 29.4253, 15.2112, 4.25512)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 52.8486, -0.00937653, 4.25512)
[node name="Spawn3" type="Node3D" parent="SpawnLocations/Blue"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 53.6493, -0.00937504, -4.34097)
[node name="Spawn5" type="Node3D" parent="SpawnLocations/Blue"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 51.5453, -0.0187502, -17.3639)
[node name="Red" type="Node3D" parent="SpawnLocations"]
[node name="Spawn4" type="Node3D" parent="SpawnLocations/Red"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -40.9916, -0.0093751, -8.68195)
[node name="Spawn1" type="Node3D" parent="SpawnLocations/Red"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -41.2305, -0.00937462, 10.3532)
[node name="Spawn2" type="Node3D" parent="SpawnLocations/Red"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -41.2917, -0.00937653, 4.25512)
[node name="Spawn3" type="Node3D" parent="SpawnLocations/Red"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -40.491, -0.00937504, -4.34097)
[node name="Spawn5" type="Node3D" parent="SpawnLocations/Red"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -42.595, -0.0187502, -17.3639)
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_3ha0j")