diff --git a/assets/core/networking/NetworkManager.gd b/assets/core/networking/NetworkManager.gd index 9ab7117..25db8e0 100644 --- a/assets/core/networking/NetworkManager.gd +++ b/assets/core/networking/NetworkManager.gd @@ -5,14 +5,18 @@ const PACKET_READ_LIMIT: int = 32 var steam_id: int var username: String -var avatar_texture: ImageTexture +var my_avatar_texture: ImageTexture var is_host: bool = false var lobby_id: int = 0 var lobby_members: Array = [] 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) @@ -41,17 +45,21 @@ func _process(_delta: float) -> void: read_all_p2p_packets() -func _on_avatar_loaded(_user_id: int, avatar_size: int, avatar_buffer: PackedByteArray) -> void: +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_texture = ImageTexture.create_from_image(avatar_image) - GameConsole.print_line("Avatar loaded!") + var avatar_texture = ImageTexture.create_from_image(avatar_image) + 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: - GameConsole.log_error("Failed to create avatar image!") + GameConsole.log_error("Failed to create avatar image for: " + Steam.getFriendPersonaName(user_id)) func _on_lobby_created(connection_status: int, this_lobby_id: int) -> void: diff --git a/assets/core/networking/network_test_ui.gd b/assets/core/networking/network_test_ui.gd index 27786ab..1216360 100644 --- a/assets/core/networking/network_test_ui.gd +++ b/assets/core/networking/network_test_ui.gd @@ -10,8 +10,6 @@ extends Control @export var user_box_prefab: PackedScene -var avatar_image_cache: Dictionary = {} - func _ready() -> void: host_button.button_down.connect(_on_host_button_pressed) @@ -24,16 +22,15 @@ func _ready() -> void: user_box1.get_node("Username").text = network_manager.username - if network_manager.avatar_texture == null: - GameConsole.log_error("Avatar texture is null!") + if network_manager.my_avatar_texture == null: get_tree().create_timer(0.005).timeout.connect( func(): - user_box1.get_node("PFP").texture = network_manager.avatar_texture + user_box1.get_node("PFP").texture = network_manager.my_avatar_texture ) else: - user_box1.get_node("PFP").texture = network_manager.avatar_texture + user_box1.get_node("PFP").texture = network_manager.my_avatar_texture - Steam.avatar_loaded.connect(_on_avatar_loaded) + Steam.avatar_loaded.connect(network_manager._on_avatar_loaded) func _on_host_button_pressed() -> void: @@ -51,36 +48,22 @@ func _on_join_button_pressed() -> void: func _on_user_joined_lobby(user_id: int, username: String) -> void: - if user_id == network_manager.steam_id: - return + 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 - load_avatar(user_id, user_box) + get_avatar(user_id, user_box) -func load_avatar(user_id: int, user_box: Node) -> void: - avatar_image_cache[user_id] = null +func get_avatar(user_id: int, user_box: Node) -> void: + Steam.getPlayerAvatar(user_id) - var timer: SceneTreeTimer = get_tree().create_timer(0.1) + var timer: SceneTreeTimer = get_tree().create_timer(0.5) timer.timeout.connect( func(): - if avatar_image_cache[user_id] != null: - user_box.get_node("PFP").texture = avatar_image_cache[user_id] - timer.stop() + if network_manager.lobby_members_avatar_cache[user_id] != null: + user_box.get_node("PFP").texture = network_manager.lobby_members_avatar_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[user_id] = ImageTexture.create_from_image(avatar_image) - else: - GameConsole.log_error("Failed to create avatar image!") \ No newline at end of file