extends Node ## Wechselt zwischen Menü und laufender Partie. ## ## Mit `-- server ` läuft dieselbe Datei als Raum auf dem Spielserver: ## kein Menü, kein Bild, nur die Spiellogik. var menu: CanvasLayer var game: Node3D func _ready() -> void: Net.game_started.connect(_start_game) Net.server_closed.connect(_back_to_menu) var args := OS.get_cmdline_user_args() if args.size() >= 2 and args[0] == "server": if not Net.serve(int(args[1])): get_tree().quit(1) return menu = preload("res://scripts/menu.gd").new() add_child(menu) ## Das Spiel startet im Vollbild; F11 schaltet um. func _unhandled_key_input(event: InputEvent) -> void: if event is InputEventKey and event.pressed and event.keycode == KEY_F11: var full := DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED if full else DisplayServer.WINDOW_MODE_FULLSCREEN) get_viewport().set_input_as_handled() func _start_game(cfg: Dictionary) -> void: if game != null: return if menu != null: menu.queue_free() menu = null game = Node3D.new() game.set_script(preload("res://scripts/game.gd")) game.name = "Game" # fester Pfad, sonst findet das RPC-Routing den Knoten nicht add_child(game) game.setup(cfg) func _back_to_menu() -> void: if game != null: get_tree().change_scene_to_file("res://scenes/main.tscn")