Many changes to loading avatars and populating user list
This commit is contained in:
parent
fc8bb540db
commit
101c08c03f
@ -3,7 +3,7 @@
|
|||||||
[ext_resource type="Script" path="res://assets/core/networking/scripts/lobby.gd" id="1_o4fbq"]
|
[ext_resource type="Script" path="res://assets/core/networking/scripts/lobby.gd" id="1_o4fbq"]
|
||||||
[ext_resource type="PackedScene" uid="uid://biryul3n6thlw" path="res://assets/core/networking/scenes/user_box_prefab.tscn" id="2_dpthk"]
|
[ext_resource type="PackedScene" uid="uid://biryul3n6thlw" path="res://assets/core/networking/scenes/user_box_prefab.tscn" id="2_dpthk"]
|
||||||
|
|
||||||
[node name="Lobby" type="Control" node_paths=PackedStringArray("host_button", "join_button", "leave_button", "lobby_id", "user_list_box")]
|
[node name="Lobby" type="Control" node_paths=PackedStringArray("host_button", "join_button", "leave_button", "lobby_id_line_edit", "user_list_box")]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@ -14,7 +14,7 @@ script = ExtResource("1_o4fbq")
|
|||||||
host_button = NodePath("Panel/HBoxContainer/Buttons/Host")
|
host_button = NodePath("Panel/HBoxContainer/Buttons/Host")
|
||||||
join_button = NodePath("Panel/HBoxContainer/Buttons/HBoxContainer/Join")
|
join_button = NodePath("Panel/HBoxContainer/Buttons/HBoxContainer/Join")
|
||||||
leave_button = NodePath("Panel/HBoxContainer/Buttons/Leave")
|
leave_button = NodePath("Panel/HBoxContainer/Buttons/Leave")
|
||||||
lobby_id = NodePath("Panel/HBoxContainer/Buttons/HBoxContainer/LineEdit")
|
lobby_id_line_edit = NodePath("Panel/HBoxContainer/Buttons/HBoxContainer/LineEdit")
|
||||||
user_list_box = NodePath("Panel/HBoxContainer/PlayerList")
|
user_list_box = NodePath("Panel/HBoxContainer/PlayerList")
|
||||||
user_box_prefab = ExtResource("2_dpthk")
|
user_box_prefab = ExtResource("2_dpthk")
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ signal lobby_created(lobby_id: int)
|
|||||||
signal lobby_joined(lobby_id: int)
|
signal lobby_joined(lobby_id: int)
|
||||||
signal user_joined_lobby(user_id: int)
|
signal user_joined_lobby(user_id: int)
|
||||||
signal user_left_lobby(user_id: int)
|
signal user_left_lobby(user_id: int)
|
||||||
|
signal avatar_loaded(user_id: int, avatar_texture: ImageTexture)
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
@ -48,8 +49,8 @@ func _init_steam() -> void:
|
|||||||
Steam.join_requested.connect(_on_lobby_join_requested)
|
Steam.join_requested.connect(_on_lobby_join_requested)
|
||||||
Steam.lobby_chat_update.connect(_on_lobby_chat_update)
|
Steam.lobby_chat_update.connect(_on_lobby_chat_update)
|
||||||
Steam.lobby_created.connect(_on_lobby_created)
|
Steam.lobby_created.connect(_on_lobby_created)
|
||||||
Steam.lobby_data_update.connect(_on_lobby_data_update)
|
#Steam.lobby_data_update.connect(_on_lobby_data_update)
|
||||||
Steam.lobby_invite.connect(_on_lobby_invite)
|
#Steam.lobby_invite.connect(_on_lobby_invite)
|
||||||
Steam.lobby_joined.connect(_on_lobby_joined)
|
Steam.lobby_joined.connect(_on_lobby_joined)
|
||||||
Steam.lobby_match_list.connect(_on_lobby_match_list)
|
Steam.lobby_match_list.connect(_on_lobby_match_list)
|
||||||
Steam.lobby_message.connect(_on_lobby_message)
|
Steam.lobby_message.connect(_on_lobby_message)
|
||||||
@ -96,15 +97,15 @@ func _on_lobby_created(connect: int, this_lobby_id: int) -> void:
|
|||||||
var set_relay: bool = Steam.allowP2PPacketRelay(true)
|
var set_relay: bool = Steam.allowP2PPacketRelay(true)
|
||||||
|
|
||||||
|
|
||||||
func _on_lobby_data_update():
|
#func _on_lobby_data_update():
|
||||||
pass
|
# pass
|
||||||
|
|
||||||
|
|
||||||
func _on_lobby_invite():
|
#func _on_lobby_invite():
|
||||||
pass
|
# pass
|
||||||
|
|
||||||
|
|
||||||
func _on_lobby_joined(this_lobby_id: int, _permissions: int, response: int) -> void:
|
func _on_lobby_joined(this_lobby_id: int, _permissions: int, _locked: bool, response: int) -> void:
|
||||||
if response == Steam.CHAT_ROOM_ENTER_RESPONSE_SUCCESS:
|
if response == Steam.CHAT_ROOM_ENTER_RESPONSE_SUCCESS:
|
||||||
lobby_id = this_lobby_id
|
lobby_id = this_lobby_id
|
||||||
get_lobby_members()
|
get_lobby_members()
|
||||||
@ -137,9 +138,13 @@ func _on_lobby_message():
|
|||||||
|
|
||||||
|
|
||||||
func _on_persona_change(this_steam_id: int, _flags: int) -> void:
|
func _on_persona_change(this_steam_id: int, _flags: int) -> void:
|
||||||
if lobby_id > 0:
|
if lobby_id > 0 and lobby_members:
|
||||||
print("User (%s) had information change, updating lobby list." % str(this_steam_id))
|
for member in lobby_members:
|
||||||
|
if member["steam_id"] == this_steam_id:
|
||||||
|
var user: String = str(this_steam_id) + ":" + Steam.getFriendPersonaName(this_steam_id)
|
||||||
|
print("User (%s) had information change, updating lobby list." % user)
|
||||||
get_lobby_members()
|
get_lobby_members()
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
func _on_p2p_session_request(remote_id: int):
|
func _on_p2p_session_request(remote_id: int):
|
||||||
@ -202,6 +207,7 @@ func leave_lobby():
|
|||||||
Steam.closeP2PSessionWithUser(this_member["steam_id"])
|
Steam.closeP2PSessionWithUser(this_member["steam_id"])
|
||||||
|
|
||||||
lobby_members.clear()
|
lobby_members.clear()
|
||||||
|
print("Left lobby.")
|
||||||
|
|
||||||
|
|
||||||
func get_lobby_members():
|
func get_lobby_members():
|
||||||
@ -280,9 +286,6 @@ func read_p2p_packet() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func request_player_avatar(user_id: int, size: int = 128) -> void:
|
func request_player_avatar(user_id: int, size: int = 128) -> void:
|
||||||
if avatar_texture_cache.has(user_id):
|
|
||||||
return
|
|
||||||
|
|
||||||
var avatar_texture: ImageTexture = null
|
var avatar_texture: ImageTexture = null
|
||||||
Steam.getPlayerAvatar(Steam.AVATAR_LARGE, user_id)
|
Steam.getPlayerAvatar(Steam.AVATAR_LARGE, user_id)
|
||||||
print("Attempting to get avatar for " + Steam.getFriendPersonaName(user_id) + ".....")
|
print("Attempting to get avatar for " + Steam.getFriendPersonaName(user_id) + ".....")
|
||||||
@ -298,15 +301,19 @@ func request_player_avatar(user_id: int, size: int = 128) -> void:
|
|||||||
avatar_texture_cache[user_id] = avatar_texture
|
avatar_texture_cache[user_id] = avatar_texture
|
||||||
)
|
)
|
||||||
|
|
||||||
# Wait for the avatar to load asynchronously
|
|
||||||
await get_tree().process_frames(2)
|
|
||||||
|
|
||||||
if avatar_texture == null:
|
while not avatar_texture_cache.has(user_id):
|
||||||
printerr("Could not load image for user: " + Steam.getFriendPersonaName(user_id))
|
await get_tree().process_frame
|
||||||
|
|
||||||
|
|
||||||
func get_player_avatar(user_id: int) -> ImageTexture:
|
func get_player_avatar(user_id: int) -> ImageTexture:
|
||||||
if avatar_texture_cache.has(user_id):
|
if avatar_texture_cache.has(user_id):
|
||||||
return avatar_texture_cache[user_id]
|
return avatar_texture_cache[user_id]
|
||||||
else:
|
else:
|
||||||
return await request_player_avatar(user_id)
|
await request_player_avatar(user_id)
|
||||||
|
return avatar_texture_cache[user_id]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,10 +3,11 @@ extends Control
|
|||||||
@export var host_button: Button
|
@export var host_button: Button
|
||||||
@export var join_button: Button
|
@export var join_button: Button
|
||||||
@export var leave_button: Button
|
@export var leave_button: Button
|
||||||
@export var lobby_id: LineEdit
|
@export var lobby_id_line_edit: LineEdit
|
||||||
@export var user_list_box: VBoxContainer
|
@export var user_list_box: VBoxContainer
|
||||||
@export var user_box_prefab: PackedScene
|
@export var user_box_prefab: PackedScene
|
||||||
|
|
||||||
|
var added_users = []
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
host_button.pressed.connect(_on_host)
|
host_button.pressed.connect(_on_host)
|
||||||
@ -18,45 +19,59 @@ func _ready() -> void:
|
|||||||
NetworkManager.user_joined_lobby.connect(_on_user_joined_lobby)
|
NetworkManager.user_joined_lobby.connect(_on_user_joined_lobby)
|
||||||
NetworkManager.user_left_lobby.connect(_on_user_left_lobby)
|
NetworkManager.user_left_lobby.connect(_on_user_left_lobby)
|
||||||
|
|
||||||
|
GameConsole.register_command(Command.new("update", update, [], "Updates the lobby UI"))
|
||||||
|
|
||||||
func _on_host():
|
func _on_host():
|
||||||
NetworkManager.host_lobby()
|
NetworkManager.host_lobby()
|
||||||
host_button.disabled = true
|
host_button.disabled = true
|
||||||
join_button.disabled = true
|
join_button.disabled = true
|
||||||
leave_button.disabled = false
|
leave_button.disabled = false
|
||||||
lobby_id.disabled = true
|
lobby_id_line_edit.editable = false
|
||||||
lobby_id.text = str(NetworkManager.lobby_id)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_join():
|
func _on_join():
|
||||||
NetworkManager.join_lobby(int(lobby_id.text))
|
NetworkManager.join_lobby(int(lobby_id_line_edit.text))
|
||||||
host_button.disabled = true
|
host_button.disabled = true
|
||||||
join_button.disabled = true
|
join_button.disabled = true
|
||||||
leave_button.disabled = false
|
leave_button.disabled = false
|
||||||
lobby_id.disabled = true
|
lobby_id_line_edit.editable = false
|
||||||
|
|
||||||
|
|
||||||
func _on_leave():
|
func _on_leave():
|
||||||
NetworkManager.leave_lobby()
|
NetworkManager.leave_lobby()
|
||||||
|
added_users.clear()
|
||||||
|
for child in user_list_box.get_children():
|
||||||
|
child.queue_free()
|
||||||
|
|
||||||
|
func _on_lobby_created(lobby_id: int):
|
||||||
func _on_lobby_created():
|
|
||||||
print("Lobby created")
|
print("Lobby created")
|
||||||
|
lobby_id_line_edit.text = str(NetworkManager.lobby_id)
|
||||||
|
|
||||||
|
|
||||||
func _on_lobby_joined():
|
func _on_lobby_joined(lobby_id: int):
|
||||||
print("Lobby joined")
|
print("Lobby joined")
|
||||||
|
|
||||||
|
func _on_user_joined_lobby(user_id: int):
|
||||||
|
if user_id in added_users:
|
||||||
|
return # User already added, skip
|
||||||
|
|
||||||
func _on_user_joined_lobby(user_id:int):
|
added_users.append(user_id)
|
||||||
var user_box = user_box_prefab.instance()
|
update()
|
||||||
user_box.get_node("Username").text = str(user_id)
|
|
||||||
user_list_box.add_child(user_box)
|
|
||||||
user_box.get_node("PFP").texture = await NetworkManager.get_player_avatar(user_id)
|
|
||||||
|
|
||||||
|
func _on_user_left_lobby(user_id: int):
|
||||||
func _on_user_left_lobby(user_id:int):
|
|
||||||
for child in user_list_box.get_children():
|
for child in user_list_box.get_children():
|
||||||
if child.get_node("Username").text == str(user_id):
|
if child.get_node("Username").text == str(user_id):
|
||||||
user_list_box.remove_child(child)
|
user_list_box.remove_child(child)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
|
func update() -> void:
|
||||||
|
for child in user_list_box.get_children():
|
||||||
|
child.queue_free()
|
||||||
|
|
||||||
|
for user_id in added_users:
|
||||||
|
var user_box = user_box_prefab.instantiate()
|
||||||
|
user_box.get_node("Username").text = str(Steam.getFriendPersonaName(user_id))
|
||||||
|
user_list_box.add_child(user_box)
|
||||||
|
|
||||||
|
var avatar_texture = await NetworkManager.get_player_avatar(user_id)
|
||||||
|
user_box.get_node("PFP").texture = avatar_texture
|
||||||
|
Loading…
Reference in New Issue
Block a user