feat: tavern.gd — DM role check + camera broadcast to DM every 0.1s

This commit is contained in:
2026-04-14 03:21:03 +02:00
parent e30c49d1d3
commit 62c2cb7a54

View File

@@ -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: