extends Node @export var player_scene: PackedScene = preload("res://objects/player.tscn") signal player_joined(player: Player) signal player_left(player: Player) func _ready() -> void: connect("child_entered_tree", on_child_added) @rpc("any_peer", "call_remote", "reliable") func create_player_for_session_id(session_id: int) -> void: for child in get_children(): var player: Player = child as Player if player == null: continue if player.session_id == session_id: return var player: Player = player_scene.instantiate() as Player player.name = "Player %d" % session_id player.session_id = session_id print("Created player object for session ID %d" % session_id) add_child(player) func find_player_by_session_id(session_id: int) -> Player: for child in get_children(): var player: Player = child as Player if player == null: continue if player.session_id == session_id: return player create_player_for_session_id.rpc_id(1, session_id) for child in get_children(): var player: Player = child as Player if player == null: continue if player.session_id == session_id: return player return null func on_child_added(node: Node) -> void: if node is Player: print("Player joined: %d" % node.session_id) player_joined.emit(node as Player)