diff --git a/ruf-der-pilze/scripts/tavern.gd b/ruf-der-pilze/scripts/tavern.gd index 23583a2..ed62c59 100644 --- a/ruf-der-pilze/scripts/tavern.gd +++ b/ruf-der-pilze/scripts/tavern.gd @@ -7,8 +7,37 @@ func _ready() -> void: var args := OS.get_cmdline_args() + OS.get_cmdline_user_args() if OS.has_feature("dedicated_server") or "--server" in args: return + var role: String = NetworkManager.players.get(NetworkManager.my_id, {}).get("role", "player") + if role == "dm": + return # DM lädt tavern.tscn nur für Top-Down-Ansicht, kein PlayerController var room_index := SceneManager.pending_room_index _spawn_player(room_index) + # Kamera-Transform-Broadcast alle 0.1s an DM-Peer + var timer := Timer.new() + timer.wait_time = 0.1 + timer.autostart = true + timer.timeout.connect(_broadcast_camera_transform) + add_child(timer) + + +func _get_dm_peer_id() -> int: + for peer_id in NetworkManager.players.keys(): + if NetworkManager.players[peer_id].get("role", "") == "dm": + return peer_id + return 0 + + +func _broadcast_camera_transform() -> void: + var dm_id := _get_dm_peer_id() + if dm_id == 0: + return + var controller := get_node_or_null("PlayerController") + if controller == null: + return + var cam := controller.get_node_or_null("Camera3D") as Camera3D + var pos := cam.global_position if cam != null else controller.global_position + var rot := cam.global_rotation if cam != null else controller.global_rotation + NetworkManager.sync_player_position.rpc_id(dm_id, NetworkManager.my_id, pos, rot) func _spawn_player(room_index: int) -> void: