extends Node var local_player: Player signal current_player_changed var current_player_id: int: set (value): current_player_id = value current_player = get_player(value) current_player_changed.emit() var current_player: Player var player_order := [1]: set (value): player_order = value set_player_order.rpc(value) func _ready() -> void: multiplayer.peer_connected.connect(_on_peer_connected) multiplayer.peer_disconnected.connect(_on_peer_disconnected) func host() -> void: var peer := ENetMultiplayerPeer.new() peer.create_server(1234) multiplayer.multiplayer_peer = peer add_player(multiplayer.get_unique_id()) local_player = get_player(multiplayer.get_unique_id()) current_player = local_player current_player_id = multiplayer.get_unique_id() func join() -> void: var peer := ENetMultiplayerPeer.new() peer.create_client("localhost", 1234) multiplayer.multiplayer_peer = peer add_player(multiplayer.get_unique_id()) local_player = get_player(multiplayer.get_unique_id()) func add_player(id: int) -> void: var player: Player = load("res://player/player.tscn").instantiate() player.id = id %Players.add_child(player) func get_player(id: int) -> Player: return %Players.get_node(str(id)) func is_my_turn() -> bool: return current_player == local_player func set_current_player(id: int) -> void: sync_current_player.rpc(id) @rpc("any_peer", "call_local") func sync_current_player(id: int) -> void: current_player_id = id @rpc("authority", "call_remote") func set_player_order(value: Array) -> void: player_order = value func _on_peer_connected(id: int): add_player(id) if multiplayer.is_server(): sync_current_player.rpc_id(id, current_player_id) player_order.append(id) else: get_player(id).set_initial_values() func _on_peer_disconnected(id: int): %Players.remove_child(%Players.get_node(str(id)))