From 02617f2b5b924f54b4254855281e570218816d62 Mon Sep 17 00:00:00 2001 From: Chris Bell Date: Thu, 12 Dec 2024 22:05:42 -0600 Subject: [PATCH] Moved avatar loading to be solely the network managers job --- assets/core/networking/NetworkManager.gd | 11 ++++++----- assets/core/networking/network_test_ui.gd | 18 +++++++----------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/assets/core/networking/NetworkManager.gd b/assets/core/networking/NetworkManager.gd index 25db8e0..0627bd9 100644 --- a/assets/core/networking/NetworkManager.gd +++ b/assets/core/networking/NetworkManager.gd @@ -14,9 +14,6 @@ var lobby_members_max: int = 4 var lobby_members_avatar_cache: Dictionary = {} signal user_joined_lobby(steam_id: int, username: String) -signal avatar_ready(user_id: int, avatar_texture: ImageTexture) - - func _ready() -> void: var init_result = Steam.steamInit(true, 480) @@ -46,6 +43,9 @@ func _process(_delta: float) -> void: func _on_avatar_loaded(user_id: int, avatar_size: int, avatar_buffer: PackedByteArray) -> void: + if lobby_members_avatar_cache.has(user_id): + return + 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) @@ -55,7 +55,6 @@ func _on_avatar_loaded(user_id: int, avatar_size: int, avatar_buffer: PackedByte if user_id == steam_id: my_avatar_texture = avatar_texture - avatar_ready.emit(user_id, avatar_texture) GameConsole.print_line("Avatar loaded for: " + Steam.getFriendPersonaName(user_id)) lobby_members_avatar_cache[user_id] = avatar_texture else: @@ -118,7 +117,9 @@ 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}) + Steam.getPlayerAvatar(member_id) user_joined_lobby.emit(member_id, member_username) + await get_tree().create_timer(0.3).timeout @@ -151,7 +152,7 @@ func read_p2p_packet() -> void: match read_data["message"]: "handshake": GameConsole.print_line("Handshake from: " + read_data["username"]) - get_lobby_members() + await get_lobby_members() "chat": GameConsole.print_line(read_data["username"] + ": " + read_data["message"]) _: diff --git a/assets/core/networking/network_test_ui.gd b/assets/core/networking/network_test_ui.gd index f43818c..9037ffa 100644 --- a/assets/core/networking/network_test_ui.gd +++ b/assets/core/networking/network_test_ui.gd @@ -54,18 +54,14 @@ func _on_user_joined_lobby(user_id: int, username: String) -> void: users_list.add_child(user_box) user_box.get_node("Username").text = username - get_avatar(user_id, user_box) + user_box.get_node("PFP").texture = get_avatar(user_id) -func get_avatar(user_id: int, user_box: Node) -> void: - Steam.getPlayerAvatar(user_id) - - network_manager.avatar_ready.connect( - func(user_id: int, avatar_texture: ImageTexture): - if network_manager.lobby_members_avatar_cache[user_id] != null: - user_box.get_node("PFP").texture = network_manager.lobby_members_avatar_cache[user_id] - else: - GameConsole.log_error("Avatar not found for: " + Steam.getFriendPersonaName(user_id)) - ) +func get_avatar(user_id: int) -> ImageTexture: + if network_manager.lobby_members_avatar_cache.has(user_id): + return network_manager.lobby_members_avatar_cache[user_id] + else: + GameConsole.log_error("Avatar not found for: " + Steam.getFriendPersonaName(user_id)) + return null