feat: tavern.gd — DM role check + camera broadcast to DM every 0.1s
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user