Merging networking features #5

Merged
gskeough merged 27 commits from feature/godot-steam-integration into develop 2024-12-14 03:37:16 +00:00
4 changed files with 31 additions and 19 deletions
Showing only changes of commit 8f1455f9f6 - Show all commits

View File

@ -6,6 +6,7 @@
[node name="GameConsole" type="Control"]
process_mode = 3
z_index = 4096
z_as_relative = false
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0

View File

@ -147,4 +147,4 @@ func read_p2p_packet() -> void:
"chat":
GameConsole.print_line(read_data["username"] + ": " + read_data["message"])
_:
GameConsole.print_line("Unknown message: " + read_data["message"])
GameConsole.print_line("Unknown message: " + read_data["message"])

View File

@ -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!")

View File

@ -56,10 +56,11 @@ text = "Join"
layout_mode = 2
placeholder_text = "Lobby ID"
[node name="HostedLobbyID" type="Label" parent="UiRoot/Panel/HBoxContainer/VBoxContainer"]
[node name="HostedLobbyID" type="LineEdit" parent="UiRoot/Panel/HBoxContainer/VBoxContainer"]
visible = false
layout_mode = 2
text = "Lobby hosted: "
editable = false
[node name="UsersList" type="VBoxContainer" parent="UiRoot/Panel/HBoxContainer"]
layout_mode = 2