open-strike-2/scenes/utils/menus/main/main_menu.gd
Nikolai Rodionov dfe888a918
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Move the real player authority to server
- 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
2025-01-31 19:24:57 +00:00

79 lines
2.3 KiB
GDScript

extends Node
var player_manager: PlayerManager = PlayerManager.new()
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
if OS.has_feature("dedicated_server"):
var chosen_map = "lowpoly_tdm_2.tscn"
var path_tmpl := "res://scenes/maps/maps/%s"
var path := path_tmpl % chosen_map
GameServerManager.current_map = path
var err := GameServerManager.create_server(player_manager)
if err != OK:
push_error("couldn't create a server")
change_level.call_deferred(path)
print(get_tree().get_root())
else:
var map_dir := DirAccess.open("res://scenes/maps/maps/")
if map_dir:
map_dir.list_dir_begin()
var file_name = map_dir.get_next()
while file_name != "":
$UI/CreateServer/Maps.add_item(file_name)
file_name = map_dir.get_next()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_create_server_pressed() -> void:
$UI/CreateServer.visible = true
func _on_join_server_pressed() -> void:
$UI/JoinServer.visible = true
func _on_create_button_pressed() -> void:
var chosen_map_index = $UI/CreateServer/Maps.get_selected_items()[0]
var chosen_map = $UI/CreateServer/Maps.get_item_text(chosen_map_index)
var path_tmpl := "res://scenes/maps/maps/%s"
var path := path_tmpl % chosen_map
GameServerManager.current_map = path
var err := GameServerManager.create_server(player_manager)
if err != OK:
push_error("couldn't create a server")
$UI.hide()
change_level.call_deferred(path)
# Call this function deferred and only on the main authority (server).
func change_level(path: String):
# Remove old level if any.
var level = $LevelLoader/CurrentLevel
print("cleaning up the mount node")
for c in level.get_children():
level.remove_child(c)
c.queue_free()
# Add new level.
if not ResourceLoader.exists(path):
print(ERR_DOES_NOT_EXIST)
var scene: PackedScene = ResourceLoader.load(path)
if scene.can_instantiate():
var node: Node3D = scene.instantiate()
print("loading map: " + node.name)
level.add_child(node)
else:
print("Can't initialize")
func _on_text_edit_text_changed() -> void:
player_manager.name = $UI/TextEdit.text
func _on_join_button_pressed() -> void:
$UI.hide()
GameServerManager.join_server(player_manager, $UI/JoinServer/IP.text, $UI/JoinServer/Port.text.to_int())