From 30fa3b4adbf9e7b252f10e6587f4ec23504724ae Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Thu, 12 Dec 2024 20:59:16 -0600 Subject: [PATCH] User list should now also populate on the client who joins --- assets/core/networking/NetworkManager.gd | 1 + assets/core/networking/network_test_ui.gd | 52 +++++++++++------------ 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/assets/core/networking/NetworkManager.gd b/assets/core/networking/NetworkManager.gd index 3af94e8..5fe1129 100644 --- a/assets/core/networking/NetworkManager.gd +++ b/assets/core/networking/NetworkManager.gd @@ -110,6 +110,7 @@ func get_lobby_members(): var member_id: int = Steam.getLobbyMemberByIndex(lobby_id, member) var member_username: String = Steam.getFriendPersonaName(member_id) lobby_members.append({"steam_id": member_id, "username": member_username}) + user_joined_lobby.emit(member_id, member_username) diff --git a/assets/core/networking/network_test_ui.gd b/assets/core/networking/network_test_ui.gd index c306485..b182bc3 100644 --- a/assets/core/networking/network_test_ui.gd +++ b/assets/core/networking/network_test_ui.gd @@ -10,29 +10,32 @@ extends Control @export var user_box_prefab: PackedScene -var avatar_image_cache: ImageTexture +var avatar_image_cache: Dictionary = {} # Called when the node enters the scene tree for the first time. func _ready() -> void: host_button.button_down.connect(_on_host_button_pressed) join_button.button_down.connect(_on_join_button_pressed) - + network_manager.user_joined_lobby.connect(_on_user_joined_lobby) - + var user_box1: Node = user_box_prefab.instantiate() users_list.add_child(user_box1) - + user_box1.get_node("Username").text = network_manager.username if network_manager.avatar_texture == null: GameConsole.log_error("Avatar texture is null!") get_tree().create_timer(0.005).timeout.connect( - func(): - user_box1.get_node("PFP").texture = network_manager.avatar_texture + func(): + user_box1.get_node("PFP").texture = network_manager.avatar_texture ) else: user_box1.get_node("PFP").texture = network_manager.avatar_texture + # Connect the avatar_loaded signal once + Steam.avatar_loaded.connect(_on_avatar_loaded) + func _on_host_button_pressed() -> void: network_manager.create_lobby() @@ -40,42 +43,39 @@ func _on_host_button_pressed() -> void: func(): hosted_lobby_id.text = ("Lobby hosted: " + str(network_manager.lobby_id)) ) - + hosted_lobby_id.visible = true - - + + func _on_join_button_pressed() -> void: network_manager.join_lobby(int(lobby_id.text)) - + func _on_user_joined_lobby(user_id: int, username: String) -> void: print(user_id, Steam.getFriendPersonaName(user_id)) var user_box: Node = user_box_prefab.instantiate() user_box.name = "UserBox_" + str(user_id) users_list.add_child(user_box) - + user_box.get_node("Username").text = username user_box.get_node("PFP").texture = await load_avatar(user_id) - - + + func load_avatar(user_id: int) -> ImageTexture: - avatar_image_cache = null + avatar_image_cache[user_id] = null Steam.getPlayerAvatar(user_id) - Steam.avatar_loaded.connect(_on_avatar_loaded) - while avatar_image_cache == null: + while avatar_image_cache[user_id] == null: await get_tree().create_timer(0.1).timeout - return avatar_image_cache - - -func _on_avatar_loaded(_user_id: int, avatar_size: int, avatar_buffer: PackedByteArray) -> void: - + return avatar_image_cache[user_id] + + +func _on_avatar_loaded(user_id: int, avatar_size: int, avatar_buffer: PackedByteArray) -> void: var avatar_image: Image = Image.create_from_data(avatar_size, avatar_size, false, Image.FORMAT_RGBA8, avatar_buffer) - + if avatar_size > 128: avatar_image.resize(128, 128, Image.INTERPOLATE_LANCZOS) - + if avatar_image != null: - avatar_image_cache = ImageTexture.create_from_image(avatar_image) - + avatar_image_cache[user_id] = ImageTexture.create_from_image(avatar_image) else: - GameConsole.log_error("Failed to create avatar image!") + GameConsole.log_error("Failed to create avatar image!") \ No newline at end of file