|
|
|
@ -5,11 +5,13 @@ extends Control
|
|
|
|
|
@export var host_button: Button
|
|
|
|
|
@export var join_button: Button
|
|
|
|
|
@export var lobby_id: LineEdit
|
|
|
|
|
@export var hosted_lobby_id: Label
|
|
|
|
|
@export var hosted_lobby_id: LineEdit
|
|
|
|
|
@export var users_list: VBoxContainer
|
|
|
|
|
|
|
|
|
|
@export var user_box_prefab: PackedScene
|
|
|
|
|
|
|
|
|
|
var avatar_image_cache: ImageTexture
|
|
|
|
|
|
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
|
|
|
func _ready() -> void:
|
|
|
|
|
host_button.button_down.connect(_on_host_button_pressed)
|
|
|
|
@ -47,25 +49,33 @@ func _on_join_button_pressed() -> void:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 = load_avatar(user_id)
|
|
|
|
|
|
|
|
|
|
func load_avatar(user_id: int) -> ImageTexture:
|
|
|
|
|
Steam.getPlayerAvatar(user_id)
|
|
|
|
|
Steam.avatar_loaded.connect(
|
|
|
|
|
func(_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:
|
|
|
|
|
return ImageTexture.create_from_image(avatar_image)
|
|
|
|
|
else:
|
|
|
|
|
GameConsole.log_error("Failed to create avatar image!")
|
|
|
|
|
)
|
|
|
|
|
return null
|
|
|
|
|
user_box.get_node("PFP").texture = await load_avatar(user_id)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func load_avatar(user_id: int) -> ImageTexture:
|
|
|
|
|
avatar_image_cache = null
|
|
|
|
|
Steam.getPlayerAvatar(user_id)
|
|
|
|
|
Steam.avatar_loaded.connect(_on_avatar_loaded)
|
|
|
|
|
while avatar_image_cache == 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:
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
GameConsole.log_error("Failed to create avatar image!")
|
|
|
|
|