feat: network_manager — add broadcast_roll RPC + roll_received signal
This commit is contained in:
@@ -14,6 +14,7 @@ signal player_joined(peer_id: int, player_name: String, role: String)
|
||||
signal player_left(peer_id: int)
|
||||
signal player_list_synced()
|
||||
signal game_started()
|
||||
signal roll_received(roller_peer_id: int, player_name: String, d20_result: int, modifier: int, total: int)
|
||||
|
||||
|
||||
func start_server(port: int, max_clients: int) -> void:
|
||||
@@ -164,3 +165,18 @@ func set_overlay(overlay_name: String) -> void:
|
||||
@rpc("any_peer", "call_remote", "unreliable")
|
||||
func sync_player_position(player_id: int, position: Vector3, rotation: Vector3) -> void:
|
||||
GameState.update_player_transform(player_id, position, rotation)
|
||||
|
||||
|
||||
# Client calls this on server only (rpc_id(1, ...))
|
||||
@rpc("any_peer", "call_remote", "reliable")
|
||||
func broadcast_roll(roller_peer_id: int, d20_result: int, modifier: int) -> void:
|
||||
if not multiplayer.is_server(): return
|
||||
_relay_roll.rpc(roller_peer_id, d20_result, modifier)
|
||||
|
||||
|
||||
# Server broadcasts to all (including itself via call_local)
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func _relay_roll(roller_peer_id: int, d20_result: int, modifier: int) -> void:
|
||||
var player_name: String = players.get(roller_peer_id, {}).get("name", "???")
|
||||
var total := d20_result + modifier
|
||||
roll_received.emit(roller_peer_id, player_name, d20_result, modifier, total)
|
||||
|
||||
Reference in New Issue
Block a user