Merging networking features #5
@ -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)
|
||||
|
||||
|
||||
|
||||
|
@ -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!")
|
Loading…
Reference in New Issue
Block a user